[
  {
    "path": ".coveragerc",
    "content": "# .coveragerc to control coverage.py\n[run]\nbranch = True\n\n[report]\n# Regexes for lines to exclude from consideration\nexclude_lines =\n    # Have to re-enable the standard pragma\n    pragma: no cover\n\n    # Don't complain about missing debug-only code:\n    def __repr__\n    if self\\.debug\n\n    # Don't complain if tests don't hit defensive assertion code:\n    raise AssertionError\n    raise NotImplementedError\n    raise ValueError\n\n    # Don't complain \n    pass\n    logger.info\n\n    # Dont't complain NSML and GPU env\n    if IS_ON_NSML\n    if torch.cuda.is_available()\n    if self.use_multi_gpu\n\n    # Don't complain if non-runnable code isn't run:\n    if 0:\n    if __name__ == .__main__.:\n\nignore_errors = True\n\n[html]\ndirectory = coverage_html_report\n"
  },
  {
    "path": ".gitignore",
    "content": "# Created by https://www.gitignore.io/api/macos,python,jupyternotebook\n\n### CLaF: Clova Language Framework ###\n\n/data/\nlogs/\n/inference_result/hide\nmodel_config/cache\nmodel_config/short\n/mecab\n/src\n\n### pytest\n\ncov_html/\n\n### JupyterNotebook ###\n.ipynb_checkpoints\n*/.ipynb_checkpoints/*\n\n# Remove previous ipynb_checkpoints\n#   git rm -r .ipynb_checkpoints/\n#\n### macOS ###\n*.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must end with two \\r\nIcon\n\n# Thumbnails\n._*\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n.com.apple.timemachine.donotpresent\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\n### Python ###\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\n*.egg-info/\n.installed.cfg\n*.egg\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\n.pytest_cache/\nnosetests.xml\ncoverage.xml\n*.cover\n.hypothesis/\n\n# Translations\n*.mo\n*.pot\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\n# docs/_build/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n\n# pyenv\n.python-version\n\n# celery beat schedule file\ncelerybeat-schedule.*\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n\n\n# End of https://www.gitignore.io/api/macos,python,jupyternotebook\n"
  },
  {
    "path": ".nojekyll",
    "content": ""
  },
  {
    "path": ".readthedocs.yml",
    "content": "# .readthedocs.yml\n# Read the Docs configuration file\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details\n\n# Required\nversion: 2\n\n# Build documentation in the docs/ directory with Sphinx\nsphinx:\n  configuration: docs/conf.py\n\n# Build documentation with MkDocs\n#mkdocs:\n#  configuration: mkdocs.yml\n\n# Optionally build your docs in additional formats such as PDF and ePub\nformats: all\n\n# Optionally set the version of Python and requirements required to build your docs\npython:\n  version: 3.6\n  install:\n    - requirements: docs/requirements.txt\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: python\npython:\n  - \"3.6\"\n# command to install dependencies\ninstall: \n  - pip install --upgrade pip\n  - pip install --progress-bar off -r requirements.txt\n  - pip install --progress-bar off codecov\n  - python -m nltk.downloader punkt\n  - python -m nltk.downloader wordnet\n  - export BOTO_CONFIG=/dev/nul\n# command to run tests\nscript: \n    python -m pytest tests --cov-report term --cov claf\nafter_success:\n    codecov -t 2a4a166c-cd15-4121-b4a7-c2eed4c7390f\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to CLAF\n\nFirst of all, thank you for considering contributing to CLAF. It's people like you that make CLaF such a great framework.\n\nFollowing these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests.\n\nIf you are not familiar with creating a Pull Request, here are some guides:\n    \n- [Create a Pull Request](https://help.github.com/articles/creating-a-pull-request/)\n\n## Bug & Simple features\n\n1. Search on [Issues](https://github.com/naver/claf/issues)\n2. If there are similar issues, add Comments to those issues, otherwise, create new ones\n\n3. Check `pytest`, `black (lint)` before Pull Request\n    - [pytest](https://github.com/pytest-dev/pytest)\n        - Add unittest to the `tests/claf` folder and integration test code if necessary\n        - Run test with coverage ```pytest --cov-config .coveragerc --cov-report html:cov_html --cov=rqa tests``` \n    - [Black](https://github.com/ambv/black) (lint)\n        - ```black claf  -l 120 ``` (reformat your code)\n4. Clean up your work to create a Pull Request\n\n(* When adding a new function (model, optimizer and so on), add it to `claf.config.ars` with a description.)\n\ne.g. Exponential Learning Rate Scheduler\n \n```\n # ExponentialLR:\n  --exponential.gamma OPTIMIZER.EXPONENTIAL.GAMMA\n                            Multiplicative factor of learning rate decay.\n                            Default: 0.1.\n  --exponential.last_epoch OPTIMIZER.EXPONENTIAL.LAST_EPOCH\n                            The index of last epoch.\n                            Default: -1.\n```\n\n## The structure of the framework\n\n1. Post it on the issue and discuss it with maintainers.\n2. After discuss, organize according to priority and start working on.\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM jmin/pytorch:apex\nRUN git clone https://github.com/naver/claf && cd claf && pip install -r requirements.txt && python setup.py install\n\nRUN apt-get install g++ default-jdk\nRUN bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)\n\nRUN python -m nltk.downloader punkt --dir /usr/share/nltk_data\nRUN python -m nltk.downloader wordnet  --dir /usr/share/nltk_data\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2019-present NAVER Corp.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy \nof this software and associated documentation files (the \"Software\"), to deal \nin the Software without restriction, including without limitation the rights \nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell \ncopies of the Software, and to permit persons to whom the Software is \nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all \ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR \nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE \nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER \nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, \nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE \nSOFTWARE."
  },
  {
    "path": "NOTICE",
    "content": "CLaF\nCopyright 2019-present NAVER Corp.\n\nThis project contains subcomponents with separate copyright notices and license terms. \nYour use of the source code for these subcomponents is subject to the terms and conditions of the following licenses.\n\n=======================================================================\nrhobot/Hangulpy from https://github.com/rhobot/Hangulpy\n=======================================================================\n\nCopyright (C) 2012 Ryan Rho, Hyunwoo Cho\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n=======================================================================\nallenai/allennlp from https://github.com/allenai/allennlp\n=======================================================================\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n\n=======================================================================\nfacebookresearch/DrQA from https://github.com/facebookresearch/DrQA\n=======================================================================\n\nBSD License\n\nFor DrQA software\n\nCopyright (c) 2017-present, Facebook, Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n    list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n    this list of conditions and the following disclaimer in the documentation\n       and/or other materials provided with the distribution.\n\n * Neither the name Facebook nor the names of its contributors may be used to\n    endorse or promote products derived from this software without specific\n       prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n====="
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n    <img src=\"images/logo.png\" style=\"inline\" width=300>\n</p>\n\n<h4 align=\"center\">Clova Language Framework</h4>\n\n<p align=\"center\">\n    <a href=\"https://naver.github.io/claf\">\n        <img src=\"https://img.shields.io/badge/docs-passing-brightgreen.svg\" alt=\"Documentation Status\">\n    </a>\n    <a href=\"https://travis-ci.org/naver/claf\">\n        <img src='https://travis-ci.org/naver/claf.svg?branch=master'/>\n    </a>\n    <a href=\"https://github.com/ambv/black\">\n        <img src=\"https://img.shields.io/badge/code%20style-black-000000.svg\" alt=\"Code style: black\">\n    <a href=\"https://codecov.io/gh/naver/claf\">\n    <img src=\"https://codecov.io/gh/naver/claf/branch/master/graph/badge.svg\" />\n  </a>\n</p>\n\n---\n\n# CLaF: Clova Language Framework\n\n\n- [Full Documentation](https://naver.github.io/claf/)\n- [Dataset And Model](https://naver.github.io/claf/docs/_build/html/contents/dataset_and_model.html)\n- [Pretrained Vector](https://naver.github.io/claf/docs/_build/html/contents/pretrained_vector.html)\n- [Tokens](https://naver.github.io/claf/docs/_build/html/contents/tokens.html): `Tokenizers` and `TokenMakers`\n- List of [BaseConfig](#baseconfig)\n\n| Task | Language | Dataset | Model |\n| ---- | -------- | ------- | ----- |\n| Multi-Task Learning | English | [GLUE Benchmark](https://gluebenchmark.com/), [SQuAD v1.1](https://rajpurkar.github.io/SQuAD-explorer/) | `MT-DNN (BERT)` |\n| Natural Language Understanding | English | [GLUE Benchmark](https://gluebenchmark.com/) | `BERT`, `RoBERTa` |\n| Named Entity Recognition | English | CoNLL 2003 | `BERT` |\n| Question Answering | Korean | [KorQuAD v1.0](https://korquad.github.io/category/1.0_KOR.html) | `BiDAF`, `DocQA`, `BERT` |\n| Question Answering | Engilsh | [SQuAD v1.1 and v2.0](https://rajpurkar.github.io/SQuAD-explorer/) | - v1.1: `BiDAF`, `DrQA`, `DocQA`, `DocQA+ELMo`, `QANet`, `BERT`, `RoBERTa` <br/> - v2.0: `BiDAF + No Answer`, `DocQA + No Answer` |\n| Semantic Parsing | English | [WikiSQL](https://github.com/salesforce/WikiSQL) | `SQLNet` |\n\n\n- Reports\n    - [GLUE](https://naver.github.io/claf/docs/_build/html/reports/glue.html)\n    - [KorQuAD](https://naver.github.io/claf/docs/_build/html/reports/korquad.html)\n    - [SQuAD](https://naver.github.io/claf/docs/_build/html/reports/squad.html)\n    - [WikiSQL](https://naver.github.io/claf/docs/_build/html/reports/wikisql.html)\n- Summary (1-example Inference Latency)\n    - [Reading Comprehension](https://naver.github.io/claf/docs/_build/html/summary/reading_comprehension.html)\n\n\n- List of [MachineConfig](#machine)\n\n| Name | Language | Pipeline | Note |\n| ---- | -------- | ------- | ----- |\n| KoWiki | Korean | `Wiki Dumps` -> `Document Retrieval` -> `Reading Comprehension` | - |\n| NLU | All | `Query` -> `Intent Classification` & `Token Classification (Slot)` -> `Template Matching` | - |\n\n---\n\n\n## Table of Contents\n- [Overview](#overview)\n    - [Features](#features)\n- [Installation](#installation) \n    - [Requirements](#requirements)\n    - [Install via pip](#install-via-pip)\n- [Experiment](#experiment)\n\t- [Usage](#usage)\n\t    - [Training](#training) \n\t    - [Evaluate](#evaluate) \n\t    - [Predict](#predict) \n\t    - [Docker Images](#docker-images)\n- [Machine](#machine)\n- [Contributing](#contributing)\n- [Maintainers](#maintainers)\n- [Citing](#citing)\n- [License](#license)\n\n\n---\n\n\n## Overview\n\n**CLaF** is a Language Framework built on PyTorch that provides following two high-level features:\n\n- `Experiment` enables the control of training flow in general NLP by offering various `TokenMaker` methods. \n    - CLaF is inspired by the design principle of [AllenNLP](https://github.com/allenai/allennlp) such as the higher level concepts and reusable code, but mostly based on PyTorch’s common module, so that user can easily modify the code on their demands.  \n- `Machine` helps to combine various modules to build a NLP Machine in one place.\n    - There are knowledge-based, components and trained experiments which infer 1-example in modules.\n\n### Features\n\n- **Multilingual** modeling support (currently, English and Korean are supported).\n- Light weighted **Systemization** and Modularization.\n- Easy extension and implementation of models.\n- A wide variation of **Experiments** with reproducible and comprehensive logging\n- The metrics for services such as \"1\\-example inference latency\" are provided.\n- Easy to build of a NLP **Machine** by combining modules.\n\n\n## Installation\n\n### Requirements\n\n- Python 3.6\n- PyTorch >= 1.3.1\n- [MeCab](https://bitbucket.org/eunjeon/mecab-ko) for Korean Tokenizer\n    - ```sh script/install_mecab.sh```\n\nIt is recommended to use the virtual environment.  \n[Conda](https://conda.io/docs/download.html) is the easiest way to set up a virtual environment.\n\n```\nconda create -n claf python=3.6\nconda activate claf\n\n(claf) ✗ pip install -r requirements.txt\n```\n\n### Install via pip\n\nCommands to install via pip \n\n```\npip install claf\n```\n\n\n## Experiment\n\n- Training Flow\n\n![images](images/claf-experiment.001.png)\n\n\n### Usage\n\n#### Training\n\n![images](images/training_config_mapping.png)\n\n\n1. only Arguments\n\n\t```\n\tpython train.py --train_file_path {file_path} --valid_file_path {file_path} --model_name {name} ...\n\t```\n\n2. only BaseConfig (skip `/base_config` path)\n\n\t```\n\tpython train.py --base_config {base_config}\n\t```\n\t\n3. BaseConfig + Arguments\n\n\t```\n\tpython train.py --base_config {base_config} --learning_rate 0.002\n\t```\n\t\n\t- Load BaseConfig then overwrite `learning_rate` to 0.002\n\n\n#### BaseConfig\n\nDeclarative experiment config (.json, .ymal)\n\n- Simply matching with object's parameters\n- Exists samples in `/base_config` directory\n\n##### Defined BaseConfig\n\n```\nBase Config:\n  --base_config BASE_CONFIG\n    Use pre-defined base_config:\n    []\n\n\n    * CoNLL 2003:\n    ['conll2003/bert_large_cased']\n\n    * GLUE:\n    ['glue/qqp_roberta_base', 'glue/qnli_bert_base', 'glue/rte_bert_base', 'glue/wnli_roberta_base', 'glue/mnlim_roberta_base', 'glue/wnli_bert_base', 'glue/mnlimm_roberta_base', 'glue/cola_bert_base', 'glue/mrpc_bert_base', 'glue/mnlimm_bert_base', 'glue/stsb_bert_base', 'glue/mnlim_bert_base', 'glue/qqp_bert_base', 'glue/rte_roberta_base', 'glue/qnli_roberta_base', 'glue/sst_bert_base', 'glue/mrpc_roberta_base', 'glue/cola_roberta_base', 'glue/stsb_roberta_base', 'glue/sst_roberta_base']\n\n    * KorQuAD:\n    ['korquad/bert_base_multilingual_cased', 'korquad/bidaf', 'korquad/bert_base_multilingual_uncased', 'korquad/docqa']\n\n    * SQuAD:\n    ['squad/bert_large_uncased', 'squad/bidaf', 'squad/drqa_paper', 'squad/drqa', 'squad/bert_base_uncased', 'squad/qanet', 'squad/docqa+elmo', 'squad/bidaf_no_answer', 'squad/docqa_no_answer', 'squad/qanet_paper', 'squad/bidaf+elmo', 'squad/docqa']\n\n    * WikiSQL:\n    ['wikisql/sqlnet']\n```\n\n\n#### Evaluate\n\n```\npython eval.py <data_path> <model_checkpoint_path>\n```\n\n- Example\n\n```\n✗ python eval.py data/squad/dev-v1.1.json logs/squad/bidaf/checkpoint/model_19.pkl\n...\n[INFO] - {\n    \"valid/loss\": 2.59111491665019,\n    \"valid/epoch_time\": 60.7434446811676,\n    \"valid/start_acc\": 63.17880794701987,\n    \"valid/end_acc\": 67.19016083254493,\n    \"valid/span_acc\": 54.45600756859035,\n    \"valid/em\": 68.10785241248817,\n    \"valid/f1\": 77.77963381714842\n}\n# write predictions files (<log_dir>/predictions/predictions-valid-19.json)\n```\n\n- 1-example Inference Latency ([Summary](docs/_build/html/reports/summary.html))\n\n```\n✗ python eval.py data/squad/dev-v1.1.json logs/squad/bidaf/checkpoint/model_19.pkl\n...\n# Evaluate Inference Latency Mode.\n...\n[INFO] - saved inference_latency results. bidaf-cpu.json  # file_format: {model_name}-{env}.json\n```\n\n#### Predict\n\n```\npython predict.py <model_checkpoint_path> --<arguments>\n```\n\n- Example\n\n```\n✗ python predict.py logs/squad/bidaf/checkpoint/model_19.pkl \\\n    --question \"When was the last Super Bowl in California?\" \\\n    --context \"On May 21, 2013, NFL owners at their spring meetings in Boston voted and awarded the game to Levi's Stadium. The $1.2 billion stadium opened in 2014. It is the first Super Bowl held in the San Francisco Bay Area since Super Bowl XIX in 1985, and the first in California since Super Bowl XXXVII took place in San Diego in 2003.\"\n\n>>> Predict: {'text': '2003', 'score': 4.1640071868896484}\n```\n\n#### Docker Images\n\n- [Docker Hub](https://hub.docker.com/u/claf)\n- Run with Docker Image\n    - Pull docker image\n        ```✗ docker pull claf/claf:latest```\n    - Run \n        ``` docker run --rm -i -t claf/claf:latest /bin/bash ```\n\n\n---\n\n\n### Machine\n\n- Machine Architecture\n\n\n![images](images/claf-machine.001.png)\n\n#### Usage\n\n- Define the config file (.json) like [BaseConfig](#baseconfig) in `machine_config/` directory\n- Run CLaF Machine (skip `/machine_config` path)\n\n\n```\n✗ python machine.py --machine_config {machine_config}\n```\n\n\n* The list of pre-defined `Machine`:\n\n```\nMachine Config:\n  --machine_config MACHINE_CONFIG\n    Use pre-defined machine_config (.json (.json))\n\n    ['ko_wiki', 'nlu']\n```\n\n#### Open QA (DrQA Style)\n\nDrQA is a system for reading comprehension applied to open-domain question answering. The system has to combine the challenges of document retrieval (finding the relevant documents) with that of machine comprehension of text (identifying the answers from those documents).\n\n- ko_wiki: Korean Wiki Version\n\n``` \n✗ python machine.py --machine_config ko_wiki\n...\nCompleted!\nQuestion > 동학의 2대 교주 이름은?\n--------------------------------------------------\nDoc Scores:\n - 교주 : 0.5347289443016052\n - 이교주 : 0.4967213571071625\n - 교주도 : 0.49036136269569397\n - 동학 : 0.4800325632095337\n - 동학중학교 : 0.4352934956550598\n--------------------------------------------------\nAnswer: [\n    {\n        \"text\": \"최시형\",\n        \"score\": 11.073444366455078\n    },\n    {\n        \"text\": \"충주목\",\n        \"score\": 9.443866729736328\n    },\n    {\n        \"text\": \"반월동\",\n        \"score\": 9.37778091430664\n    },\n    {\n        \"text\": \"환조 이자춘\",\n        \"score\": 4.64817476272583\n    },\n    {\n        \"text\": \"합포군\",\n        \"score\": 3.3186707496643066\n    }\n]\n```\n\n#### NLU (Dialog)\n\nThe reason why NLU machine does not return the full response is that response generation may require various task-specific post-processing techniques or additional logic(e.g. API calls, template-decision rules, template filling rules, nn-based response generation model) Therefore, for flexible usage, NLU machine returns only the NLU result.\n\n``` \n✗ python machine.py --machine_config nlu\n...\nUtterance > \"looking for a flight from Boston to Seoul or Incheon\"\n\nNLU Result: {\n    \"intent\": \"flight\",\n    \"slots\": {\n        \"city.depart\": [\"Boston\"],\n        \"city.dest\": [\"Seoul\", \"Incheon\"]\n    }\n}\n```\n\n\n## Contributing\n\nThanks for your interest in contributing! There are many ways to contribute to this project.  \nGet started [here](./CONTRIBUTING.md).\n\n## Maintainers\n\nCLaF is currently maintained by \n\n- [Dongjun Lee](https://github.com/DongjunLee) (Author)\n- [Sohee Yang](https://github.com/soheeyang)\n- [Minjeong Kim](https://github.com/Mjkim88)\n\n## Citing\n\nIf you use CLaF for your work, please cite:\n\n```bibtex\n@misc{claf,\n  author = {Lee, Dongjun and Yang, Sohee and Kim, Minjeong},\n  title = {CLaF: Open-Source Clova Language Framework},\n  year = {2019},\n  publisher = {GitHub},\n  journal = {GitHub repository},\n  howpublished = {\\url{https://github.com/naver/claf}}\n}\n```\n\nWe will update this bibtex with our paper.\n\n\n## Acknowledgements\n\n`docs/` directory which includes documentation created by [Sphinx](http://www.sphinx-doc.org/).\n\n## License\n\nMIT license\n\n```\nCopyright (c) 2019-present NAVER Corp.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy \nof this software and associated documentation files (the \"Software\"), to deal \nin the Software without restriction, including without limitation the rights \nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell \ncopies of the Software, and to permit persons to whom the Software is \nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all \ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR \nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE \nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER \nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, \nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE \nSOFTWARE.\n```\n\n\n"
  },
  {
    "path": "base_config/cola/bert_base_uncased.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"cola_bert\",\n         \"train_file_path\": \"<CoLA train.tsv path>\",\n         \"valid_file_path\": \"<CoLA dev.tsv path>\",\n         \"cola_bert\": {\n             \"sequence_max_length\": 128\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/cola_bert\",\n         \"num_epochs\": 3,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 10000\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/cola/bert_large_uncased.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"cola_bert\",\n         \"train_file_path\": \"<CoLA train.tsv path>\",\n         \"valid_file_path\": \"<CoLA dev.tsv path>\",\n         \"cola_bert\": {\n             \"sequence_max_length\": 128\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-large-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/cola_bert\",\n         \"num_epochs\": 3,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 10000\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/cola/structured_self_attention.json",
    "content": "{\n  \"data_reader\": {\n    \"dataset\": \"cola\",\n    \"train_file_path\": \"<CoLA train.tsv path>\",\n    \"valid_file_path\": \"<CoLA dev.tsv path>\",\n    \"cola\": {\n      \"sequence_max_length\": 128\n    }\n  },\n  \"iterator\": {\n    \"batch_size\": 32\n  },\n  \"token\": {\n    \"names\": [\"char\", \"glove\"],\n    \"types\": [\"char\", \"word\"],\n    \"tokenizer\": {\n      \"char\": {\n        \"name\": \"character\"\n      },\n      \"word\": {\n        \"name\": \"treebank_en\",\n        \"split_with_regex\": true\n      }\n    },\n    \"char\": {\n      \"vocab\": {\n        \"start_token\": \"<s>\",\n        \"end_token\": \"</s>\",\n        \"max_vocab_size\": 260\n      },\n      \"indexer\": {\n        \"insert_char_start\": true,\n        \"insert_char_end\": true\n      },\n      \"embedding\": {\n        \"embed_dim\": 16,\n        \"kernel_sizes\": [5],\n        \"num_filter\": 100,\n        \"activation\": \"relu\",\n        \"dropout\": 0.2\n      }\n    },\n    \"glove\": {\n      \"vocab\": {\n        \"pretrained_path\": \"http://dev-reasoning-qa-data-ncl.nfra.io:7778/data/glove.6B.vocab.txt\",\n        \"pretrained_token\": \"intersect\"\n      },\n      \"indexer\": {\n        \"lowercase\": true\n      },\n      \"embedding\": {\n        \"embed_dim\": 100,\n        \"pretrained_path\": \"http://dev-reasoning-qa-data-ncl.nfra.io:7778/data/glove.6B.100d.txt\",\n        \"trainable\": false,\n        \"dropout\": 0.2\n      }\n    }\n  },\n  \"model\": {\n    \"name\": \"structured_self_attention\",\n    \"structured_self_attention\": {\n      \"encoding_rnn_hidden_dim\": 300,\n      \"encoding_rnn_num_layer\": 2,\n      \"encoding_rnn_dropout\": 0,\n      \"attention_dim\": 350,\n      \"num_attention_heads\": 30,\n      \"sequence_embed_dim\": 2000,\n      \"dropout\": 0.5,\n      \"penalization_coefficient\": 1\n    }\n  },\n  \"trainer\": {\n    \"log_dir\": \"logs/cola\",\n    \"num_epochs\": 50,\n    \"early_stopping_threshold\": 10,\n    \"grad_max_norm\": 5.0,\n    \"metric_key\": \"accuracy\",\n    \"verbose_step_count\": 100,\n    \"eval_and_save_step_count\": \"epoch\"\n  },\n  \"optimizer\": {\n    \"op_type\": \"adam\",\n    \"learning_rate\": 0.001,\n    \"exponential_moving_average\": 0.999\n  },\n  \"seed_num\": 42\n}\n"
  },
  {
    "path": "base_config/conll2003/bert_large_cased.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"conll2003_bert\",\n         \"train_file_path\": \"https://raw.githubusercontent.com/Franck-Dernoncourt/NeuroNER/master/data/conll2003/en/train.txt\",\n         \"valid_file_path\": \"https://raw.githubusercontent.com/Franck-Dernoncourt/NeuroNER/master/data/conll2003/en/valid.txt\",\n         \"conll2003_bert\": {\n             \"sequence_max_length\": 128,\n             \"ignore_tag_idx\": -1\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-cased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": false\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-cased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_tok_cls\",\n         \"bert_for_tok_cls\": {\n             \"pretrained_model_name\": \"bert-large-cased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/conll2003_bert\",\n         \"num_epochs\": 3,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"conlleval_f1\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 10000\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/cola_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"cola_bert\",\n         \"train_file_path\": \"CoLA/train.tsv\",\n         \"valid_file_path\": \"CoLA/dev.tsv\",\n         \"cola_bert\": {\n             \"sequence_max_length\": 128\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/cola_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"matthews_corr\",\n         \"eval_and_save_step_count\": 100\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/cola_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"cola_bert\",\n         \"train_file_path\": \"CoLA/train.tsv\",\n         \"valid_file_path\": \"CoLA/dev.tsv\",\n         \"cola_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\",\n                 \"cls_token\": \"<s>\",\n                 \"sep_token\": \"</s>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_seq_cls\",\n         \"roberta_for_seq_cls\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/cola_roberta\",\n         \"num_epochs\": 10,\n         \"early_stopping_threshold\": 20,\n         \"metric_key\": \"matthews_corr\",\n         \"eval_and_save_step_count\": 100\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.98],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.1\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.06\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/mnlim_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"mnli_bert\",\n         \"train_file_path\": \"MNLI/train.tsv\",\n         \"valid_file_path\": \"MNLI/dev_matched.tsv\",\n         \"mnli_bert\": {\n             \"sequence_max_length\": 128\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/mnlim_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/mnlim_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"mnli_bert\",\n         \"train_file_path\": \"MNLI/train.tsv\",\n         \"valid_file_path\": \"MNLI/dev_matched.tsv\",\n         \"mnli_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_seq_cls\",\n         \"roberta_for_seq_cls\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/mnlim_roberta\",\n         \"num_epochs\": 10,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.98],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.1\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.06\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/mnlimm_bert.json",
    "content": "{\n    \"data_reader\": {\n        \"dataset\": \"mnli_bert\",\n        \"train_file_path\": \"MNLI/train.tsv\",\n        \"valid_file_path\": \"MNLI/dev_mismatched.tsv\",\n        \"mnli_bert\": {\n            \"sequence_max_length\": 128\n        }\n    },\n    \"iterator\": {\n        \"batch_size\": 32\n    },\n    \"token\": {\n        \"names\": [\"feature\"],\n        \"types\": [\"feature\"],\n        \"tokenizer\": {\n            \"subword\": {\n                \"name\": \"wordpiece\",\n                \"wordpiece\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                }\n            },\n            \"word\": {\n                \"name\": \"bert_basic\",\n                \"bert_basic\": {\n                    \"do_lower_case\": true\n                }\n            }\n        },\n        \"feature\": {\n            \"vocab\": {\n                \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                \"pretrained_token\": \"all\"\n            },\n            \"indexer\": {\n                \"do_tokenize\": false\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"bert_for_seq_cls\",\n        \"bert_for_seq_cls\": {\n            \"pretrained_model_name\": \"bert-base-uncased\",\n            \"dropout\": 0.1\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/glue/mnlimm_bert\",\n        \"num_epochs\": 5,\n        \"early_stopping_threshold\": 10,\n        \"metric_key\": \"accuracy\",\n        \"eval_and_save_step_count\": 1000\n    },\n    \"optimizer\": {\n        \"learning_rate\": 2e-5,\n        \"op_type\": \"adamw\",\n        \"adamw\": {\n            \"weight_decay\": 0.01\n        },\n        \"lr_scheduler_type\": \"warmup_linear\",\n        \"warmup_linear\": {\n            \"warmup_proportion\": 0.1\n        }\n    },\n    \"seed_num\": 42\n}\n"
  },
  {
    "path": "base_config/glue/mnlimm_roberta.json",
    "content": "{\n    \"data_reader\": {\n        \"dataset\": \"mnli_bert\",\n        \"train_file_path\": \"MNLI/train.tsv\",\n        \"valid_file_path\": \"MNLI/dev_mismatched.tsv\",\n        \"mnli_bert\": {\n            \"sequence_max_length\": 128,\n            \"cls_token\": \"<s>\",\n            \"sep_token\": \"</s>\",\n            \"input_type\": \"roberta\"\n        }\n    },\n    \"iterator\": {\n        \"batch_size\": 32\n    },\n    \"token\": {\n        \"names\": [\"feature\"],\n        \"types\": [\"feature\"],\n        \"tokenizer\": {\n            \"bpe\": {\n               \"name\": \"roberta\",\n               \"roberta\": {\n                   \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                   \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n               }\n            }\n        },\n        \"feature\": {\n            \"vocab\": {\n                \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                \"pretrained_token\": \"all\",\n                \"pad_token\": \"<pad>\",\n                \"oov_token\": \"<unk>\"\n            },\n            \"indexer\": {\n                \"do_tokenize\": false\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"roberta_for_seq_cls\",\n        \"roberta_for_seq_cls\": {\n            \"pretrained_model_name\": \"roberta-base\",\n            \"dropout\": 0.1\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/glue/mnlimm_roberta\",\n        \"num_epochs\": 10,\n        \"early_stopping_threshold\": 10,\n        \"metric_key\": \"accuracy\",\n        \"eval_and_save_step_count\": 1000\n    },\n    \"optimizer\": {\n        \"learning_rate\": 2e-5,\n        \"op_type\": \"adamw\",\n        \"adamw\": {\n            \"betas\": [0.9, 0.98],\n            \"eps\": 1e-6,\n            \"weight_decay\": 0.1\n        },\n        \"lr_scheduler_type\": \"warmup_linear\",\n        \"warmup_linear\": {\n            \"warmup_proportion\": 0.06\n        }\n    },\n    \"seed_num\": 42\n}\n"
  },
  {
    "path": "base_config/glue/mrpc_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"mrpc_bert\",\n         \"train_file_path\": \"MRPC/train.tsv\",\n         \"valid_file_path\": \"MRPC/dev.tsv\",\n         \"mrpc_bert\": {\n             \"sequence_max_length\": 128\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/mrpc_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"eval_and_save_step_count\": 50\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/mrpc_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"mrpc_bert\",\n         \"train_file_path\": \"MRPC/train.tsv\",\n         \"valid_file_path\": \"MRPC/dev.tsv\",\n         \"mrpc_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_seq_cls\",\n         \"roberta_for_seq_cls\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/mrpc_roberta\",\n         \"num_epochs\": 10,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"eval_and_save_step_count\": 100\n     },\n     \"optimizer\": {\n         \"learning_rate\": 1e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.98],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.1\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.06\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/qnli_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"qnli_bert\",\n         \"train_file_path\": \"QNLI/train.tsv\",\n         \"valid_file_path\": \"QNLI/dev.tsv\",\n         \"qnli_bert\": {\n             \"sequence_max_length\": 128\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/qnli_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/qnli_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"qnli_bert\",\n         \"train_file_path\": \"QNLI/train.tsv\",\n         \"valid_file_path\": \"QNLI/dev.tsv\",\n         \"qnli_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_seq_cls\",\n         \"roberta_for_seq_cls\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/qnli_roberta\",\n         \"num_epochs\": 10,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.98],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.1\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.06\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/qqp_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"qqp_bert\",\n         \"train_file_path\": \"QQP/train.tsv\",\n         \"valid_file_path\": \"QQP/dev.tsv\",\n         \"qqp_bert\": {\n             \"sequence_max_length\": 128\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/qqp_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/qqp_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"qqp_bert\",\n         \"train_file_path\": \"QQP/train.tsv\",\n         \"valid_file_path\": \"QQP/dev.tsv\",\n         \"qqp_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_seq_cls\",\n         \"roberta_for_seq_cls\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/qqp_roberta\",\n         \"num_epochs\": 10,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.98],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.1\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.06\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/rte_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"rte_bert\",\n         \"train_file_path\": \"RTE/train.tsv\",\n         \"valid_file_path\": \"RTE/dev.tsv\",\n         \"rte_bert\": {\n             \"sequence_max_length\": 128\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/rte_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": 30\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/rte_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"rte_bert\",\n         \"train_file_path\": \"RTE/train.tsv\",\n         \"valid_file_path\": \"RTE/dev.tsv\",\n         \"rte_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_seq_cls\",\n         \"roberta_for_seq_cls\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/rte_roberta\",\n         \"num_epochs\": 20,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": 50\n     },\n     \"optimizer\": {\n         \"learning_rate\": 1e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.98],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.1\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.06\n         }\n     },\n     \"seed_num\": 21\n }\n"
  },
  {
    "path": "base_config/glue/sst_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"sst_bert\",\n         \"train_file_path\": \"SST-2/train.tsv\",\n         \"valid_file_path\": \"SST-2/dev.tsv\",\n         \"sst_bert\": {\n             \"sequence_max_length\": 128\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/sst_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/sst_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"sst_bert\",\n         \"train_file_path\": \"SST-2/train.tsv\",\n         \"valid_file_path\": \"SST-2/dev.tsv\",\n         \"sst_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_seq_cls\",\n         \"roberta_for_seq_cls\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/sst_roberta\",\n         \"num_epochs\": 10,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.98],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.1\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.06\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/stsb_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"stsb_bert\",\n         \"train_file_path\": \"STS-B/train.tsv\",\n         \"valid_file_path\": \"STS-B/dev.tsv\",\n         \"stsb_bert\": {\n             \"sequence_max_length\": 128\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_reg\",\n         \"bert_for_reg\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/stsb_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"pearson_spearman_corr\",\n         \"eval_and_save_step_count\": 100\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 22\n }\n"
  },
  {
    "path": "base_config/glue/stsb_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"stsb_bert\",\n         \"train_file_path\": \"STS-B/train.tsv\",\n         \"valid_file_path\": \"STS-B/dev.tsv\",\n         \"stsb_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_reg\",\n         \"roberta_for_reg\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/stsb_roberta\",\n         \"num_epochs\": 10,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"pearson_spearman_corr\",\n         \"eval_and_save_step_count\": 100\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.98],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.1\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.06\n         }\n     },\n     \"seed_num\": 21\n }\n"
  },
  {
    "path": "base_config/glue/wnli_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"wnli_bert\",\n         \"train_file_path\": \"WNLI/train.tsv\",\n         \"valid_file_path\": \"WNLI/dev.tsv\",\n         \"wnli_bert\": {\n             \"sequence_max_length\": 128\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 16\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/wnli_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": 10\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/glue/wnli_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"wnli_bert\",\n         \"train_file_path\": \"WNLI/train.tsv\",\n         \"valid_file_path\": \"WNLI/dev.tsv\",\n         \"wnli_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 16\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_seq_cls\",\n         \"roberta_for_seq_cls\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/glue/wnli_roberta\",\n         \"num_epochs\": 10,\n         \"early_stopping_threshold\": 30,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": 20\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.98],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.1\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.06\n         }\n     },\n     \"seed_num\": 21\n }\n"
  },
  {
    "path": "base_config/korquad/bert_base_multilingual_cased.yaml",
    "content": "data_reader:\n  dataset: \"squad_bert\"\n  train_file_path: \"https://korquad.github.io/dataset/KorQuAD_v1.0_train.json\"\n  valid_file_path: \"https://korquad.github.io/dataset/KorQuAD_v1.0_dev.json\"\n  squad_bert:\n    lang_code: \"ko\"\n    max_seq_length: 512\n    context_stride: 64\n    max_question_length: 64\n\niterator:\n  batch_size: 12\n\ntoken:\n  names:\n    - \"feature\"\n  types:\n    - \"feature\"\n  tokenizer:\n    subword:\n      name: \"wordpiece\"\n      wordpiece:\n        vocab_path: \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual-cased-vocab.txt\"\n    word:\n      name: \"bert_basic\"\n      bert_basic:\n        do_lower_case: true\n\n  feature:\n    vocab:\n      pretrained_path: \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual-cased-vocab.txt\"\n      pretrained_token: \"all\"\n    indexer\":\n      do_tokenize: false\n\nmodel:\n  name: \"bert_for_qa\"\n  bert_for_qa:\n    pretrained_model_name: \"bert-base-multilingual-cased\"\n    answer_maxlen: 30\n\ntrainer:\n  log_dir: \"logs/test/bert_for_qa/\"\n  num_epochs: 5\n  early_stopping_threshold: 10\n  metric_key: \"f1\"\n  verbose_step_count: 100\n  eval_and_save_step_count: 1000\n\noptimizer:\n  learning_rate: 0.00003\n  op_type: \"adamw\"\n  adamw:\n    weight_decay: 0.01\n  lr_scheduler_type: \"warmup_linear\"\n  warmup_linear:\n    warmup_proportion: 0.1\n\nseed_num: 42\n"
  },
  {
    "path": "base_config/korquad/bert_base_multilingual_uncased.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad_bert\",\n         \"train_file_path\": \"https://korquad.github.io/dataset/KorQuAD_v1.0_train.json\",\n         \"valid_file_path\": \"https://korquad.github.io/dataset/KorQuAD_v1.0_dev.json\",\n         \"squad_bert\": {\n             \"lang_code\": \"ko\",\n             \"max_seq_length\": 512,\n             \"context_stride\": 64,\n             \"max_question_length\": 64\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 12\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_qa\",\n         \"bert_for_qa\": {\n             \"pretrained_model_name\": \"bert-base-multilingual-uncased\",\n             \"answer_maxlen\": 30\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/squad_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"verbose_step_count\": 100,\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 0.00003,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/korquad/bidaf.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad\",\n         \"train_file_path\": \"https://korquad.github.io/dataset/KorQuAD_v1.0_train.json\",\n         \"valid_file_path\": \"https://korquad.github.io/dataset/KorQuAD_v1.0_dev.json\",\n         \"squad\": {\n             \"lang_code\": \"ko\",\n             \"context_max_length\": 1000\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"char\", \"fasttext\"],\n         \"types\": [\"char\", \"word\"],\n         \"tokenizer\": {\n             \"char\": {\n                 \"name\": \"jamo_ko\"\n             },\n             \"word\": {\n                 \"name\": \"mecab_ko\",\n                 \"split_with_regex\": true\n             }\n         },\n         \"char\": {\n             \"vocab\": {\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\",\n                 \"max_vocab_size\": 70\n             },\n             \"indexer\": {\n                 \"insert_char_start\": true,\n                 \"insert_char_end\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 16,\n                 \"kernel_sizes\": [5],\n                 \"num_filter\": 100,\n                 \"activation\": \"relu\",\n                 \"dropout\": 0.2\n             }\n         },\n         \"fasttext\": {\n             \"embedding\": {\n                 \"embed_dim\": 300,\n                 \"pretrained_path\": \"<fasttext.wiki.ko.300d.txt path>\",\n                 \"trainable\": false,\n                 \"dropout\": 0.2\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bidaf\",\n         \"bidaf\": {\n             \"model_dim\": 100,\n             \"contextual_rnn_num_layer\": 1,\n             \"modeling_rnn_num_layer\": 2,\n             \"predict_rnn_num_layer\": 1,\n             \"dropout\": 0.2\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/korquad_bidaf\",\n         \"num_epochs\": 50,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"verbose_step_count\": 100,\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"op_type\": \"adadelta\",\n         \"learning_rate\": 0.5,\n         \"exponential_moving_average\": 0.999\n     },\n     \"seed_num\": 2\n }\n"
  },
  {
    "path": "base_config/korquad/docqa.json",
    "content": "{\n    \"data_reader\": {\n        \"dataset\": \"squad\",\n        \"train_file_path\": \"https://korquad.github.io/dataset/KorQuAD_v1.0_train.json\",\n        \"valid_file_path\": \"https://korquad.github.io/dataset/KorQuAD_v1.0_dev.json\",\n        \"squad\": {\n            \"lang_code\": \"ko\",\n            \"context_max_length\": 1000\n        }\n    },\n    \"iterator\": {\n        \"batch_size\": 32\n    },\n    \"token\": {\n        \"names\": [\"char\", \"fasttext\"],\n        \"types\": [\"char\", \"word\"],\n        \"tokenizer\": {\n            \"char\": {\n                \"name\": \"jamo_ko\"\n            },\n            \"word\": {\n                \"name\": \"mecab_ko\",\n                \"split_with_regex\": true\n            }\n        },\n        \"char\": {\n            \"vocab\": {\n                \"start_token\": \"<s>\",\n                \"end_token\": \"</s>\",\n                \"max_vocab_size\": 70\n            },\n            \"indexer\": {\n                \"insert_char_start\": true,\n                \"insert_char_end\": true\n            },\n            \"embedding\": {\n                \"embed_dim\": 20,\n                \"kernel_sizes\": [5],\n                \"num_filter\": 100,\n                \"activation\": \"relu\",\n                \"dropout\": 0.2\n            }\n        },\n        \"fasttext\": {\n            \"embedding\": {\n                \"embed_dim\": 300,\n                \"pretrained_path\": \"<fasttext.wiki.ko.300d.txt path>\",\n                \"trainable\": false,\n                \"dropout\": 0.2\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"docqa\",\n        \"docqa\": {\n          \"answer_maxlen\": 17,\n          \"rnn_dim\": 100,\n          \"linear_dim\": 200,\n          \"preprocess_rnn_num_layer\": 1,\n          \"modeling_rnn_num_layer\": 1,\n          \"predict_rnn_num_layer\": 1,\n          \"dropout\": 0.2,\n          \"weight_init\": true\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/korquad_docqa\",\n        \"num_epochs\": 50,\n        \"early_stopping_threshold\": 10,\n        \"metric_key\": \"f1\",\n        \"verbose_step_count\": 100,\n        \"eval_and_save_step_count\": \"epoch\"\n    },\n    \"optimizer\": {\n        \"op_type\": \"adamax\",\n        \"learning_rate\": 0.001,\n        \"lr_scheduler_type\": \"reduce_on_plateau\",\n        \"reduce_on_plateau\": {\n            \"factor\": 0.5,\n            \"mode\": \"max\",\n            \"patience\": 2\n        }\n    },\n    \"seed_num\": 2\n}\n"
  },
  {
    "path": "base_config/multi_task/bert_base_glue+squad.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"multitask_bert\",\n         \"train_file_path\": \"train\",\n         \"valid_file_path\": \"valid\",\n         \"multitask_bert\": {\n             \"batch_sizes\": [32, 32, 32, 32, 32, 32, 32, 32, 16, 12],\n             \"readers\": [{\n                 \"dataset\": \"cola_bert\",\n                 \"train_file_path\": \"CoLA/train.tsv\",\n                 \"valid_file_path\": \"CoLA/dev.tsv\",\n                 \"cola_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"mnli_bert\",\n                 \"train_file_path\": \"MNLI/train.tsv\",\n                 \"valid_file_path\": \"MNLI/dev_matched.tsv\",\n                 \"mnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"mrpc_bert\",\n                 \"train_file_path\": \"MRPC/train.tsv\",\n                 \"valid_file_path\": \"MRPC/dev.tsv\",\n                 \"mrpc_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"qnli_bert\",\n                 \"train_file_path\": \"QNLI/train.tsv\",\n                 \"valid_file_path\": \"QNLI/dev.tsv\",\n                 \"qnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"qqp_bert\",\n                 \"train_file_path\": \"QQP/train.tsv\",\n                 \"valid_file_path\": \"QQP/dev.tsv\",\n                 \"qqp_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"rte_bert\",\n                 \"train_file_path\": \"RTE/train.tsv\",\n                 \"valid_file_path\": \"RTE/dev.tsv\",\n                 \"rte_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"sst_bert\",\n                 \"train_file_path\": \"SST-2/train.tsv\",\n                 \"valid_file_path\": \"SST-2/dev.tsv\",\n                 \"sst_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"stsb_bert\",\n                 \"train_file_path\": \"STS-B/train.tsv\",\n                 \"valid_file_path\": \"STS-B/dev.tsv\",\n                 \"stsb_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"wnli_bert\",\n                 \"train_file_path\": \"WNLI/train.tsv\",\n                 \"valid_file_path\": \"WNLI/dev.tsv\",\n                 \"wnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"squad_bert\",\n                 \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n                 \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n                 \"squad_bert\": {\n                     \"lang_code\": \"en\",\n                     \"max_seq_length\": 384,\n                     \"context_stride\": 128,\n                     \"max_question_length\": 64\n                 }\n             }]\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 1\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_multi\",\n         \"bert_for_multi\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropouts\": [0.05, 0.3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0]\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/multi_task/bert_glue+squad\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"grad_max_norm\": 1,\n         \"metric_key\": \"average\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.999],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/multi_task/bert_base_glue.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"multitask_bert\",\n         \"train_file_path\": \"train\",\n         \"valid_file_path\": \"valid\",\n         \"multitask_bert\": {\n             \"batch_sizes\": [32, 32, 32, 32, 32, 32, 32, 32, 16],\n             \"readers\": [{\n                 \"dataset\": \"cola_bert\",\n                 \"train_file_path\": \"CoLA/train.tsv\",\n                 \"valid_file_path\": \"CoLA/dev.tsv\",\n                 \"cola_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"mnli_bert\",\n                 \"train_file_path\": \"MNLI/train.tsv\",\n                 \"valid_file_path\": \"MNLI/dev_matched.tsv\",\n                 \"mnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"mrpc_bert\",\n                 \"train_file_path\": \"MRPC/train.tsv\",\n                 \"valid_file_path\": \"MRPC/dev.tsv\",\n                 \"mrpc_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"qnli_bert\",\n                 \"train_file_path\": \"QNLI/train.tsv\",\n                 \"valid_file_path\": \"QNLI/dev.tsv\",\n                 \"qnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"qqp_bert\",\n                 \"train_file_path\": \"QQP/train.tsv\",\n                 \"valid_file_path\": \"QQP/dev.tsv\",\n                 \"qqp_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"rte_bert\",\n                 \"train_file_path\": \"RTE/train.tsv\",\n                 \"valid_file_path\": \"RTE/dev.tsv\",\n                 \"rte_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"sst_bert\",\n                 \"train_file_path\": \"SST-2/train.tsv\",\n                 \"valid_file_path\": \"SST-2/dev.tsv\",\n                 \"sst_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"stsb_bert\",\n                 \"train_file_path\": \"STS-B/train.tsv\",\n                 \"valid_file_path\": \"STS-B/dev.tsv\",\n                 \"stsb_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"wnli_bert\",\n                 \"train_file_path\": \"WNLI/train.tsv\",\n                 \"valid_file_path\": \"WNLI/dev.tsv\",\n                 \"wnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }]\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 1\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_multi\",\n         \"bert_for_multi\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropouts\": [0.05, 0.3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/multi_task/bert_glue\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"grad_max_norm\": 1,\n         \"metric_key\": \"average\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.999],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/multi_task/bert_large_glue+squad.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"multitask_bert\",\n         \"train_file_path\": \"train\",\n         \"valid_file_path\": \"valid\",\n         \"multitask_bert\": {\n             \"batch_sizes\": [32, 32, 32, 32, 32, 32, 32, 32, 16, 6],\n             \"readers\": [{\n                 \"dataset\": \"cola_bert\",\n                 \"train_file_path\": \"CoLA/train.tsv\",\n                 \"valid_file_path\": \"CoLA/dev.tsv\",\n                 \"cola_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"mnli_bert\",\n                 \"train_file_path\": \"MNLI/train.tsv\",\n                 \"valid_file_path\": \"MNLI/dev_matched.tsv\",\n                 \"mnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"mrpc_bert\",\n                 \"train_file_path\": \"MRPC/train.tsv\",\n                 \"valid_file_path\": \"MRPC/dev.tsv\",\n                 \"mrpc_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"qnli_bert\",\n                 \"train_file_path\": \"QNLI/train.tsv\",\n                 \"valid_file_path\": \"QNLI/dev.tsv\",\n                 \"qnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"qqp_bert\",\n                 \"train_file_path\": \"QQP/train.tsv\",\n                 \"valid_file_path\": \"QQP/dev.tsv\",\n                 \"qqp_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"rte_bert\",\n                 \"train_file_path\": \"RTE/train.tsv\",\n                 \"valid_file_path\": \"RTE/dev.tsv\",\n                 \"rte_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"sst_bert\",\n                 \"train_file_path\": \"SST-2/train.tsv\",\n                 \"valid_file_path\": \"SST-2/dev.tsv\",\n                 \"sst_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"stsb_bert\",\n                 \"train_file_path\": \"STS-B/train.tsv\",\n                 \"valid_file_path\": \"STS-B/dev.tsv\",\n                 \"stsb_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"wnli_bert\",\n                 \"train_file_path\": \"WNLI/train.tsv\",\n                 \"valid_file_path\": \"WNLI/dev.tsv\",\n                 \"wnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"squad_bert\",\n                 \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n                 \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n                 \"squad_bert\": {\n                     \"lang_code\": \"en\",\n                     \"max_seq_length\": 384,\n                     \"context_stride\": 128,\n                     \"max_question_length\": 64\n                 }\n             }]\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 1\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_multi\",\n         \"bert_for_multi\": {\n             \"pretrained_model_name\": \"bert-large-uncased\",\n             \"dropouts\": [0.05, 0.3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0]\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/multi_task/bert_glue+squad\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"grad_max_norm\": 1,\n         \"metric_key\": \"average\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.999],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/multi_task/bert_large_glue.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"multitask_bert\",\n         \"train_file_path\": \"train\",\n         \"valid_file_path\": \"valid\",\n         \"multitask_bert\": {\n             \"batch_sizes\": [32, 32, 32, 32, 32, 32, 32, 32, 16],\n             \"readers\": [{\n                 \"dataset\": \"cola_bert\",\n                 \"train_file_path\": \"CoLA/train.tsv\",\n                 \"valid_file_path\": \"CoLA/dev.tsv\",\n                 \"cola_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"mnli_bert\",\n                 \"train_file_path\": \"MNLI/train.tsv\",\n                 \"valid_file_path\": \"MNLI/dev_matched.tsv\",\n                 \"mnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"mrpc_bert\",\n                 \"train_file_path\": \"MRPC/train.tsv\",\n                 \"valid_file_path\": \"MRPC/dev.tsv\",\n                 \"mrpc_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"qnli_bert\",\n                 \"train_file_path\": \"QNLI/train.tsv\",\n                 \"valid_file_path\": \"QNLI/dev.tsv\",\n                 \"qnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"qqp_bert\",\n                 \"train_file_path\": \"QQP/train.tsv\",\n                 \"valid_file_path\": \"QQP/dev.tsv\",\n                 \"qqp_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"rte_bert\",\n                 \"train_file_path\": \"RTE/train.tsv\",\n                 \"valid_file_path\": \"RTE/dev.tsv\",\n                 \"rte_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"sst_bert\",\n                 \"train_file_path\": \"SST-2/train.tsv\",\n                 \"valid_file_path\": \"SST-2/dev.tsv\",\n                 \"sst_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"stsb_bert\",\n                 \"train_file_path\": \"STS-B/train.tsv\",\n                 \"valid_file_path\": \"STS-B/dev.tsv\",\n                 \"stsb_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }, {\n                 \"dataset\": \"wnli_bert\",\n                 \"train_file_path\": \"WNLI/train.tsv\",\n                 \"valid_file_path\": \"WNLI/dev.tsv\",\n                 \"wnli_bert\": {\n                     \"sequence_max_length\": 128\n                 }\n             }]\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 1\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_multi\",\n         \"bert_for_multi\": {\n             \"pretrained_model_name\": \"bert-large-uncased\",\n             \"dropouts\": [0.05, 0.3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/multi_task/bert_glue\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"grad_max_norm\": 1,\n         \"metric_key\": \"average\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.999],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/squad/bert_base_uncased.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad_bert\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"squad_bert\": {\n             \"lang_code\": \"en\",\n             \"max_seq_length\": 384,\n             \"context_stride\": 128,\n             \"max_question_length\": 64\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 12\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_qa\",\n         \"bert_for_qa\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"answer_maxlen\": 30\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/squad_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"verbose_step_count\": 100,\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 5e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.999],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/squad/bert_large_uncased.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad_bert\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"squad_bert\": {\n             \"lang_code\": \"en\",\n             \"max_seq_length\": 384,\n             \"context_stride\": 128,\n             \"max_question_length\": 64\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 8\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_qa\",\n         \"bert_for_qa\": {\n             \"pretrained_model_name\": \"bert-large-uncased\",\n             \"answer_maxlen\": 30\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/squad_bert\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"verbose_step_count\": 100,\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 5e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.999],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/squad/bidaf+elmo.json",
    "content": "{\n    \"data_reader\": {\n        \"dataset\": \"squad\",\n        \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n        \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n        \"squad\": {\n            \"lang_code\": \"en\"\n        }\n    },\n    \"iterator\": {\n        \"batch_size\": 32\n    },\n    \"token\": {\n        \"names\": [\"char\", \"glove\", \"elmo\"],\n        \"types\": [\"char\", \"word\", \"elmo\"],\n        \"tokenizer\": {\n            \"char\": {\n                \"name\": \"character\"\n            },\n            \"word\": {\n                \"name\": \"treebank_en\",\n                \"split_with_regex\": true\n            }\n        },\n        \"char\": {\n            \"vocab\": {\n                \"start_token\": \"<s>\",\n                \"end_token\": \"</s>\",\n                \"max_vocab_size\": 260\n            },\n            \"indexer\": {\n                \"insert_char_start\": true,\n                \"insert_char_end\": true\n            },\n            \"embedding\": {\n                \"embed_dim\": 16,\n                \"kernel_sizes\": [5],\n                \"num_filter\": 100,\n                \"activation\": \"relu\",\n                \"dropout\": 0.2\n            }\n        },\n        \"glove\": {\n            \"indexer\": {\n                \"lowercase\": true\n            },\n            \"embedding\": {\n                \"embed_dim\": 100,\n                \"pretrained_path\": \"<glove.6B.100d.txt path>\",\n                \"trainable\": false,\n                \"dropout\": 0.2\n            }\n        },\n        \"elmo\": {\n            \"embedding\": {\n                \"options_file\": \"https://s3-us-west-2.amazonaws.com/allennlp/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_options.json\",\n                \"weight_file\": \"https://s3-us-west-2.amazonaws.com/allennlp/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5\",\n                \"trainable\": false,\n                \"dropout\": 0.5\n            }\n         }\n    },\n    \"model\": {\n        \"name\": \"bidaf\",\n        \"bidaf\": {\n            \"model_dim\": 200,\n            \"dropout\": 0.3\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/squad_bidaf+elmo\",\n        \"num_epochs\": 50,\n        \"early_stopping_threshold\": 10,\n        \"metric_key\": \"f1\",\n        \"verbose_step_count\": 100,\n        \"eval_and_save_step_count\": \"epoch\"\n    },\n    \"optimizer\": {\n        \"op_type\": \"adamax\",\n        \"learning_rate\": 0.001,\n        \"adam\": {\n            \"betas\": [0.9, 0.9]\n        },\n        \"lr_scheduler_type\": \"reduce_on_plateau\",\n        \"reduce_on_plateau\": {\n            \"factor\": 0.5,\n            \"mode\": \"max\",\n            \"patience\": 2\n        }\n    },\n    \"seed_num\": 31\n}\n"
  },
  {
    "path": "base_config/squad/bidaf.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"squad\": {\n             \"lang_code\": \"en\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"char\", \"glove\"],\n         \"types\": [\"char\", \"word\"],\n         \"tokenizer\": {\n             \"char\": {\n                 \"name\": \"character\"\n             },\n             \"word\": {\n                 \"name\": \"treebank_en\",\n                 \"split_with_regex\": true\n             }\n         },\n         \"char\": {\n             \"vocab\": {\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\",\n                 \"max_vocab_size\": 260\n             },\n             \"indexer\": {\n                 \"insert_char_start\": true,\n                 \"insert_char_end\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 16,\n                 \"kernel_sizes\": [5],\n                 \"num_filter\": 100,\n                 \"activation\": \"relu\",\n                 \"dropout\": 0.2\n             }\n         },\n         \"glove\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"<glove.6B.vocab.txt path>\",\n                 \"pretrained_token\": \"intersect\"\n             },\n             \"indexer\": {\n                 \"lowercase\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 100,\n                 \"pretrained_path\": \"<glove.6B.100d.txt path>\",\n                 \"trainable\": false,\n                 \"dropout\": 0.2\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bidaf\",\n         \"bidaf\": {\n             \"model_dim\": 100,\n             \"contextual_rnn_num_layer\": 1,\n             \"modeling_rnn_num_layer\": 2,\n             \"predict_rnn_num_layer\": 1,\n             \"dropout\": 0.2\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/squad_bidaf\",\n         \"num_epochs\": 50,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"verbose_step_count\": 100,\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"op_type\": \"adadelta\",\n         \"learning_rate\": 0.5,\n         \"exponential_moving_average\": 0.999\n     },\n     \"seed_num\": 2\n }\n"
  },
  {
    "path": "base_config/squad/bidaf_no_answer.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v2.0.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v2.0.json\"\n     },\n     \"iterator\": {\n         \"batch_size\": 32\n     },\n     \"token\": {\n         \"names\": [\"char\", \"glove\"],\n         \"types\": [\"char\", \"word\"],\n         \"tokenizer\": {\n             \"char\": {\n                 \"name\": \"character\"\n             },\n             \"word\": {\n                 \"name\": \"treebank_en\",\n                 \"split_with_regex\": true\n             }\n         },\n         \"char\": {\n             \"vocab\": {\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\",\n                 \"max_vocab_size\": 260\n             },\n             \"indexer\": {\n                 \"insert_char_start\": true,\n                 \"insert_char_end\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 16,\n                 \"kernel_sizes\": [5],\n                 \"num_filter\": 100,\n                 \"activation\": \"relu\",\n                 \"dropout\": 0.2\n             }\n         },\n         \"glove\": {\n             \"indexer\": {\n                 \"lowercase\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 100,\n                 \"pretrained_path\": \"<glove.6B.100d.txt path>\",\n                 \"trainable\": false,\n                 \"dropout\": 0.2\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bidaf_no_answer\",\n         \"bidaf\": {\n             \"model_dim\": 100,\n             \"dropout\": 0.2\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/squad_bidaf_no_answer\",\n         \"num_epochs\": 50,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"best_f1\",\n         \"verbose_step_count\": 100,\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"op_type\": \"adadelta\",\n         \"learning_rate\": 0.5,\n         \"exponential_moving_average\": 0.999\n     },\n     \"seed_num\": 2\n }\n"
  },
  {
    "path": "base_config/squad/docqa+elmo.json",
    "content": "{\n    \"data_reader\": {\n        \"dataset\": \"squad\",\n        \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n        \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n        \"squad\": {\n            \"lang_code\": \"en\"\n        }\n    },\n    \"iterator\": {\n        \"batch_size\": 32\n    },\n    \"token\": {\n        \"names\": [\"char\", \"glove\", \"elmo\"],\n        \"types\": [\"char\", \"word\", \"elmo\"],\n        \"tokenizer\": {\n            \"char\": {\n                \"name\": \"character\"\n            },\n            \"word\": {\n                \"name\": \"treebank_en\",\n                \"split_with_regex\": true\n            }\n        },\n        \"char\": {\n            \"vocab\": {\n                \"max_vocab_size\": 260,\n                \"start_token\": \"<s>\",\n                \"end_token\": \"</s>\"\n            },\n            \"indexer\": {\n                \"insert_char_start\": true,\n                \"insert_char_end\": true\n            },\n            \"embedding\": {\n                \"embed_dim\": 20,\n                \"kernel_sizes\": [5],\n                \"num_filter\": 100,\n                \"activation\": \"relu\",\n                \"dropout\": 0.2\n            }\n        },\n        \"glove\": {\n            \"indexer\": {\n                \"lowercase\": false\n            },\n            \"embedding\": {\n                \"embed_dim\": 300,\n                \"pretrained_path\": \"<glove.840B.300d.txt path>\",\n                \"trainable\": false\n            }\n        },\n        \"elmo\": {\n            \"embedding\": {\n                \"options_file\": \"https://s3-us-west-2.amazonaws.com/allennlp/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_options.json\",\n                \"weight_file\": \"https://s3-us-west-2.amazonaws.com/allennlp/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5\",\n                \"trainable\": false,\n                \"dropout\": 0.5\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"docqa\",\n        \"docqa\": {\n          \"rnn_dim\": 200,\n          \"linear_dim\": 400,\n          \"dropout\": 0.25,\n          \"weight_init\": true\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/squad_docqa+elmo\",\n        \"num_epochs\": 30,\n        \"early_stopping_threshold\": 10,\n        \"metric_key\": \"f1\",\n        \"verbose_step_count\": 100,\n        \"eval_and_save_step_count\": \"epoch\"\n    },\n    \"optimizer\": {\n        \"op_type\": \"adamax\",\n        \"learning_rate\": 0.001,\n        \"lr_scheduler_type\": \"reduce_on_plateau\",\n        \"reduce_on_plateau\": {\n            \"factor\": 0.5,\n            \"mode\": \"max\",\n            \"patience\": 2\n        }\n    },\n    \"seed_num\": 2\n}\n"
  },
  {
    "path": "base_config/squad/docqa.json",
    "content": "{\n    \"data_reader\": {\n        \"dataset\": \"squad\",\n        \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n        \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n        \"squad\": {\n            \"lang_code\": \"en\"\n        }\n    },\n    \"iterator\": {\n        \"batch_size\": 32\n    },\n    \"token\": {\n        \"names\": [\"char\", \"glove\"],\n        \"types\": [\"char\", \"word\"],\n        \"tokenizer\": {\n            \"char\": {\n                \"name\": \"character\"\n            },\n            \"word\": {\n                \"name\": \"treebank_en\",\n                \"split_with_regex\": true\n            }\n        },\n        \"char\": {\n            \"vocab\": {\n                \"max_vocab_size\": 260,\n                \"start_token\": \"<s>\",\n                \"end_token\": \"</s>\"\n            },\n            \"indexer\": {\n                \"insert_char_start\": true,\n                \"insert_char_end\": true\n            },\n            \"embedding\": {\n                \"embed_dim\": 20,\n                \"kernel_sizes\": [5],\n                \"num_filter\": 100,\n                \"activation\": \"relu\",\n                \"dropout\": 0.2\n            }\n        },\n        \"glove\": {\n            \"indexer\": {\n                \"lowercase\": false\n            },\n            \"embedding\": {\n                \"embed_dim\": 300,\n                \"pretrained_path\": \"<glove.840B.300d.txt path>\",\n                \"trainable\": false,\n                \"dropout\": 0.2\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"docqa\",\n        \"docqa\": {\n          \"answer_maxlen\": 17,\n          \"rnn_dim\": 100,\n          \"linear_dim\": 200,\n          \"preprocess_rnn_num_layer\": 1,\n          \"modeling_rnn_num_layer\": 1,\n          \"predict_rnn_num_layer\": 1,\n          \"dropout\": 0.2,\n          \"weight_init\": true\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/squad_docqa\",\n        \"num_epochs\": 50,\n        \"early_stopping_threshold\": 10,\n        \"metric_key\": \"f1\",\n        \"verbose_step_count\": 100,\n        \"eval_and_save_step_count\": \"epoch\"\n    },\n    \"optimizer\": {\n        \"op_type\": \"adamax\",\n        \"learning_rate\": 0.001,\n        \"lr_scheduler_type\": \"reduce_on_plateau\",\n        \"reduce_on_plateau\": {\n            \"factor\": 0.5,\n            \"mode\": \"max\",\n            \"patience\": 2\n        }\n    },\n    \"seed_num\": 2\n}\n"
  },
  {
    "path": "base_config/squad/docqa_no_answer.json",
    "content": "{\n    \"data_reader\": {\n        \"dataset\": \"squad\",\n        \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v2.0.json\",\n        \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v2.0.json\",\n        \"squad\": {\n            \"lang_code\": \"en\"\n        }\n    },\n    \"iterator\": {\n        \"batch_size\": 32\n    },\n    \"token\": {\n        \"names\": [\"char\", \"glove\"],\n        \"types\": [\"char\", \"word\"],\n        \"tokenizer\": {\n            \"char\": {\n                \"name\": \"character\"\n            },\n            \"word\": {\n                \"name\": \"treebank_en\",\n                \"split_with_regex\": true\n            }\n        },\n        \"char\": {\n            \"vocab\": {\n                \"max_vocab_size\": 260,\n                \"start_token\": \"<s>\",\n                \"end_token\": \"</s>\"\n            },\n            \"indexer\": {\n                \"insert_char_start\": true,\n                \"insert_char_end\": true\n            },\n            \"embedding\": {\n                \"embed_dim\": 20,\n                \"kernel_sizes\": [5],\n                \"num_filter\": 100,\n                \"activation\": \"relu\",\n                \"dropout\": 0.2\n            }\n        },\n        \"glove\": {\n            \"indexer\": {\n                \"lowercase\": false\n            },\n            \"embedding\": {\n                \"embed_dim\": 300,\n                \"pretrained_path\": \"<glove.840B.300d.txt path>\",\n                \"trainable\": false,\n                \"dropout\": 0.2\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"docqa_no_answer\",\n        \"docqa\": {\n          \"answer_maxlen\": 17,\n          \"rnn_dim\": 100,\n          \"linear_dim\": 200,\n          \"dropout\": 0.2,\n          \"weight_init\": true\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/squad_docqa_no_answer\",\n        \"num_epochs\": 50,\n        \"early_stopping_threshold\": 10,\n        \"metric_key\": \"best_f1\",\n        \"verbose_step_count\": 100,\n        \"eval_and_save_step_count\": \"epoch\"\n    },\n    \"optimizer\": {\n        \"op_type\": \"adamax\",\n        \"learning_rate\": 0.001,\n        \"lr_scheduler_type\": \"reduce_on_plateau\",\n        \"reduce_on_plateau\": {\n            \"factor\": 0.5,\n            \"mode\": \"max\",\n            \"patience\": 2\n        }\n    },\n    \"seed_num\": 2\n}\n"
  },
  {
    "path": "base_config/squad/drqa.json",
    "content": "{\n    \"data_reader\": {\n        \"dataset\": \"squad\",\n        \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n        \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n        \"squad\": {\n            \"lang_code\": \"en\"\n        }\n    },\n    \"iterator\": {\n        \"batch_size\": 32\n    },\n    \"token\": {\n        \"names\": [\"frequent_glove\", \"exact_match\"],\n        \"types\": [\"frequent_word\", \"exact_match\"],\n        \"tokenizer\": {\n            \"word\": {\n                \"name\": \"spacy_en\",\n                \"split_with_regex\": true\n            }\n        },\n        \"frequent_glove\": {\n            \"vocab\": {\n                \"frequent_count\": 1000\n            },\n            \"indexer\": {\n                \"lowercase\": false\n            },\n            \"embedding\": {\n                \"embed_dim\": 300,\n                \"pretrained_path\": \"<glove.840B.300d.txt paht>\",\n                \"dropout\": 0.3\n            }\n        },\n        \"exact_match\": {\n            \"indexer\": {\n                \"lower\": true,\n                \"lemma\": true\n            },\n            \"embedding\": {\n                \"type\": \"sparse\"\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"drqa\",\n        \"drqa\": {\n            \"aligned_query_embedding\": true,\n            \"answer_maxlen\": 15,\n            \"model_dim\": 128,\n            \"dropout\": 0.3\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/squad_drqa\",\n        \"num_epochs\": 50,\n        \"early_stopping_threshold\": 10,\n        \"metric_key\": \"f1\",\n        \"verbose_step_count\": 100,\n        \"eval_and_save_step_count\": \"epoch\"\n    },\n    \"optimizer\": {\n        \"op_type\": \"adamax\",\n        \"learning_rate\": 0.002,\n        \"adamax\": {\n            \"betas\": [0.9, 0.999],\n            \"eps\": 1e-08,\n            \"weight_decay\": 0\n        },\n        \"lr_scheduler_type\": \"reduce_on_plateau\",\n        \"reduce_on_plateau\": {\n            \"factor\": 0.5,\n            \"mode\": \"max\",\n            \"patience\": 2\n        }\n    },\n    \"seed_num\": 21\n}\n"
  },
  {
    "path": "base_config/squad/drqa_paper.json",
    "content": "{\n    \"data_reader\": {\n        \"dataset\": \"squad\",\n        \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n        \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n        \"squad\": {\n            \"lang_code\": \"en\"\n        }\n    },\n    \"iterator\": {\n        \"batch_size\": 32\n    },\n    \"token\": {\n        \"names\": [\"frequent_glove\", \"exact_match\", \"linguistic\"],\n        \"types\": [\"frequent_word\", \"exact_match\", \"linguistic\"],\n        \"tokenizer\": {\n            \"word\": {\n                \"name\": \"spacy_en\",\n                \"split_with_regex\": true\n            }\n        },\n        \"frequent_glove\": {\n            \"vocab\": {\n                \"frequent_count\": 1000\n            },\n            \"indexer\": {\n                \"lowercase\": false\n            },\n            \"embedding\": {\n                \"embed_dim\": 300,\n                \"pretrained_path\": \"<glove.840B.300d.txt path>\",\n                \"dropout\": 0.3\n            }\n        },\n        \"exact_match\": {\n            \"indexer\": {\n                \"lower\": true,\n                \"lemma\": true\n            },\n            \"embedding\": {\n                \"type\": \"sparse\"\n            }\n        },\n        \"linguistic\": {\n            \"indexer\": {\n                \"pos_tag\": true,\n                \"ner\": true\n            },\n            \"embedding\": {\n                \"type\": \"sparse\"\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"drqa\",\n        \"drqa\": {\n            \"aligned_query_embedding\": true,\n            \"answer_maxlen\": 15,\n            \"model_dim\": 128,\n            \"dropout\": 0.3\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/squad_drqa_paper\",\n        \"num_epochs\": 50,\n        \"early_stopping_threshold\": 10,\n        \"metric_key\": \"f1\",\n        \"verbose_step_count\": 100,\n        \"eval_and_save_step_count\": \"epoch\"\n    },\n    \"optimizer\": {\n        \"op_type\": \"adamax\",\n        \"learning_rate\": 0.003,\n        \"adamax\": {\n            \"betas\": [0.9, 0.999],\n            \"eps\": 1e-08,\n            \"weight_decay\": 0\n        },\n        \"lr_scheduler_type\": \"reduce_on_plateau\",\n        \"reduce_on_plateau\": {\n            \"factor\": 0.5,\n            \"mode\": \"max\",\n            \"patience\": 2\n        }\n    },\n    \"seed_num\": 21\n}\n"
  },
  {
    "path": "base_config/squad/qanet.json",
    "content": "{\n     \"data_reader\": {\n         \"dataset\": \"squad\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"squad\": {\n             \"lang_code\": \"en\",\n             \"context_max_length\": 400\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 6\n     },\n     \"token\": {\n         \"names\": [\"char\", \"glove\"],\n         \"types\": [\"char\", \"word\"],\n         \"tokenizer\": {\n             \"char\": {\n                 \"name\": \"character\"\n             },\n             \"word\": {\n                 \"name\": \"treebank_en\",\n                 \"split_with_regex\": true\n             }\n         },\n         \"char\": {\n             \"vocab\": {\n                 \"max_vocab_size\": 260,\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\"\n             },\n             \"indexer\": {\n                 \"insert_char_start\": true,\n                 \"insert_char_end\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 64,\n                 \"kernel_sizes\": [5],\n                 \"num_filter\": 200,\n                 \"activation\": \"relu\",\n                 \"dropout\": 0.05\n             }\n         },\n         \"glove\": {\n             \"vocab\": {\n                \"pretrained_path\": \"<glove.840B.vocab.txt path>\",\n                \"pretrained_token\": \"intersect\"\n             },\n             \"indexer\": {\n                 \"lowercase\": false\n             },\n             \"embedding\": {\n                 \"embed_dim\": 300,\n                 \"pretrained_path\": \"<glove.840B.300d.txt path>\",\n                 \"trainable\": false,\n                 \"dropout\": 0.1\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"qanet\",\n         \"qanet\": {\n             \"answer_maxlen\": 30,\n             \"model_dim\": 128,\n             \"kernel_size_in_embedding\": 7,\n             \"num_head_in_embedding\": 8,\n             \"num_conv_block_in_embedding\": 4,\n             \"num_embedding_encoder_block\": 1,\n             \"kernel_size_in_modeling\": 5,\n             \"num_head_in_modeling\": 8,\n             \"num_conv_block_in_modeling\": 2,\n             \"num_modeling_encoder_block\": 7,\n             \"layer_dropout\": 0.9,\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/squad_qanet\",\n         \"num_epochs\": 100,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"verbose_step_count\": 100,\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"op_type\": \"adamax\",\n         \"learning_rate\": 0.002,\n         \"lr_scheduler_type\": \"reduce_on_plateau\",\n         \"reduce_on_plateau\": {\n             \"factor\": 0.5,\n             \"mode\": \"max\",\n             \"patience\": 2\n         }\n     },\n     \"seed_num\": 2\n }\n"
  },
  {
    "path": "base_config/squad/qanet_paper.json",
    "content": "{\n\n     \"data_reader\": {\n         \"dataset\": \"squad\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"squad\": {\n             \"lang_code\": \"en\",\n             \"context_max_length\": 400\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 6\n     },\n     \"token\": {\n         \"names\": [\"char\", \"glove\"],\n         \"types\": [\"char\", \"word\"],\n         \"tokenizer\": {\n             \"char\": {\n                 \"name\": \"character\"\n             },\n             \"word\": {\n                 \"name\": \"treebank_en\",\n                 \"split_with_regex\": true\n             }\n         },\n         \"char\": {\n             \"vocab\": {\n                 \"max_vocab_size\": 260,\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\"\n             },\n             \"indexer\": {\n                 \"insert_char_start\": true,\n                 \"insert_char_end\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 64,\n                 \"kernel_sizes\": [5],\n                 \"num_filter\": 200,\n                 \"activation\": \"relu\",\n                 \"dropout\": 0.05\n             }\n         },\n         \"glove\": {\n             \"vocab\": {\n                \"pretrained_path\": \"<glove.840B.vocab.txt path>\",\n                \"pretrained_token\": \"intersect\"\n             },\n             \"indexer\": {\n                 \"lowercase\": false\n             },\n             \"embedding\": {\n                 \"embed_dim\": 300,\n                 \"pretrained_path\": \"<glove.840B.300d.txt path>\",\n                 \"trainable\": false,\n                 \"dropout\": 0.1\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"qanet\",\n         \"qanet\": {\n             \"answer_maxlen\": 30,\n             \"model_dim\": 128,\n             \"kernel_size_in_embedding\": 7,\n             \"num_head_in_embedding\": 8,\n             \"num_conv_block_in_embedding\": 4,\n             \"num_embedding_encoder_block\": 1,\n             \"kernel_size_in_modeling\": 5,\n             \"num_head_in_modeling\": 8,\n             \"num_conv_block_in_modeling\": 2,\n             \"num_modeling_encoder_block\": 7,\n             \"layer_dropout\": 0.9,\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/squad_qanet_paper\",\n         \"num_epochs\": 100,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"verbose_step_count\": 100,\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"op_type\": \"adam\",\n         \"learning_rate\": 0.001,\n         \"adam\": {\n             \"betas\": [0.8, 0.999],\n             \"eps\": 1e-7,\n             \"weight_decay\": 3e-7\n         },\n         \"exponential_moving_average\": 0.9999,\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 1000\n         }\n     },\n     \"seed_num\": 2\n }\n"
  },
  {
    "path": "base_config/squad/roberta_base.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad_bert\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"squad_bert\": {\n             \"lang_code\": \"en\",\n             \"max_seq_length\": 384,\n             \"context_stride\": 128,\n             \"max_question_length\": 64,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 12\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\",\n                 \"cls_token\": \"<s>\",\n                 \"sep_token\": \"</s>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_qa\",\n         \"roberta_for_qa\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"answer_maxlen\": 30\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/squad_roberta_base\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"verbose_step_count\": 100,\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 1.5e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.06\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/squad/roberta_large.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad_bert\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"squad_bert\": {\n             \"lang_code\": \"en\",\n             \"max_seq_length\": 384,\n             \"context_stride\": 128,\n             \"max_question_length\": 64,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 8\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-large-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-large-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-large-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\",\n                 \"cls_token\": \"<s>\",\n                 \"sep_token\": \"</s>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_qa\",\n         \"roberta_for_qa\": {\n             \"pretrained_model_name\": \"roberta-large\",\n             \"answer_maxlen\": 30\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/squad_roberta_large\",\n         \"num_epochs\": 5,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"verbose_step_count\": 100,\n         \"eval_and_save_step_count\": 1000\n     },\n     \"optimizer\": {\n         \"learning_rate\": 1.5e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.06\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/bert_for_multi_task.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"multitask_bert\",\n         \"train_file_path\": \"train\",\n         \"valid_file_path\": \"valid\",\n         \"multitask_bert\": {\n             \"batch_sizes\": [15, 13, 11],\n             \"readers\": [{\n                 \"dataset\": \"seq_cls_bert\",\n                 \"train_file_path\": \"train.tsv\",\n                 \"valid_file_path\": \"dev.tsv\",\n                 \"seq_cls_bert\": {\n                     \"sequence_max_length\": 128,\n                     \"is_test\": true\n                 }\n             }, {\n                 \"dataset\": \"regression_bert\",\n                 \"train_file_path\": \"train.tsv\",\n                 \"valid_file_path\": \"dev.tsv\",\n                 \"regression_bert\": {\n                     \"sequence_max_length\": 128,\n                     \"is_test\": true\n                 }\n             }, {\n                 \"dataset\": \"squad_bert\",\n                 \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n                 \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n                 \"squad_bert\": {\n                     \"lang_code\": \"en\",\n                     \"max_seq_length\": 384,\n                     \"context_stride\": 128,\n                     \"max_question_length\": 64\n                 }\n             }]\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 1\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_multi\",\n         \"bert_for_multi\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropouts\": [0.05, 0.3, 0.1]\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/bert_for_multi_task\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 5,\n         \"grad_max_norm\": 1,\n         \"metric_key\": \"average\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"betas\": [0.9, 0.999],\n             \"eps\": 1e-6,\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_proportion\": 0.1\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/bert_for_qa.yaml",
    "content": "data_reader:\n  dataset: \"squad_bert\"\n  train_file_path: \"data/bert/squad_synthetic_data.json\"\n  valid_file_path: \"data/bert/squad_synthetic_data.json\"\n  squad_bert:\n    lang_code: \"en\"\n    max_seq_length: 384\n    context_stride: 128\n    max_question_length: 64\n\niterator:\n  batch_size: 10\n\ntoken:\n  names:\n    - \"feature\"\n  types:\n    - \"feature\"\n  tokenizer:\n    subword:\n      name: \"wordpiece\"\n      wordpiece:\n        vocab_path: \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n    word:\n      name: \"bert_basic\"\n      bert_basic:\n        do_lower_case: true\n\n  feature:\n    vocab:\n      pretrained_path: \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n      pretrained_token: \"all\"\n    indexer:\n      do_tokenize: false\n\nmodel:\n  name: \"bert_for_qa\"\n  bert_for_qa:\n    pretrained_model_name: \"bert-base-uncased\"\n\ntrainer:\n  log_dir: \"logs/test/bert_for_qa/\"\n  num_epochs: 2\n  early_stopping_threshold: 2\n  metric_key: \"em\"\n  verbose_step_count: 1\n  eval_and_save_step_count: 1\n\noptimizer:\n  learning_rate: 0.00005\n  op_type: \"adamw\"\n  adamw:\n    weight_decay: 0.01\n  lr_scheduler_type: \"warmup_linear\"\n  warmup_linear:\n    warmup_steps: 10000\n  gradient_accumulation_steps: 2\n\nseed_num: 25\n"
  },
  {
    "path": "base_config/test/bert_for_seq_cls.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"seq_cls_bert\",\n         \"train_file_path\": \"logs/test/seq_cls/synthetic_data.json\",\n         \"valid_file_path\": \"logs/test/seq_cls/synthetic_data.json\",\n         \"seq_cls_bert\": {\n             \"sequence_max_length\": 128,\n             \"class_key\": \"label\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 64\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": false\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/seq_cls/bert\",\n         \"num_epochs\": 2,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 0.00001,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 10000\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/bert_for_tok_cls.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"tok_cls_bert\",\n         \"train_file_path\": \"logs/test/tok_cls/synthetic_data.json\",\n         \"valid_file_path\": \"logs/test/tok_cls/synthetic_data.json\",\n         \"tok_cls_bert\": {\n             \"sequence_max_length\": 128,\n             \"tag_key\": \"label\",\n             \"ignore_tag_idx\": -1\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 64\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": false\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_tok_cls\",\n         \"bert_for_tok_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.2\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/tok_cls/bert\",\n         \"num_epochs\": 2,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 0.00001,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 10000\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/bidaf+bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"squad\": {\n             \"lang_code\": \"en\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 10\n     },\n     \"token\": {\n         \"names\": [\"char\", \"glove\", \"bert\"],\n         \"types\": [\"char\", \"word\", \"bert\"],\n         \"tokenizer\": {\n             \"char\": {\n                 \"name\": \"character\"\n             },\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"treebank_en\"\n             }\n         },\n         \"char\": {\n             \"vocab\": {\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\",\n                 \"max_vocab_size\": 260\n             },\n             \"indexer\": {\n                 \"insert_char_start\": true,\n                 \"insert_char_end\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 16,\n                 \"kernel_sizes\": [5],\n                 \"num_filter\": 100,\n                 \"activation\": \"relu\",\n                 \"dropout\": 0.2\n             }\n         },\n         \"glove\": {\n             \"vocab\": {},\n             \"indexer\": {\n                 \"lowercase\": false\n             },\n             \"embedding\": {\n                 \"embed_dim\": 50,\n                 \"trainable\": false,\n                 \"dropout\": 0.2\n             }\n         },\n         \"bert\": {\n             \"vocab\": {\n                 \"pad_token\": \"[PAD]\",\n                 \"oov_token\": \"[UNK]\",\n                 \"cls_token\": \"[CLS]\",\n                 \"sep_token\": \"[SEP]\",\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-cased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"embedding\": {\n                 \"pretrained_model_name\": \"bert-base-cased\",\n                 \"trainable\": false\n             }\n          }\n     },\n     \"model\": {\n         \"name\": \"bidaf\",\n         \"bidaf\": {\n             \"model_dim\": 50,\n             \"dropout\": 0.2\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/bidaf+bert/\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 2,\n         \"metric_key\": \"f1\",\n         \"verbose_step_count\": 1,\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"op_type\": \"adadelta\",\n         \"learning_rate\": 1,\n         \"exponential_moving_average\": 0.999\n     },\n     \"seed_num\": 25\n }\n"
  },
  {
    "path": "base_config/test/bidaf+cove.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"squad\": {\n             \"lang_code\": \"en\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 10\n     },\n     \"token\": {\n         \"names\": [\"char\", \"glove\", \"cove\"],\n         \"types\": [\"char\", \"word\", \"cove\"],\n         \"tokenizer\": {\n             \"char\": {\n                 \"name\": \"character\"\n             },\n             \"word\": {\n                 \"name\": \"treebank_en\",\n                 \"split_with_regex\": true\n             }\n         },\n         \"char\": {\n             \"vocab\": {\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\",\n                 \"max_vocab_size\": 260\n             },\n             \"indexer\": {\n                 \"insert_char_start\": true,\n                 \"insert_char_end\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 16,\n                 \"kernel_sizes\": [5],\n                 \"num_filter\": 100,\n                 \"activation\": \"relu\",\n                 \"dropout\": 0.2\n             }\n         },\n         \"glove\": {\n             \"indexer\": {\n                 \"lowercase\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 50,\n                 \"trainable\": false,\n                 \"dropout\": 0.2\n             }\n         },\n         \"cove\": {\n             \"embedding\": {\n                 \"glove_pretrained_path\": \"<glove.840B.300d.txt path>\",\n                 \"model_pretrained_path\": \"https://s3.amazonaws.com/research.metamind.io/cove/wmtlstm-8f474287.pth\",\n                 \"dropout\": 0.2,\n                 \"trainable\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bidaf\",\n         \"bidaf\": {\n             \"model_dim\": 50,\n             \"contextual_rnn_num_layer\": 1,\n             \"modeling_rnn_num_layer\": 2,\n             \"predict_rnn_num_layer\": 1,\n             \"dropout\": 0.2\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/bidaf+cove/\",\n         \"num_epochs\": 2,\n         \"early_stopping_threshold\": 2,\n         \"metric_key\": \"em\",\n         \"verbose_step_count\": 1,\n         \"eval_and_save_step_count\": 5\n     },\n     \"optimizer\": {\n         \"op_type\": \"adadelta\",\n         \"learning_rate\": 1,\n         \"exponential_moving_average\": 0.999\n     },\n     \"seed_num\": 25\n }\n"
  },
  {
    "path": "base_config/test/bidaf+elmo.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"squad\": {\n             \"lang_code\": \"en\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 10\n     },\n     \"token\": {\n         \"names\": [\"char\", \"glove\", \"elmo\"],\n         \"types\": [\"char\", \"word\", \"elmo\"],\n         \"tokenizer\": {\n             \"char\": {\n                 \"name\": \"character\"\n             },\n             \"word\": {\n                 \"name\": \"treebank_en\",\n                 \"split_with_regex\": true\n             }\n         },\n         \"char\": {\n             \"vocab\": {\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\",\n                 \"max_vocab_size\": 260\n             },\n             \"indexer\": {\n                 \"insert_char_start\": true,\n                 \"insert_char_end\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 16,\n                 \"kernel_sizes\": [5],\n                 \"num_filter\": 100,\n                 \"activation\": \"relu\",\n                 \"dropout\": 0.2\n             }\n         },\n         \"glove\": {\n             \"vocab\": {},\n             \"indexer\": {\n                 \"lowercase\": false\n             },\n             \"embedding\": {\n                 \"embed_dim\": 50,\n                 \"trainable\": false,\n                 \"dropout\": 0.2\n             }\n         },\n         \"elmo\": {\n             \"indexer\": {},\n             \"embedding\": {\n                 \"options_file\": \"https://s3-us-west-2.amazonaws.com/allennlp/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_options.json\",\n                 \"weight_file\": \"https://s3-us-west-2.amazonaws.com/allennlp/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5\",\n                 \"trainable\": false,\n                 \"dropout\": 0.5\n             }\n          }\n     },\n     \"model\": {\n         \"name\": \"bidaf\",\n         \"bidaf\": {\n             \"model_dim\": 50,\n             \"dropout\": 0.2\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/bidaf+elmo/\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 2,\n         \"metric_key\": \"em\",\n         \"verbose_step_count\": 1,\n         \"eval_and_save_step_count\": 5\n     },\n     \"optimizer\": {\n         \"op_type\": \"adadelta\",\n         \"learning_rate\": 1,\n         \"exponential_moving_average\": 0.999\n     },\n     \"seed_num\": 25\n }\n"
  },
  {
    "path": "base_config/test/bidaf.yaml",
    "content": "data_reader:\n  dataset: \"squad\"\n  train_file_path: \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\"\n  valid_file_path: \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\"\n  squad:\n    lang_code: \"ko\"\n\niterator:\n  batch_size: 10\n\ntoken:\n  names:\n    - \"char\"\n    - \"glove\"\n  types:\n    - \"char\"\n    - \"word\"\n  tokenizer:\n    char:\n      name: \"character\"\n    word:\n      name: \"treebank_en\"\n      split_with_regex: true\n  char:\n    vocab:\n      start_token: \"<s>\"\n      end_token: \"</s>\"\n      max_vocab_size: 260\n    indexer:\n      insert_char_start: true\n      insert_char_end: true\n    embedding:\n      embed_dim: 16\n      kernel_sizes:\n        - 5\n      num_filter: 100\n      activation: \"relu\"\n      dropout: 0.2\n  glove:\n    indexer:\n      lowercase: true\n    embedding:\n      embed_dim: 50\n      trainable: false\n      dropout: 0.2\n\nmodel:\n  name: \"bidaf\"\n  bidaf:\n    model_dim: 50\n    contextual_rnn_num_layer: 1\n    modeling_rnn_num_layer: 2\n    predict_rnn_num_layer: 1\n    dropout: 0.2\n\ntrainer:\n  log_dir: \"logs/test/bidaf/\"\n  num_epochs: 2\n  early_stopping_threshold: 2\n  grad_max_norm: 0.5\n  metric_key: \"em\"\n  verbose_step_count: 1\n  eval_and_save_step_count: \"epoch\"\n\noptimizer:\n  learning_rate: 1\n  op_type: \"adadelta\"\n  exponential_moving_average: 0.999\n\nseed_num: 25\n"
  },
  {
    "path": "base_config/test/bidaf_no_answer.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v2.0.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v2.0.json\",\n         \"squad\": {\n             \"lang_code\": \"en\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 10\n     },\n     \"token\": {\n         \"names\": [\"char\", \"glove\"],\n         \"types\": [\"char\", \"word\"],\n         \"tokenizer\": {\n             \"char\": {\n                 \"name\": \"character\"\n             },\n             \"word\": {\n                 \"name\": \"treebank_en\",\n                 \"split_with_regex\": true\n             }\n         },\n         \"char\": {\n             \"vocab\": {\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\",\n                 \"max_vocab_size\": 260\n             },\n             \"indexer\": {\n                 \"insert_char_start\": true,\n                 \"insert_char_end\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 16,\n                 \"kernel_sizes\": [5],\n                 \"num_filter\": 100,\n                 \"activation\": \"relu\",\n                 \"dropout\": 0.2\n             }\n         },\n         \"glove\": {\n             \"vocab\": {},\n             \"indexer\": {\n                 \"lowercase\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 50,\n                 \"trainable\": false,\n                 \"dropout\": 0.2\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bidaf_no_answer\",\n         \"bidaf\": {\n             \"model_dim\": 50,\n             \"dropout\": 0.2\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/bidaf_no_answer/\",\n         \"num_epochs\": 2,\n         \"early_stopping_threshold\": 2,\n         \"metric_key\": \"em\",\n         \"verbose_step_count\": 1,\n         \"eval_and_save_step_count\": 3\n     },\n     \"optimizer\": {\n         \"op_type\": \"adadelta\",\n         \"learning_rate\": 1,\n         \"exponential_moving_average\": 0.999\n     },\n     \"seed_num\": 25\n }\n"
  },
  {
    "path": "base_config/test/cola_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"cola_bert\",\n         \"train_file_path\": \"data/glue/CoLA/train.tsv\",\n         \"valid_file_path\": \"data/glue/CoLA/dev.tsv\",\n         \"cola_bert\": {\n             \"sequence_max_length\": 128,\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/cola_bert\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"matthews_corr\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 10\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/cola_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"cola_bert\",\n         \"train_file_path\": \"data/glue/CoLA/train.tsv\",\n         \"valid_file_path\": \"data/glue/CoLA/dev.tsv\",\n         \"cola_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\",\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\",\n                 \"cls_token\": \"<s>\",\n                 \"sep_token\": \"</s>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_seq_cls\",\n         \"roberta_for_seq_cls\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/cola_roberta\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"matthews_corr\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 10\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/docqa.json",
    "content": "{\n    \"data_reader\": {\n        \"dataset\": \"squad\",\n        \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n        \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n        \"squad\": {\n            \"lang_code\": \"en\"\n        }\n    },\n    \"iterator\": {\n        \"batch_size\": 10\n    },\n    \"token\": {\n        \"names\": [\"char\", \"glove\"],\n        \"types\": [\"char\", \"word\"],\n        \"tokenizer\": {\n            \"char\": {\n                \"name\": \"character\"\n            },\n            \"word\": {\n                \"name\": \"treebank_en\",\n                \"split_with_regex\": true\n            }\n        },\n        \"char\": {\n            \"vocab\": {\n                \"max_vocab_size\": 260,\n                \"start_token\": \"<s>\",\n                \"end_token\": \"</s>\"\n            },\n            \"indexer\": {\n                \"insert_char_start\": true,\n                \"insert_char_end\": true\n            },\n            \"embedding\": {\n                \"embed_dim\": 20,\n                \"kernel_sizes\": [5],\n                \"num_filter\": 100,\n                \"activation\": \"relu\",\n                \"dropout\": 0.2\n            }\n        },\n        \"glove\": {\n            \"vocab\": {},\n            \"indexer\": {\n                \"lowercase\": false\n            },\n            \"embedding\": {\n                \"embed_dim\": 50,\n                \"trainable\": false,\n                \"dropout\": 0.2\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"docqa\",\n        \"docqa\": {\n            \"preprocess_rnn_num_layer\": 1,\n            \"modeling_rnn_num_layer\": 2,\n            \"predict_rnn_num_layer\": 1\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/test/docqa/\",\n        \"num_epochs\": 1,\n        \"early_stopping_threshold\": 1,\n        \"metric_key\": \"em\",\n        \"verbose_step_count\": 1,\n        \"eval_and_save_step_count\": 1\n    },\n    \"optimizer\": {\n        \"op_type\": \"adamax\",\n        \"learning_rate\": 0.002\n    },\n    \"seed_num\": 25\n}\n"
  },
  {
    "path": "base_config/test/docqa_no_answer.json",
    "content": "{\n    \"data_reader\": {\n        \"dataset\": \"squad\",\n        \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v2.0.json\",\n        \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v2.0.json\",\n        \"squad\": {\n            \"lang_code\": \"en\"\n        }\n    },\n    \"iterator\": {\n        \"batch_size\": 10\n    },\n    \"token\": {\n        \"names\": [\"char\", \"glove\"],\n        \"types\": [\"char\", \"word\"],\n        \"tokenizer\": {\n            \"char\": {\n                \"name\": \"character\"\n            },\n            \"word\": {\n                \"name\": \"treebank_en\",\n                \"split_with_regex\": true\n            }\n        },\n        \"char\": {\n            \"vocab\": {\n                \"max_vocab_size\": 260,\n                \"start_token\": \"<s>\",\n                \"end_token\": \"</s>\"\n            },\n            \"indexer\": {\n              \"insert_char_start\": true,\n              \"insert_char_end\": true\n            },\n            \"embedding\": {\n                \"embed_dim\": 20,\n                \"kernel_sizes\": [5],\n                \"num_filter\": 100,\n                \"activation\": \"relu\",\n                \"dropout\": 0.2\n            }\n        },\n        \"glove\": {\n            \"vocab\": {},\n            \"indexer\": {\n                \"lowercase\": false\n            },\n            \"embedding\": {\n                \"embed_dim\": 50,\n                \"trainable\": false,\n                \"dropout\": 0.2\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"docqa_no_answer\"\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/test/docqa_no_answer/\",\n        \"num_epochs\": 1,\n        \"early_stopping_threshold\": 1,\n        \"metric_key\": \"em\",\n        \"verbose_step_count\": 1,\n        \"eval_and_save_step_count\": 1\n    },\n    \"optimizer\": {\n        \"op_type\": \"adamax\",\n        \"learning_rate\": 0.002\n    },\n    \"seed_num\": 25\n}\n"
  },
  {
    "path": "base_config/test/drqa.json",
    "content": "{\n   \"data_reader\": {\n       \"dataset\": \"squad\",\n       \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n       \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n       \"squad\": {\n           \"lang_code\": \"en\"\n       }\n   },\n   \"iterator\": {\n       \"batch_size\": 10\n   },\n    \"token\": {\n        \"names\": [\"frequent_word\", \"exact_match\", \"linguistic\"],\n        \"types\": [\"frequent_word\", \"exact_match\", \"linguistic\"],\n        \"tokenizer\": {\n            \"word\": {\n                \"name\": \"spacy_en\",\n                \"split_with_regex\": true\n            }\n        },\n        \"frequent_word\": {\n            \"vocab\": {\n                \"frequent_count\": 1000\n            },\n            \"indexer\": {\n                \"lowercase\": false\n            },\n            \"embedding\": {\n                \"embed_dim\": 50,\n                \"dropout\": 0.3\n            }\n        },\n        \"exact_match\": {\n            \"indexer\": {\n                \"lower\": true,\n                \"lemma\": true\n            },\n            \"embedding\": {\n                \"type\": \"sparse\"\n            }\n        },\n        \"linguistic\": {\n            \"indexer\": {\n                \"pos_tag\": true,\n                \"ner\": true\n            },\n            \"embedding\": {\n                \"type\": \"sparse\"\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"drqa\",\n        \"drqa\": {\n            \"aligned_query_embedding\": false,\n            \"answer_maxlen\": 15,\n            \"model_dim\": 128,\n            \"dropout\": 0.3\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/test/drqa/\",\n        \"num_epochs\": 1,\n        \"early_stopping_threshold\": 1,\n        \"metric_key\": \"em\",\n        \"verbose_step_count\": 1,\n        \"eval_and_save_step_count\": 1\n    },\n    \"optimizer\": {\n        \"op_type\": \"adamax\",\n        \"learning_rate\": 0.003,\n        \"adamax\": {\n            \"betas\": [0.9, 0.999],\n            \"eps\": 1e-08,\n            \"weight_decay\": 0\n        }\n    },\n    \"seed_num\": 21\n}\n"
  },
  {
    "path": "base_config/test/drqa_sparse_to_embedding.json",
    "content": "{\n   \"data_reader\": {\n       \"dataset\": \"squad\",\n       \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n       \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n       \"squad\": {\n           \"lang_code\": \"en\"\n       }\n   },\n   \"iterator\": {\n       \"batch_size\": 10\n   },\n    \"token\": {\n        \"names\": [\"frequent_word\", \"exact_match\", \"linguistic\"],\n        \"types\": [\"frequent_word\", \"exact_match\", \"linguistic\"],\n        \"tokenizer\": {\n            \"word\": {\n                \"name\": \"spacy_en\",\n                \"split_with_regex\": true\n            }\n        },\n        \"frequent_word\": {\n            \"vocab\": {\n                \"frequent_count\": 1000\n            },\n            \"indexer\": {\n                \"lowercase\": false\n            },\n            \"embedding\": {\n                \"embed_dim\": 50,\n                \"dropout\": 0.3\n            }\n        },\n        \"exact_match\": {\n            \"indexer\": {\n                \"lower\": true,\n                \"lemma\": true\n            },\n            \"embedding\": {\n                \"type\": \"sparse\"\n            }\n        },\n        \"linguistic\": {\n            \"indexer\": {\n                \"pos_tag\": true,\n                \"ner\": true\n            },\n            \"embedding\": {\n                \"type\": \"embedding\",\n                \"embed_dim\": 10\n            }\n        }\n    },\n    \"model\": {\n        \"name\": \"drqa\",\n        \"drqa\": {\n            \"aligned_query_embedding\": true,\n            \"answer_maxlen\": 15,\n            \"model_dim\": 128,\n            \"dropout\": 0.3\n        }\n    },\n    \"trainer\": {\n        \"log_dir\": \"logs/test/drqa_with_sparse_to_embedding/\",\n        \"num_epochs\": 1,\n        \"early_stopping_threshold\": 1,\n        \"metric_key\": \"em\",\n        \"verbose_step_count\": 1,\n        \"eval_and_save_step_count\": 1\n    },\n    \"optimizer\": {\n        \"op_type\": \"adamax\",\n        \"learning_rate\": 0.001,\n        \"lr_scheduler_type\": \"reduce_on_plateau\",\n        \"reduce_on_plateau\": {\n            \"factor\": 0.5,\n            \"mode\": \"max\",\n            \"patience\": 2\n        }\n    },\n    \"seed_num\": 21\n}\n"
  },
  {
    "path": "base_config/test/mnlim_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"mnli_bert\",\n         \"train_file_path\": \"data/glue/MNLI/train.tsv\",\n         \"valid_file_path\": \"data/glue/MNLI/dev_matched.tsv\",\n         \"mnli_bert\": {\n             \"sequence_max_length\": 128,\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/mnlim_bert\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 100\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/mrpc_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"mrpc_bert\",\n         \"train_file_path\": \"data/glue/MRPC/train.tsv\",\n         \"valid_file_path\": \"data/glue/MRPC/dev.tsv\",\n         \"mrpc_bert\": {\n             \"sequence_max_length\": 128,\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/mrpc_bert\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 10\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/mt_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"multitask_bert\",\n         \"train_file_path\": \"train\",\n         \"valid_file_path\": \"valid\",\n         \"multitask_bert\": {\n             \"batch_sizes\": [2, 3, 4],\n             \"readers\": [{\n                 \"dataset\": \"cola_bert\",\n                 \"train_file_path\": \"data/glue/CoLA/train.tsv\",\n                 \"valid_file_path\": \"data/glue/CoLA/dev.tsv\",\n                 \"cola_bert\": {\n                     \"sequence_max_length\": 128,\n                     \"is_test\": true\n                 }\n             }, {\n                 \"dataset\": \"stsb_bert\",\n                 \"train_file_path\": \"data/glue/STS-B/train.tsv\",\n                 \"valid_file_path\": \"data/glue/STS-B/dev.tsv\",\n                 \"stsb_bert\": {\n                     \"sequence_max_length\": 128,\n                     \"is_test\": true\n                 }\n             }, {\n                 \"dataset\": \"squad_bert\",\n                 \"train_file_path\": \"data/squad/dev-v1.1.json\",\n                 \"valid_file_path\": \"data/squad/dev-v1.1.json\",\n                 \"squad_bert\": {\n                     \"lang_code\": \"en\",\n                     \"max_seq_length\": 384,\n                     \"context_stride\": 128,\n                     \"max_question_length\": 64\n                 }\n             }]\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 1\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_multi\",\n         \"bert_for_multi\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropouts\": [0.1, 0.2, 0]\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/mt_bert\",\n         \"num_epochs\": 2,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"average\",\n         \"verbose_step_count\": 1,\n         \"eval_and_save_step_count\": 5\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 10\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/open_qa.json",
    "content": " {\n  \"name\": \"open_qa\",\n  \"open_qa\": {\n      \"tokenizers\": {\n          \"sent\": {\n              \"name\": \"punkt\"\n          },\n          \"word\": {\n              \"name\": \"space_all\",\n              \"split_with_regex\": true\n          }\n      },\n      \"knowledge_base\": {\n          \"wiki\": \"<WikiExtractor output_path with --json>\"\n      },\n      \"reasoning\": {\n          \"document_retrieval\": {\n              \"type\": \"component\",\n              \"name\": \"tfidf\",\n              \"tfidf\": {\n                  \"k\": 3\n              }\n          },\n          \"reading_comprehension\": {\n              \"type\": \"experiment\",\n              \"checkpoint_path\": \"<model_checkpoint_path>\"\n          }\n      }\n    }\n }\n"
  },
  {
    "path": "base_config/test/qanet.json",
    "content": "{\n     \"data_reader\": {\n         \"dataset\": \"squad\",\n         \"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n         \"squad\": {\n             \"lang_code\": \"en\"\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 10\n     },\n     \"token\": {\n         \"names\": [\"char\", \"glove\"],\n         \"types\": [\"char\", \"word\"],\n         \"tokenizer\": {\n             \"char\": {\n                 \"name\": \"character\"\n             },\n             \"word\": {\n                 \"name\": \"treebank_en\",\n                 \"split_with_regex\": true\n             }\n         },\n         \"char\": {\n             \"vocab\": {\n                 \"max_vocab_size\": 260,\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\"\n             },\n             \"indexer\": {\n                 \"insert_char_start\": true,\n                 \"insert_char_end\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 20,\n                 \"kernel_sizes\": [5],\n                 \"num_filter\": 50,\n                 \"activation\": \"relu\",\n                 \"dropout\": 0.05\n             }\n         },\n         \"glove\": {\n             \"vocab\": {},\n             \"indexer\": {\n                 \"lowercase\": false\n             },\n             \"embedding\": {\n                 \"embed_dim\": 50,\n                 \"trainable\": true,\n                 \"dropout\": 0.1\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"qanet\",\n         \"qanet\": {\n             \"answer_maxlen\": 30,\n             \"model_dim\": 128,\n             \"kernel_size_in_embedding\": 7,\n             \"num_head_in_embedding\": 8,\n             \"num_conv_block_in_embedding\": 4,\n             \"num_embedding_encoder_block\": 1,\n             \"kernel_size_in_modeling\": 5,\n             \"num_head_in_modeling\": 8,\n             \"num_conv_block_in_modeling\": 2,\n             \"num_modeling_encoder_block\": 7,\n             \"layer_dropout\": 0.9,\n             \"dropout\": 0.1\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/qanet/\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 1,\n         \"metric_key\": \"em\",\n         \"verbose_step_count\": 1,\n         \"eval_and_save_step_count\": 1\n     },\n     \"optimizer\": {\n         \"op_type\": \"adam\",\n         \"learning_rate\": 0.001,\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 1000\n         }\n     },\n     \"seed_num\": 25\n }\n"
  },
  {
    "path": "base_config/test/qnli_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"qnli_bert\",\n         \"train_file_path\": \"data/glue/QNLI/train.tsv\",\n         \"valid_file_path\": \"data/glue/QNLI/dev.tsv\",\n         \"qnli_bert\": {\n             \"sequence_max_length\": 128,\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/qnli_bert\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 100\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/qqp_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"qqp_bert\",\n         \"train_file_path\": \"data/glue/QQP/train.tsv\",\n         \"valid_file_path\": \"data/glue/QQP/dev.tsv\",\n         \"qqp_bert\": {\n             \"sequence_max_length\": 128,\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/qqp_bert_base\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"f1\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 100\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/roberta_for_qa.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"squad_bert\",\n         \"train_file_path\": \"data/squad/dev-v1.1.json\",\n         \"valid_file_path\": \"data/squad/dev-v1.1.json\",\n         \"squad_bert\": {\n             \"lang_code\": \"en\",\n             \"max_seq_length\": 384,\n             \"context_stride\": 128,\n             \"max_question_length\": 64\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 10\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_qa\",\n         \"roberta_for_qa\": {\n             \"pretrained_model_name\": \"roberta-base\"\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/bert_for_qa/\",\n         \"num_epochs\": 2,\n         \"early_stopping_threshold\": 2,\n         \"metric_key\": \"em\",\n         \"verbose_step_count\": 1,\n         \"eval_and_save_step_count\": 1\n     },\n     \"optimizer\": {\n         \"learning_rate\": 0.00005,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0.01\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 10000\n         },\n         \"gradient_accumulation_steps\": 2\n     },\n     \"seed_num\": 25\n }\n"
  },
  {
    "path": "base_config/test/rte_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"rte_bert\",\n         \"train_file_path\": \"data/glue/RTE/train.tsv\",\n         \"valid_file_path\": \"data/glue/RTE/dev.tsv\",\n         \"rte_bert\": {\n             \"sequence_max_length\": 128,\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/rte_bert\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 5\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/rte_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"rte_bert\",\n         \"train_file_path\": \"data/glue/RTE/train.tsv\",\n         \"valid_file_path\": \"data/glue/RTE/dev.tsv\",\n         \"rte_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\",\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_seq_cls\",\n         \"roberta_for_seq_cls\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/rte_roberta\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 5\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/sqlnet.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"wikisql\",\n         \"train_file_path\": \"data/wikisql/dev.jsonl\",\n         \"valid_file_path\": \"data/wikisql/dev.jsonl\",\n         \"wikisql\": {\n           \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 10\n     },\n     \"token\": {\n         \"names\": [\"glove\"],\n         \"types\": [\"word\"],\n         \"tokenizer\": {\n             \"word\": {\n                 \"name\": \"treebank_en\",\n                 \"split_with_regex\": true\n             }\n         },\n         \"glove\": {\n             \"vocab\": {\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\"\n             },\n             \"indexer\": {\n                 \"lowercase\": true,\n                 \"do_tokenize\": true\n             },\n             \"embedding\": {\n                 \"embed_dim\": 50,\n                 \"trainable\": false,\n                 \"dropout\": 0.2\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"sqlnet\",\n         \"sqlnet\": {\n             \"column_attention\": true,\n             \"model_dim\": 100,\n             \"rnn_num_layer\": 2,\n             \"dropout\": 0.3,\n             \"column_maxlen\": 4,\n             \"token_maxlen\": 200,\n             \"conds_column_loss_alpha\": 3\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/sqlnet/\",\n         \"num_epochs\": 2,\n         \"early_stopping_threshold\": 2,\n         \"metric_key\": \"ex_accuracy\",\n         \"verbose_step_count\": 1,\n         \"eval_and_save_step_count\": 1\n     },\n     \"optimizer\": {\n         \"op_type\": \"adam\",\n         \"learning_rate\": 0.001\n     },\n     \"seed_num\": 25\n }\n"
  },
  {
    "path": "base_config/test/ssa.json",
    "content": "{\n  \"data_reader\": {\n    \"dataset\": \"seq_cls\",\n    \"train_file_path\": \"logs/test/seq_cls/synthetic_data.json\",\n    \"valid_file_path\": \"logs/test/seq_cls/synthetic_data.json\",\n    \"seq_cls\": {\n      \"class_key\": \"label\"\n    }\n  },\n  \"iterator\": {\n    \"batch_size\": 32\n  },\n  \"token\": {\n    \"names\": [\"char\", \"fasttext\"],\n    \"types\": [\"char\", \"word\"],\n    \"tokenizer\": {\n      \"char\": {\n          \"name\": \"character\"\n      },\n      \"word\": {\n          \"name\": \"treebank_en\",\n          \"split_with_regex\": true\n      }\n    },\n    \"char\": {\n      \"indexer\": {\n        \"insert_char_start\": false,\n        \"insert_char_end\": false\n      },\n      \"embedding\": {\n        \"embed_dim\": 16,\n        \"kernel_sizes\": [5],\n        \"num_filter\": 100,\n        \"activation\": \"relu\",\n        \"dropout\": 0.2\n      }\n    },\n    \"fasttext\": {\n      \"embedding\": {\n        \"embed_dim\": 300,\n        \"trainable\": false,\n        \"dropout\": 0.2\n      }\n    }\n  },\n  \"model\": {\n    \"name\": \"structured_self_attention\",\n    \"structured_self_attention\": {\n      \"encoding_rnn_hidden_dim\": 300,\n      \"encoding_rnn_num_layer\": 2,\n      \"encoding_rnn_dropout\": 0,\n      \"attention_dim\": 350,\n      \"num_attention_heads\": 30,\n      \"sequence_embed_dim\": 2000,\n      \"dropout\": 0.5,\n      \"penalization_coefficient\": 1\n    }\n  },\n  \"trainer\": {\n    \"log_dir\": \"logs/test/seq_cls/ssa\",\n    \"num_epochs\": 1,\n    \"early_stopping_threshold\": 10,\n    \"grad_max_norm\": 5.0,\n    \"metric_key\": \"accuracy\",\n    \"verbose_step_count\": 100,\n    \"eval_and_save_step_count\": \"epoch\"\n  },\n  \"optimizer\": {\n    \"op_type\": \"adam\",\n    \"learning_rate\": 0.001,\n    \"exponential_moving_average\": 0.999\n  },\n  \"seed_num\": 42\n}\n"
  },
  {
    "path": "base_config/test/sst_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"sst_bert\",\n         \"train_file_path\": \"data/glue/SST-2/train.tsv\",\n         \"valid_file_path\": \"data/glue/SST-2/dev.tsv\",\n         \"sst_bert\": {\n             \"sequence_max_length\": 128,\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/sst_bert\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 100\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/stsb_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"stsb_bert\",\n         \"train_file_path\": \"data/glue/STS-B/train.tsv\",\n         \"valid_file_path\": \"data/glue/STS-B/dev.tsv\",\n         \"stsb_bert\": {\n             \"sequence_max_length\": 128,\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_reg\",\n         \"bert_for_reg\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/stsb_bert\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"pearson_spearman_corr\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 100\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/stsb_roberta.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"stsb_bert\",\n         \"train_file_path\": \"data/glue/STS-B/train.tsv\",\n         \"valid_file_path\": \"data/glue/STS-B/dev.tsv\",\n         \"stsb_bert\": {\n             \"sequence_max_length\": 128,\n             \"cls_token\": \"<s>\",\n             \"sep_token\": \"</s>\",\n             \"input_type\": \"roberta\",\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"bpe\": {\n                \"name\": \"roberta\",\n                \"roberta\": {\n                    \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                    \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n                }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n                 \"pretrained_token\": \"all\",\n                 \"pad_token\": \"<pad>\",\n                 \"oov_token\": \"<unk>\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"roberta_for_reg\",\n         \"roberta_for_reg\": {\n             \"pretrained_model_name\": \"roberta-base\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/stsb_roberta\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"pearson_spearman_corr\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 100\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/test/wnli_bert.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"wnli_bert\",\n         \"train_file_path\": \"data/glue/WNLI/train.tsv\",\n         \"valid_file_path\": \"data/glue/WNLI/dev.tsv\",\n         \"wnli_bert\": {\n             \"sequence_max_length\": 128,\n             \"is_test\": true\n         }\n     },\n     \"iterator\": {\n         \"batch_size\": 2\n     },\n     \"token\": {\n         \"names\": [\"feature\"],\n         \"types\": [\"feature\"],\n         \"tokenizer\": {\n             \"subword\": {\n                 \"name\": \"wordpiece\",\n                 \"wordpiece\": {\n                     \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n                 }\n             },\n             \"word\": {\n                 \"name\": \"bert_basic\",\n                 \"bert_basic\": {\n                     \"do_lower_case\": true\n                 }\n             }\n         },\n         \"feature\": {\n             \"vocab\": {\n                 \"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n                 \"pretrained_token\": \"all\"\n             },\n             \"indexer\": {\n                 \"do_tokenize\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"bert_for_seq_cls\",\n         \"bert_for_seq_cls\": {\n             \"pretrained_model_name\": \"bert-base-uncased\",\n             \"dropout\": 0.0\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/test/wnli_bert\",\n         \"num_epochs\": 1,\n         \"early_stopping_threshold\": 10,\n         \"metric_key\": \"accuracy\",\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"learning_rate\": 2e-5,\n         \"op_type\": \"adamw\",\n         \"adamw\": {\n             \"weight_decay\": 0\n         },\n         \"lr_scheduler_type\": \"warmup_linear\",\n         \"warmup_linear\": {\n             \"warmup_steps\": 10\n         }\n     },\n     \"seed_num\": 42\n }\n"
  },
  {
    "path": "base_config/wikisql/sqlnet.json",
    "content": " {\n     \"data_reader\": {\n         \"dataset\": \"wikisql\",\n         \"train_file_path\": \"wikisql/train.jsonl\",\n         \"valid_file_path\": \"wikisql/dev.jsonl\"\n     },\n     \"iterator\": {\n         \"batch_size\": 64\n     },\n     \"token\": {\n         \"names\": [\"glove\"],\n         \"types\": [\"word\"],\n         \"tokenizer\": {\n             \"word\": {\n                 \"name\": \"treebank_en\",\n                 \"split_with_regex\": true\n             }\n         },\n         \"glove\": {\n             \"vocab\": {\n                 \"start_token\": \"<s>\",\n                 \"end_token\": \"</s>\"\n             },\n             \"indexer\": {\n                 \"lowercase\": false\n             },\n             \"embedding\": {\n                 \"embed_dim\": 300,\n                 \"pretrained_path\": \"<glove.840B.300d.txt path>\",\n                 \"trainable\": false\n             }\n         }\n     },\n     \"model\": {\n         \"name\": \"sqlnet\",\n         \"sqlnet\": {\n             \"column_attention\": true,\n             \"model_dim\": 100,\n             \"rnn_num_layer\": 2,\n             \"dropout\": 0.3,\n             \"column_maxlen\": 4,\n             \"token_maxlen\": 200,\n             \"conds_column_loss_alpha\": 3\n         }\n     },\n     \"trainer\": {\n         \"log_dir\": \"logs/experiment/sqlnet/\",\n         \"num_epochs\": 500,\n         \"early_stopping_threshold\": 50,\n         \"metric_key\": \"ex_accuracy\",\n         \"verbose_step_count\": 100,\n         \"eval_and_save_step_count\": \"epoch\"\n     },\n     \"optimizer\": {\n         \"op_type\": \"adam\",\n         \"learning_rate\": 0.001\n     },\n     \"seed_num\": 25\n }\n"
  },
  {
    "path": "claf/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n\n# register components\nfrom claf.data.reader import *\nfrom claf.machine import *\nfrom claf.machine.components import *\nfrom claf.model import *\n"
  },
  {
    "path": "claf/__version__.py",
    "content": "# CLaF: Clova Language Framework\n\nVERSION = (0, 2, 0)\n\n__version__ = \".\".join(map(str, VERSION))\n"
  },
  {
    "path": "claf/config/__init__.py",
    "content": ""
  },
  {
    "path": "claf/config/args.py",
    "content": "\nimport argparse\nfrom argparse import RawTextHelpFormatter\nimport os\nimport sys\n\nimport torch\n\nfrom claf import nsml\nfrom claf.config import utils\nfrom claf.config.namespace import NestedNamespace\nfrom claf.learn.mode import Mode\n\n\ndef config(argv=None, mode=None):\n    if argv is None:\n        argv = sys.argv[1:]  # 0 is excute file_name\n\n    parser = argparse.ArgumentParser(formatter_class=RawTextHelpFormatter)\n\n    general(parser)\n\n    if mode == Mode.EVAL:\n        evaluate(parser)\n        return parser.parse_args(argv, namespace=NestedNamespace())\n\n    if mode == Mode.PREDICT:\n        predict(parser)\n        return parser.parse_args(argv, namespace=NestedNamespace())\n\n    if mode == Mode.MACHINE:\n        machine(parser)\n        config = parser.parse_args(argv, namespace=NestedNamespace())\n\n        if config.machine_config is None:\n            raise ValueError(\"--machine_config is required.\")\n\n        machine_config_path = os.path.join(\"machine_config\", config.machine_config)\n        machine_config_path = utils.add_config_extension(machine_config_path)\n        defined_config = utils.read_config(machine_config_path)\n        config.overwrite(defined_config)\n        return config\n\n    return train_config(parser, input_argv=argv)\n\n\ndef train_config(parser, input_argv=None):\n    \"\"\" Add argument only for hyperparameter tuning. \"\"\"\n\n    data(parser)\n    token(parser)\n    model(parser)\n    if nsml.IS_ON_NSML:\n        nsml_for_internal(parser)\n    trainer(parser)\n\n    # Use from config file\n    base_config(parser)\n\n    config = parser.parse_args(input_argv, namespace=NestedNamespace())\n\n    use_base_config = config.base_config\n    # use pre-defined base_config\n    if use_base_config:\n        base_config_path = os.path.join(\"base_config\", config.base_config)\n        base_config_path = utils.add_config_extension(base_config_path)\n        defined_config = utils.read_config()\n        # config.overwrite(defined_config)\n\n        config = NestedNamespace()\n        config.load_from_json(defined_config)\n\n    # overwrite input argument when base_config and arguments are provided.\n    # (eg. --base_config bidaf --learning_rate 2) -> set bidaf.json then overwrite learning_rate 2)\n    input_args = get_input_arguments(parser, input_argv)\n    for k, v in input_args.items():\n        setattr(config, k, v)\n\n    if not use_base_config:\n        config = optimize_config(config)\n\n    set_gpu_env(config)\n    set_batch_size(config)\n    return config\n\n\ndef get_input_arguments(parser, input_arguments):\n    flat_config = parser.parse_args(input_arguments)\n    config_dict = utils.convert_config2dict(flat_config)\n    config_default_none = {k: None for k in config_dict.keys()}\n\n    input_parser = argparse.ArgumentParser(parents=[parser], conflict_handler=\"resolve\")\n    input_parser.set_defaults(**config_default_none)\n\n    input_config = input_parser.parse_args(input_arguments)\n    input_config = utils.convert_config2dict(input_config)\n\n    if \"base_config\" in input_config:\n        del input_config[\"base_config\"]\n    return {k: v for k, v in input_config.items() if v is not None}\n\n\ndef optimize_config(config, is_test=False):\n    if not is_test:\n        # Remove unselected argument\n        token_excepts = config.token.names + [\"names\", \"types\", \"tokenizer\"]\n        config.delete_unselected(config.token, excepts=token_excepts)\n        config.delete_unselected(config.model, excepts=[\"name\", config.model.name])\n        config.delete_unselected(\n            config.optimizer,\n            excepts=[\n                \"op_type\",\n                config.optimizer.op_type,\n                \"learning_rate\",\n                \"lr_scheduler_type\",\n                config.optimizer.lr_scheduler_type,\n                \"exponential_moving_average\",\n            ],\n        )\n\n    return config\n\n\ndef set_gpu_env(config):\n    # GPU & NSML\n    config.use_gpu = torch.cuda.is_available() or nsml.IS_ON_NSML\n\n    if nsml.IS_ON_NSML:\n        if getattr(config, \"nsml\", None) is None:\n            config.nsml = NestedNamespace()\n        config.nsml.dataset_path = nsml.DATASET_PATH\n        config.gpu_num = int(nsml.GPU_NUM)\n    else:\n        config.gpu_num = len(getattr(config, \"cuda_devices\", []))\n\n    if not config.use_gpu:\n        config.gpu_num = 0\n        config.cuda_devices = None\n\n\ndef set_batch_size(config):\n    # dynamic batch_size (multi-gpu and gradient_accumulation_steps)\n    batch_size = config.iterator.batch_size\n    if config.gpu_num > 1:\n        batch_size *= config.gpu_num\n    if getattr(config.optimizer, \"gradient_accumulation_steps\", None):\n        batch_size = batch_size // config.optimizer.gradient_accumulation_steps\n    config.iterator.batch_size = int(batch_size)\n\n\ndef arg_str2bool(v):\n    if v.lower() in (\"yes\", \"true\", \"True\", \"t\", \"y\", \"1\"):\n        return True\n    elif v.lower() in (\"no\", \"false\", \"False\", \"f\", \"n\", \"0\"):\n        return False\n    else:\n        raise argparse.ArgumentTypeError(\"Boolean value expected.\")\n\n\n# fmt: off\ndef general(parser):\n\n    group = parser.add_argument_group(\"General\")\n    group.add_argument(\n        \"--seed_num\",\n        type=int, default=21, dest=\"seed_num\",\n        help=\"\"\" Manually set seed_num (Python, Numpy, Pytorch) default is 21 \"\"\",\n    )\n    group.add_argument(\n        \"--cuda_devices\", nargs=\"+\",\n        type=int, default=[], dest=\"cuda_devices\",\n        help=\"\"\" Set cuda_devices ids (use GPU). if you use NSML, use GPU_NUM\"\"\",\n    )\n    group.add_argument(\n        \"--slack_url\",\n        type=str, default=None, dest=\"slack_url\",\n        help=\"\"\" Slack notification (Incoming Webhook) \"\"\",\n    )\n\n\ndef data(parser):\n\n    group = parser.add_argument_group(\"Data Reader\")\n    group.add_argument(\n        \"--dataset\",\n        type=str, default=\"squad\", dest=\"data_reader.dataset\",\n        help=\"\"\" Dataset Name [squad|squad2] \"\"\",\n    )\n    group.add_argument(\n        \"--train_file_path\",\n        type=str, default=\"train-v1.1.json\", dest=\"data_reader.train_file_path\",\n        help=\"\"\" train file path. \"\"\",\n    )\n    group.add_argument(\n        \"--valid_file_path\",\n        type=str, default=\"dev-v1.1.json\", dest=\"data_reader.valid_file_path\",\n        help=\"\"\" validation file path. \"\"\",\n    )\n    group.add_argument(\n        \"--test_file_path\",\n        type=str, default=None, dest=\"data_reader.test_file_path\",\n        help=\"\"\" test file path. \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # SQuAD DataSet\")\n    group.add_argument(\n        \"--squad.context_max_length\",\n        type=int, default=None, dest=\"data_reader.squad.context_max_length\",\n        help=\"\"\" The number of SQuAD Context maximum length. \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # HistoryQA DataSet\")\n    group.add_argument(\n        \"--history.context_max_length\",\n        type=int, default=None, dest=\"data_reader.history.context_max_length\",\n        help=\"\"\" The number of HistoryQA Context maximum length. \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # SeqCls DataSet\")\n    group.add_argument(\n        \"--seq_cls.class_key\",\n        type=int, default=None, dest=\"data_reader.seq_cls.class_key\",\n        help=\"\"\" Name of the label to use for classification. \"\"\",\n    )\n    group.add_argument(\n        \"--seq_cls.sequence_max_length\",\n        type=int, default=None, dest=\"data_reader.seq_cls.sequence_max_length\",\n        help=\"\"\" The number of maximum sequence length. \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # SeqClsBert DataSet\")\n    group.add_argument(\n        \"--seq_cls_bert.class_key\",\n        type=int, default=None, dest=\"data_reader.seq_cls_bert.class_key\",\n        help=\"\"\" Name of the label to use for classification. \"\"\",\n    )\n    group.add_argument(\n        \"--seq_cls_bert.sequence_max_length\",\n        type=int, default=None, dest=\"data_reader.seq_cls_bert.sequence_max_length\",\n        help=\"\"\" The number of maximum sequence length. \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # TokClsBert DataSet\")\n    group.add_argument(\n        \"--tok_cls_bert.tag_key\",\n        type=int, default=None, dest=\"data_reader.tok_cls_bert.tag_key\",\n        help=\"\"\" Name of the label to use for classification. \"\"\",\n    )\n    group.add_argument(\n        \"--tok_cls_bert.ignore_tag_idx\",\n        type=int, default=None, dest=\"data_reader.tok_cls_bert.ignore_tag_idx\",\n        help=\"\"\" Index of the tag to ignore when calculating loss. (tag pad value) \"\"\",\n    )\n    group.add_argument(\n        \"--tok_cls_bert.sequence_max_length\",\n        type=int, default=None, dest=\"data_reader.tok_cls_bert.sequence_max_length\",\n        help=\"\"\" The number of maximum sequence length. \"\"\",\n    )\n\n    group = parser.add_argument_group(\"Iterator\")\n    group.add_argument(\n        \"--batch_size\", type=int, default=32, dest=\"iterator.batch_size\",\n        help=\"\"\" Maximum batch size for trainer\"\"\",\n    )\n\n\ndef token(parser):\n\n    group = parser.add_argument_group(\"Token\")\n    group.add_argument(\n        \"--token_names\", nargs=\"+\",\n        type=str, default=[\"char\", \"word\"], dest=\"token.names\",\n        help=\"\"\" Define tokens name\"\"\",\n    )\n    group.add_argument(\n        \"--token_types\", nargs=\"+\",\n        type=str, default=[\"char\", \"word\"], dest=\"token.types\",\n        help=\"\"\"\\\n    Use pre-defined token\n    (tokenizer -> indexer -> embedder)\n\n    [char|cove|elmo|exact_match|frequent_word|word]\"\"\",\n    )\n\n    group = parser.add_argument_group(\" # Vocabulary\")\n\n    group.add_argument(\n        \"--char.pad_token\",\n        type=str, default=None, dest=\"token.char.vocab.pad_token\",\n        help=\"\"\" Padding Token value\"\"\",\n    )\n    group.add_argument(\n        \"--char.oov_token\",\n        type=str, default=None, dest=\"token.char.vocab.oov_token\",\n        help=\"\"\" Out-of-Vocabulary Token value\"\"\",\n    )\n    group.add_argument(\n        \"--char.start_token\",\n        type=str, default=None, dest=\"token.char.vocab.start_token\",\n        help=\"\"\" Start Token value\"\"\",\n    )\n    group.add_argument(\n        \"--char.end_token\",\n        type=str, default=None, dest=\"token.char.vocab.end_token\",\n        help=\"\"\" End Token value\"\"\",\n    )\n    group.add_argument(\n        \"--char.min_count\",\n        type=int, default=None, dest=\"token.char.vocab.min_count\",\n        help=\"\"\" The number of token's min count\"\"\",\n    )\n    group.add_argument(\n        \"--char.max_vocab_size\",\n        type=int, default=260, dest=\"token.char.vocab.max_vocab_size\",\n        help=\"\"\" The number of vocab's max size\"\"\",\n    )\n\n    group.add_argument(\n        \"--feature.pretrained_path\",\n        type=str, default=None, dest=\"token.feature.vocab.pretrained_path\",\n        help=\"\"\" Add pretrained vocab_path\"\"\",\n    )\n    group.add_argument(\n        \"--feature.pad_token\",\n        type=str, default=None, dest=\"token.feature.vocab.pad_token\",\n        help=\"\"\" Set pad_token\"\"\",\n    )\n    group.add_argument(\n        \"--feature.oov_token\",\n        type=str, default=None, dest=\"token.feature.vocab.oov_token\",\n        help=\"\"\" Set oov_token\"\"\",\n    )\n    group.add_argument(\n        \"--feature.cls_token\",\n        type=str, default=None, dest=\"token.feature.vocab.cls_token\",\n        help=\"\"\" Set cls_token\"\"\",\n    )\n    group.add_argument(\n        \"--feature.sep_token\",\n        type=str, default=None, dest=\"token.feature.vocab.sep_token\",\n        help=\"\"\" Set sep_token\"\"\",\n    )\n\n    group.add_argument(\n        \"--word.pad_token\",\n        type=str, default=None, dest=\"token.word.vocab.pad_token\",\n        help=\"\"\" Padding Token value\"\"\",\n    )\n    group.add_argument(\n        \"--word.oov_token\",\n        type=str, default=None, dest=\"token.word.vocab.oov_token\",\n        help=\"\"\" Out-of-Vocabulary Token value\"\"\",\n    )\n    group.add_argument(\n        \"--word.min_count\",\n        type=int, default=None, dest=\"token.word.vocab.min_count\",\n        help=\"\"\" The number of token's min count\"\"\",\n    )\n    group.add_argument(\n        \"--word.max_vocab_size\",\n        type=int, default=None, dest=\"token.word.vocab.max_vocab_size\",\n        help=\"\"\" The number of vocab's max size\"\"\",\n    )\n\n    group.add_argument(\n        \"--frequent_word.frequent_count\",\n        type=int, default=1000, dest=\"token.frequent_word.vocab.frequent_count\",\n        help=\"\"\"\\\n    The number of threshold frequent count\n    (>= threshold -> fine-tune, < threshold -> fixed)\"\"\",\n    )\n\n    group = parser.add_argument_group(\" # Tokenizer\")\n\n    group.add_argument(\n        \"--tokenizer.bpe.name\",\n        type=str, default=\"roberta\", dest=\"token.tokenizer.bpe.name\",\n        help=\"\"\"\\\n    BPE Tokenizer package name [roberta]\n    Default is 'roberta' \"\"\",\n    )\n    group.add_argument(\n        \"--tokenizer.bpe.roberta.vocab_path\",\n        type=str, default=None, dest=\"token.tokenizer.bpe.roberta.vocab_path\",\n        help=\"\"\"\\\n    RoBERTa BPE Tokenizer vocab_path\n    Default is 'None' \"\"\",\n    )\n    group.add_argument(\n        \"--tokenizer.bpe.roberta.merges_path\",\n        type=str, default=None, dest=\"token.tokenizer.bpe.roberta.merges_path\",\n        help=\"\"\"\\\n    RoBERTa BPE Tokenizer merges_path\n    Default is 'None' \"\"\",\n    )\n\n    group.add_argument(\n        \"--tokenizer.char.name\",\n        type=str, default=\"character\", dest=\"token.tokenizer.char.name\",\n        help=\"\"\"\\\n    CharTokenizer package name [character|jamo_ko]\n    Default is 'character' \"\"\",\n    )\n\n    group.add_argument(\n        \"--tokenizer.subword.name\",\n        type=str, default=\"wordpiece\", dest=\"token.tokenizer.subword.name\",\n        help=\"\"\"\\\n    SubWordTokenizer package name [wordpiece]\n    Default is 'wordpiece' \"\"\",\n    )\n    group.add_argument(\n        \"--tokenizer.subword.wordpiece.vocab_path\",\n        type=str, default=None, dest=\"token.tokenizer.subword.wordpiece.vocab_path\",\n        help=\"\"\"\\\n    Wordpiece Tokenizer vocab_path\n    Default is 'None' \"\"\",\n    )\n\n    group.add_argument(\n        \"--tokenizer.word.name\",\n        type=str, default=\"treebank_en\", dest=\"token.tokenizer.word.name\",\n        help=\"\"\"\\\n    WordTokenizer package name [treebank_en|spacy_en|mecab_ko]\n    Default is 'treebank_en' \"\"\",\n    )\n    group.add_argument(\n        \"--tokenizer.word.split_with_regex\",\n        type=arg_str2bool, default=False, dest=\"token.tokenizer.word.split_with_regex\",\n        help=\"\"\" preprocess for SQuAD Context data (simple regex) \"\"\",\n    )\n    group.add_argument(\n        \"--tokenizer.word.bert_basic.do_lower_case\",\n        type=arg_str2bool, default=True, dest=\"token.tokenizer.word.bert_basic.do_lower_case\",\n        help=\"\"\"\\\n    Wordpiece Tokenizer do_lower_case or not\n    Default is 'True' \"\"\",\n    )\n\n    group.add_argument(\n        \"--tokenizer.sent.name\",\n        type=str, default=\"punkt\", dest=\"token.tokenizer.sent.name\",\n        help=\"\"\"\\\n    SentTokenizer package name [punkt]\n    Default is 'punkt' \"\"\",\n    )\n\n    group = parser.add_argument_group(\" # Indexer\")\n    group.add_argument(\n        \"--char.insert_char_start\",\n        type=arg_str2bool, default=False, dest=\"token.char.indexer.insert_char_start\",\n        help=\"\"\" insert first start_token to tokens\"\"\",\n    )\n    group.add_argument(\n        \"--char.insert_char_end\",\n        type=arg_str2bool, default=False, dest=\"token.char.indexer.insert_char_end\",\n        help=\"\"\" append end_token to tokens\"\"\",\n    )\n\n    group.add_argument(\n        \"--exact_match.lower\",\n        type=arg_str2bool, default=True, dest=\"token.exact_match.indexer.lower\",\n        help=\"\"\" add lower case feature \"\"\",\n    )\n    group.add_argument(\n        \"--exact_match.lemma\",\n        type=arg_str2bool, default=True, dest=\"token.exact_match.indexer.lemma\",\n        help=\"\"\" add lemma case feature \"\"\",\n    )\n\n    group.add_argument(\n        \"--linguistic.pos_tag\",\n        type=arg_str2bool, default=True, dest=\"token.linguistic.indexer.pos_tag\",\n        help=\"\"\" add POS Tagging feature \"\"\",\n    )\n    group.add_argument(\n        \"--linguistic.ner\",\n        type=arg_str2bool, default=True, dest=\"token.linguistic.indexer.ner\",\n        help=\"\"\" add Named Entity Recognition feature \"\"\",\n    )\n    group.add_argument(\n        \"--linguistic.dep\",\n        type=arg_str2bool, default=False, dest=\"token.linguistic.indexer.dep\",\n        help=\"\"\" add Dependency Parser feature \"\"\",\n    )\n\n    group.add_argument(\n        \"--word.lowercase\",\n        type=arg_str2bool, default=False, dest=\"token.word.indexer.lowercase\",\n        help=\"\"\" Apply word token to lowercase\"\"\",\n    )\n    group.add_argument(\n        \"--word.insert_start\",\n        type=arg_str2bool, default=False, dest=\"token.word.indexer.insert_start\",\n        help=\"\"\" insert first start_token to tokens\"\"\",\n    )\n    group.add_argument(\n        \"--word.insert_end\",\n        type=arg_str2bool, default=False, dest=\"token.word.indexer.insert_end\",\n        help=\"\"\" append end_token to tokens\"\"\",\n    )\n\n    group = parser.add_argument_group(\" # Embedding\")\n\n    group.add_argument(\n        \"--char.embed_dim\",\n        type=int, default=16, dest=\"token.char.embedding.embed_dim\",\n        help=\"\"\" The number of Embedding dimension\"\"\",\n    )\n    group.add_argument(\n        \"--char.kernel_sizes\", nargs=\"+\",\n        type=int, default=[5], dest=\"token.char.embedding.kernel_sizes\",\n        help=\"\"\" CharCNN kernel_sizes (n-gram)\"\"\",\n    )\n    group.add_argument(\n        \"--char.num_filter\",\n        type=int, default=100, dest=\"token.char.embedding.num_filter\",\n        help=\"\"\" The number of CNN filter\"\"\",\n    )\n    group.add_argument(\n        \"--char.activation\",\n        type=str, default=\"relu\", dest=\"token.char.embedding.activation\",\n        help=\"\"\" CharCNN activation Function (default: ReLU)\"\"\",\n    )\n    group.add_argument(\n        \"--char.dropout\",\n        type=float, default=0.2, dest=\"token.char.embedding.dropout\",\n        help=\"\"\" Embedding dropout prob (default: 0.2)\"\"\",\n    )\n\n    group.add_argument(\n        \"--cove.glove_pretrained_path\",\n        type=str, default=None, dest=\"token.cove.embedding.glove_pretrained_path\",\n        help=\"\"\" CoVe's word embedding pretrained_path (GloVE 840B.300d)\"\"\",\n    )\n    group.add_argument(\n        \"--cove.model_pretrained_path\",\n        type=str, default=None, dest=\"token.cove.embedding.model_pretrained_path\",\n        help=\"\"\" CoVe Model pretrained_path \"\"\",\n    )\n    group.add_argument(\n        \"--cove.trainable\",\n        type=arg_str2bool, default=True, dest=\"token.cove.embedding.trainable\",\n        help=\"\"\" CoVe Embedding Trainable\"\"\",\n    )\n    group.add_argument(\n        \"--cove.dropout\",\n        type=float, default=0.2, dest=\"token.cove.embedding.dropout\",\n        help=\"\"\" Embedding dropout prob (default: 0.2)\"\"\",\n    )\n    group.add_argument(\n        \"--cove.project_dim\",\n        type=int, default=None, dest=\"token.cove.embedding.project_dim\",\n        help=\"\"\" The number of projection dimension\"\"\",\n    )\n\n    group.add_argument(\n        \"--elmo.options_file\",\n        type=str, default=\"elmo_2x4096_512_2048cnn_2xhighway_options.json\", dest=\"token.elmo.embedding.options_file\",\n        help=\"\"\" The option file path of ELMo\"\"\",\n    )\n    group.add_argument(\n        \"--elmo.weight_file\",\n        type=str, default=\"elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5\", dest=\"token.elmo.embedding.weight_file\",\n        help=\"\"\" The weight file path of ELMo\"\"\",\n    )\n    group.add_argument(\n        \"--elmo.trainable\",\n        type=arg_str2bool, default=False, dest=\"token.elmo.embedding.trainable\",\n        help=\"\"\" elmo Embedding Trainable\"\"\",\n    )\n    group.add_argument(\n        \"--elmo.dropout\",\n        type=float, default=0.5, dest=\"token.elmo.embedding.dropout\",\n        help=\"\"\" Embedding dropout prob (default: 0.5)\"\"\",\n    )\n    group.add_argument(\n        \"--elmo.project_dim\",\n        type=int, default=None, dest=\"token.elmo.embedding.project_dim\",\n        help=\"\"\" The number of projection dimension (default is None)\"\"\",\n    )\n\n    group.add_argument(\n        \"--word_permeability.memory_clip\",\n        type=int, default=3, dest=\"token.word_permeability.embedding.memory_clip\",\n        help=\"\"\" The number of memory cell clip value \"\"\",\n    )\n    group.add_argument(\n        \"--word_permeability.proj_clip\",\n        type=int, default=3, dest=\"token.word_permeability.embedding.proj_clip\",\n        help=\"\"\" The number of p clip value after projection \"\"\",\n    )\n    group.add_argument(\n        \"--word_permeability.embed_dim\",\n        type=int, default=1024, dest=\"token.word_permeability.embedding.embed_dim\",\n        help=\"\"\" The number of Embedding dimension\"\"\",\n    )\n    group.add_argument(\n        \"--word_permeability.linear_dim\",\n        type=int, default=None, dest=\"token.word_permeability.embedding.linear_dim\",\n        help=\"\"\" The number of linear projection dimension\"\"\",\n    )\n    group.add_argument(\n        \"--word_permeability.trainable\",\n        type=arg_str2bool, default=False, dest=\"token.word_permeability.embedding.trainable\",\n        help=\"\"\" word_permeability Embedding Trainable \"\"\",\n    )\n    group.add_argument(\n        \"--word_permeability.dropout\",\n        type=float, default=0.5, dest=\"token.word_permeability.embedding.dropout\",\n        help=\"\"\" Embedding dropout prob (default: 0.5)\"\"\",\n    )\n    group.add_argument(\n        \"--word_permeability.activation\",\n        type=str, default=\"tanh\", dest=\"token.word_permeability.embedding.activation\",\n        help=\"\"\" Activation Function (default is 'tanh') \"\"\",\n    )\n    group.add_argument(\n        \"--word_permeability.bidirectional\",\n        type=arg_str2bool, default=False, dest=\"token.word_permeability.embedding.bidirectional\",\n        help=\"\"\" bidirectional use or not ([forward;backward]) (default is False) \"\"\",\n    )\n\n    group.add_argument(\n        \"--frequent_word.embed_dim\",\n        type=int, default=100, dest=\"token.frequent_word.embedding.embed_dim\",\n        help=\"\"\" The number of Embedding dimension\"\"\",\n    )\n    group.add_argument(\n        \"--frequent_word.pretrained_path\",\n        type=str, default=None, dest=\"token.frequent_word.embedding.pretrained_path\",\n        help=\"\"\" Add pretrained Word vector model's path. (support file format like Glove)\"\"\",\n    )\n    group.add_argument(\n        \"--frequent_word.dropout\",\n        type=float, default=0.2, dest=\"token.frequent_word.embedding.dropout\",\n        help=\"\"\" Embedding dropout prob (default: 0.2)\"\"\",\n    )\n\n    group.add_argument(\n        \"--word.embed_dim\",\n        type=int, default=100, dest=\"token.word.embedding.embed_dim\",\n        help=\"\"\" The number of Embedding dimension\"\"\",\n    )\n    group.add_argument(\n        \"--word.pretrained_path\",\n        type=str, default=None, dest=\"token.word.embedding.pretrained_path\",\n        help=\"\"\" Add pretrained word vector model's path. (support file format like Glove)\"\"\",\n    )\n    group.add_argument(\n        \"--word.trainable\",\n        type=arg_str2bool, default=True, dest=\"token.word.embedding.trainable\",\n        help=\"\"\" Word Embedding Trainable\"\"\",\n    )\n    group.add_argument(\n        \"--word.dropout\",\n        type=float, default=0.2, dest=\"token.word.embedding.dropout\",\n        help=\"\"\" Embedding dropout prob (default: 0.2)\"\"\",\n    )\n\n\ndef model(parser):\n\n    group = parser.add_argument_group(\"Model\")\n    group.add_argument(\n        \"--model_name\",\n        type=str, default=\"bidaf\", dest=\"model.name\",\n        help=\"\"\"\\\n\n    Pre-defined model\n\n    * Reading Comprehension\n      [bert_for_qa|bidaf|bidaf_no_answer|docqa|docqa_no_answer|dclaf|qanet|simple]\n\n    * Regression\n      [bert_for_reg|roberta_for_reg]\n\n    * Semantic Parsing\n      [sqlnet]\n\n    * Sequence Classification\n      [bert_for_seq_cls|roberta_for_seq_cls|structured_self_attention]\n\n    * Token Classification\n      [bert_for_tok_cls]\n    \"\"\",\n    )\n\n    reading_comprehension_title = \"ㅁReading Comprehension\"\n    group = parser.add_argument_group(f\"{reading_comprehension_title}\\n # BERT for QuestionAnswering\")\n    group.add_argument(\n        \"--bert_for_qa.pretrained_model_name\",\n        type=str, default=None, dest=\"model.bert_for_qa.pretrained_model_name\",\n        help=\"\"\" A str with the name of a pre-trained model to load selected in the list of (default: None):\n                    . `bert-base-uncased`\n                    . `bert-large-uncased`\n                    . `bert-base-cased`\n                    . `bert-base-multilingual`\n                    . `bert-base-chinese` \"\"\",\n    )\n    group.add_argument(\n        \"--bert_for_qa.answer_maxlen\",\n        type=int, default=None, dest=\"model.bert_for_qa.answer_maxlen\",\n        help=\"\"\" The number of maximum answer's length (default: None)\"\"\",\n    )\n\n    group = parser.add_argument_group(f\" # RoBERTa\")\n    group.add_argument(\n        \"--roberta_for_qa.pretrained_model_name\",\n        type=str, default=None, dest=\"model.roberta_for_qa.pretrained_model_name\",\n        help=\"\"\" A str with the name of a pre-trained model to load selected in the list of (default: None):\n                    . `roberta-base`\n                    . `roberta-large` \"\"\",\n    )\n    group.add_argument(\n        \"--roberta_for_qa.answer_maxlen\",\n        type=int, default=None, dest=\"model.roberta_for_qa.answer_maxlen\",\n        help=\"\"\" The number of maximum answer's length (default: None)\"\"\",\n    )\n\n    group = parser.add_argument_group(f\" # BiDAF\")\n    group.add_argument(\n        \"--bidaf.aligned_query_embedding\",\n        type=int, default=False, dest=\"model.bidaf.aligned_query_embedding\",\n        help=\"\"\" Aligned Question Embedding  (default: False)\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf.answer_maxlen\",\n        type=int, default=None, dest=\"model.bidaf.answer_maxlen\",\n        help=\"\"\" The number of maximum answer's length (default: None)\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf.model_dim\",\n        type=int, default=100, dest=\"model.bidaf.model_dim\",\n        help=\"\"\" The number of BiDAF model dimension\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf.contextual_rnn_num_layer\",\n        type=int, default=1, dest=\"model.bidaf.contextual_rnn_num_layer\",\n        help=\"\"\" The number of BiDAF model contextual_rnn's recurrent layers\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf.modeling_rnn_num_layer\",\n        type=int, default=2, dest=\"model.bidaf.modeling_rnn_num_layer\",\n        help=\"\"\" The number of BiDAF model modeling_rnn's recurrent layers\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf.predict_rnn_num_layer\",\n        type=int, default=1, dest=\"model.bidaf.predict_rnn_num_layer\",\n        help=\"\"\" The number of BiDAF model predict_rnn's recurrent layers\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf.dropout\",\n        type=float, default=0.2, dest=\"model.bidaf.dropout\",\n        help=\"\"\" The prob of BiDAF dropout\"\"\",\n    )\n\n    group = parser.add_argument_group(\" # BiDAF + Simple bias\")\n    group.add_argument(\n        \"--bidaf_no_answer.aligned_query_embedding\",\n        type=int, default=False, dest=\"model.bidaf_no_answer.aligned_query_embedding\",\n        help=\"\"\" Aligned Question Embedding  (default: False)\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf_no_answer.answer_maxlen\",\n        type=int, default=None, dest=\"model.bidaf_no_answer.answer_maxlen\",\n        help=\"\"\" The number of maximum answer's length (default: None)\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf_no_answer.model_dim\",\n        type=int, default=100, dest=\"model.bidaf_no_answer.model_dim\",\n        help=\"\"\" The number of BiDAF model dimension\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf_no_answer.contextual_rnn_num_layer\",\n        type=int, default=1, dest=\"model.bidaf_no_answer.contextual_rnn_num_layer\",\n        help=\"\"\" The number of BiDAF model contextual_rnn's recurrent layers\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf_no_answer.modeling_rnn_num_layer\",\n        type=int, default=2, dest=\"model.bidaf_no_answer.modeling_rnn_num_layer\",\n        help=\"\"\" The number of BiDAF model modeling_rnn's recurrent layers\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf_no_answer.predict_rnn_num_layer\",\n        type=int, default=1, dest=\"model.bidaf_no_answer.predict_rnn_num_layer\",\n        help=\"\"\" The number of BiDAF model predict_rnn's recurrent layers\"\"\",\n    )\n    group.add_argument(\n        \"--bidaf_no_answer.dropout\",\n        type=float, default=0.2, dest=\"model.bidaf_no_answer.dropout\",\n        help=\"\"\" The prob of BiDAF dropout\"\"\",\n    )\n\n    group = parser.add_argument_group(\" # Simple\")\n    group.add_argument(\n        \"--simple.answer_maxlen\",\n        type=int, default=None, dest=\"model.simple.answer_maxlen\",\n        help=\"\"\" The number of maximum answer's length (default: None)\"\"\",\n    )\n    group.add_argument(\n        \"--simple.model_dim\",\n        type=int, default=100, dest=\"model.simple.model_dim\",\n        help=\"\"\" The number of Simple model dimension\"\"\",\n    )\n    group.add_argument(\n        \"--simple.dropout\",\n        type=float, default=0.2, dest=\"model.simple.dropout\",\n        help=\"\"\" The prob of Simple dropout\"\"\",\n    )\n\n    group = parser.add_argument_group(\" # QANet\")\n    group.add_argument(\n        \"--qanet.aligned_query_embedding\",\n        type=int, default=False, dest=\"model.qanet.aligned_query_embedding\",\n        help=\"\"\" Aligned Question Embedding  (default: False)\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.answer_maxlen\",\n        type=int, default=30, dest=\"model.qanet.answer_maxlen\",\n        help=\"\"\" The number of maximum answer's length (default: 30)\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.model_dim\",\n        type=int, default=128, dest=\"model.qanet.model_dim\",\n        help=\"\"\" The number of QANet model dimension\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.kernel_size_in_embedding\",\n        type=int, default=7, dest=\"model.qanet.kernel_size_in_embedding\",\n        help=\"\"\" The number of QANet model Embed Encoder kernel_size\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.num_head_in_embedding\",\n        type=int, default=8, dest=\"model.qanet.num_head_in_embedding\",\n        help=\"\"\" The number of QANet model Multi-Head Attention's head in Embedding Block\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.num_conv_block_in_embedding\",\n        type=int, default=4, dest=\"model.qanet.num_conv_block_in_embedding\",\n        help=\"\"\" The number of QANet model Conv Blocks in Embedding Block\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.num_embedding_encoder_block\",\n        type=int, default=1, dest=\"model.qanet.num_embedding_encoder_block\",\n        help=\"\"\" The number of QANet model Embedding Encoder Blocks\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.kernel_size_in_modeling\",\n        type=int, default=5, dest=\"model.qanet.kernel_size_in_modeling\",\n        help=\"\"\" The number of QANet model Model Encoder kernel_size\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.num_head_in_modeling\",\n        type=int, default=8, dest=\"model.qanet.num_head_in_modeling\",\n        help=\"\"\" The number of QANet model Multi-Head Attention's head in Modeling Block\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.num_conv_block_in_modeling\",\n        type=int, default=2, dest=\"model.qanet.num_conv_block_in_modeling\",\n        help=\"\"\" The number of QANet model Conv Blocks in Modeling Block\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.num_modeling_encoder_block\",\n        type=int, default=7, dest=\"model.qanet.num_modeling_encoder_block\",\n        help=\"\"\" The number of QANet model Modeling Encoder Blocks\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.layer_dropout\",\n        type=float, default=0.9, dest=\"model.qanet.layer_dropout\",\n        help=\"\"\" The prob of QANet model layer dropout\"\"\",\n    )\n    group.add_argument(\n        \"--qanet.dropout\",\n        type=float, default=0.1, dest=\"model.qanet.dropout\",\n        help=\"\"\" The prob of QANet dropout\"\"\",\n    )\n\n    group = parser.add_argument_group(\" # DocQA\")\n    group.add_argument(\n        \"--docqa.aligned_query_embedding\",\n        type=arg_str2bool, default=False, dest=\"model.docqa.aligned_query_embedding\",\n        help=\"\"\" Aligned Question Embedding  (default: False)\"\"\",\n    )\n    group.add_argument(\n        \"--docqa.answer_maxlen\",\n        type=int, default=17, dest=\"model.docqa.answer_maxlen\",\n        help=\"\"\" The number of maximum answer's length (default: 17)\"\"\",\n    )\n    group.add_argument(\n        \"--docqa.rnn_dim\",\n        type=int, default=100, dest=\"model.docqa.rnn_dim\",\n        help=\"\"\" The number of DocQA model rnn dimension\"\"\",\n    )\n    group.add_argument(\n        \"--docqa.linear_dim\",\n        type=int, default=200, dest=\"model.docqa.linear_dim\",\n        help=\"\"\" The number of DocQA model linear dimension\"\"\",\n    )\n    group.add_argument(\n        \"--docqa.preprocess_rnn_num_layer\",\n        type=int, default=1, dest=\"model.docqa.preprocess_rnn_num_layer\",\n        help=\"\"\" The number of DocQA model preprocess_rnn's recurrent layers\"\"\",\n    )\n    group.add_argument(\n        \"--docqa.modeling_rnn_num_layer\",\n        type=int, default=1, dest=\"model.docqa.modeling_rnn_num_layer\",\n        help=\"\"\" The number of DocQA model modeling_rnn's recurrent layers\"\"\",\n    )\n    group.add_argument(\n        \"--docqa.predict_rnn_num_layer\",\n        type=int, default=1, dest=\"model.docqa.predict_rnn_num_layer\",\n        help=\"\"\" The number of DocQA model predict_rnn's recurrent layers\"\"\",\n    )\n    group.add_argument(\n        \"--docqa.dropout\",\n        type=float, default=0.2, dest=\"model.docqa.dropout\",\n        help=\"\"\" The prob of DocQA dropout\"\"\",\n    )\n    group.add_argument(\n        \"--docqa.weight_init\",\n        type=arg_str2bool, default=True, dest=\"model.docqa.weight_init\",\n        help=\"\"\" Weight Init\"\"\",\n    )\n\n    group = parser.add_argument_group(\" # DocQA + No_Answer Option\")\n    group.add_argument(\n        \"--docqa_no_answer.aligned_query_embedding\",\n        type=arg_str2bool, default=False, dest=\"model.docqa_no_answer.aligned_query_embedding\",\n        help=\"\"\" Aligned Question Embedding  (default: False)\"\"\",\n    )\n    group.add_argument(\n        \"--docqa_no_answer.answer_maxlen\",\n        type=int, default=17, dest=\"model.docqa_no_answer.answer_maxlen\",\n        help=\"\"\" The number of maximum answer's length (default: None)\"\"\",\n    )\n    group.add_argument(\n        \"--docqa_no_answer.rnn_dim\",\n        type=int, default=100, dest=\"model.docqa_no_answer.rnn_dim\",\n        help=\"\"\" The number of docqa_no_answer model rnn dimension\"\"\",\n    )\n    group.add_argument(\n        \"--docqa_no_answer.linear_dim\",\n        type=int, default=200, dest=\"model.docqa_no_answer.linear_dim\",\n        help=\"\"\" The number of docqa_no_answer model linear dimension\"\"\",\n    )\n    group.add_argument(\n        \"--docqa_no_answer.dropout\",\n        type=float, default=0.2, dest=\"model.docqa_no_answer.dropout\",\n        help=\"\"\" The prob of QANet dropout\"\"\",\n    )\n    group.add_argument(\n        \"--docqa_no_answer.weight_init\",\n        type=arg_str2bool, default=True, dest=\"model.docqa_no_answer.weight_init\",\n        help=\"\"\" Weight Init\"\"\",\n    )\n\n    group = parser.add_argument_group(\" # DrQA\")\n    group.add_argument(\n        \"--drqa.aligned_query_embedding\",\n        type=int, default=True, dest=\"model.drqa.aligned_query_embedding\",\n        help=\"\"\" Aligned Question Embedding  (default: True)\"\"\",\n    )\n    group.add_argument(\n        \"--drqa.answer_maxlen\",\n        type=int, default=15, dest=\"model.drqa.answer_maxlen\",\n        help=\"\"\" The number of maximum answer's length (default: None)\"\"\",\n    )\n    group.add_argument(\n        \"--drqa.model_dim\",\n        type=int, default=128, dest=\"model.drqa.model_dim\",\n        help=\"\"\" The number of document reader model dimension\"\"\",\n    )\n    group.add_argument(\n        \"--drqa.dropout\",\n        type=int, default=0.3, dest=\"model.drqa.dropout\",\n        help=\"\"\" The number of document reader model dropout\"\"\",\n    )\n\n\n    regression_title = \"ㅁRegression\"\n    group = parser.add_argument_group(f\"{regression_title}\\n # BERT for Regression\")\n    group.add_argument(\n        \"--bert_for_reg.pretrained_model_name\",\n        type=str, default=None, dest=\"model.bert_for_reg.pretrained_model_name\",\n        help=\"\"\" A str with the name of a pre-trained model to load selected in the list of (default: None):\n                    . `bert-base-uncased`\n                    . `bert-large-uncased`\n                    . `bert-base-cased`\n                    . `bert-base-multilingual`\n                    . `bert-base-chinese` \"\"\",\n    )\n    group.add_argument(\n        \"--bert_for_reg.dropout\",\n        type=float, default=0.2, dest=\"model.bert_for_reg.dropout\",\n        help=\"\"\" The prob of fc layer dropout \"\"\"\n    )\n\n    group = parser.add_argument_group(f\" # RoBERTa\")\n    group.add_argument(\n        \"--roberta_for_reg.pretrained_model_name\",\n        type=str, default=None, dest=\"model.roberta_for_reg.pretrained_model_name\",\n        help=\"\"\" A str with the name of a pre-trained model to load selected in the list of (default: None):\n                    . `roberta-base`\n                    . `roberta-large` \"\"\",\n    )\n    group.add_argument(\n        \"--roberta_for_reg.dropout\",\n        type=float, default=0.2, dest=\"model.roberta_for_reg.dropout\",\n        help=\"\"\" The prob of fc layer dropout \"\"\"\n    )\n\n\n    semantic_parsing_title = \"ㅁSemantic Parsing\"\n    group = parser.add_argument_group(f\"{semantic_parsing_title}\\n # SQLNet\")\n    group.add_argument(\n        \"--sqlnet.column_attention\",\n        type=int, default=True, dest=\"model.sqlnet.column_attention\",\n        help=\"\"\" Compute attention map on a question conditioned on the column names (default: True)\"\"\",\n    )\n    group.add_argument(\n        \"--sqlnet.model_dim\",\n        type=int, default=100, dest=\"model.sqlnet.model_dim\",\n        help=\"\"\" The number of document reader model dimension\"\"\",\n    )\n    group.add_argument(\n        \"--sqlnet.rnn_num_layer\",\n        type=int, default=2, dest=\"model.sqlnet.rnn_num_layer\",\n        help=\"\"\" The number of SQLNet model rnn's recurrent layers\"\"\",\n    )\n    group.add_argument(\n        \"--sqlnet.dropout\",\n        type=int, default=0.3, dest=\"model.sqlnet.dropout\",\n        help=\"\"\" The prob of model dropout \"\"\",\n    )\n    group.add_argument(\n        \"--sqlnet.column_maxlen\",\n        type=int, default=4, dest=\"model.sqlnet.column_maxlen\",\n        help=\"\"\" The number of maximum column's length (default: 4)\"\"\",\n    )\n    group.add_argument(\n        \"--sqlnet.token_maxlen\",\n        type=int, default=200, dest=\"model.sqlnet.token_maxlen\",\n        help=\"\"\" An upper-bound N on the number of decoder tokeni \"\"\",\n    )\n    group.add_argument(\n        \"--sqlnet.conds_column_loss_alpha\",\n        type=int, default=0.3, dest=\"model.sqlnet.conds_column_loss_alpha\",\n        help=\"\"\" balance the positive data versus negative data \"\"\",\n    )\n\n    sequence_classification_title = \"ㅁSequence Classification\"\n    group = parser.add_argument_group(f\"{sequence_classification_title}\\n # BERT for Sequence Classification\")\n    group.add_argument(\n        \"--bert_for_seq_cls.pretrained_model_name\",\n        type=str, default=None, dest=\"model.bert_for_seq_cls.pretrained_model_name\",\n        help=\"\"\" A str with the name of a pre-trained model to load selected in the list of (default: None):\n                    . `bert-base-uncased`\n                    . `bert-large-uncased`\n                    . `bert-base-cased`\n                    . `bert-base-multilingual`\n                    . `bert-base-chinese` \"\"\",\n    )\n    group.add_argument(\n        \"--bert_for_seq_cls.dropout\",\n        type=float, default=0.2, dest=\"model.bert_for_seq_cls.dropout\",\n        help=\"\"\" The prob of fc layer dropout \"\"\"\n    )\n\n    group = parser.add_argument_group(f\" # RoBERTa\")\n    group.add_argument(\n        \"--roberta_for_seq_cls.pretrained_model_name\",\n        type=str, default=None, dest=\"model.roberta_for_seq_cls.pretrained_model_name\",\n        help=\"\"\" A str with the name of a pre-trained model to load selected in the list of (default: None):\n                    . `roberta-base`\n                    . `roberta-large` \"\"\",\n    )\n    group.add_argument(\n        \"--roberta_for_seq_cls.dropout\",\n        type=float, default=0.2, dest=\"model.roberta_for_seq_cls.dropout\",\n        help=\"\"\" The prob of fc layer dropout \"\"\"\n    )\n\n    group = parser.add_argument_group(f\"{sequence_classification_title}\\n # Structured Self Attention\")\n    group.add_argument(\n        \"--structured_self_attention.token_encoder\",\n        type=str, default=\"bilstm\", dest=\"model.structured_self_attention.token_encoder\",\n        help=\"\"\" Token encoder type [none|bilstm] \"\"\"\n    )\n    group.add_argument(\n        \"--structured_self_attention.encoding_rnn_hidden_dim\",\n        type=int, default=600, dest=\"model.structured_self_attention.encoding_rnn_hidden_dim\",\n        help=\"\"\" The number of hidden dimension for each token \"\"\"\n    )\n    group.add_argument(\n        \"--structured_self_attention.encoding_rnn_num_layer\",\n        type=int, default=2, dest=\"model.structured_self_attention.encoding_rnn_num_layer\",\n        help=\"\"\" The number of layers of token encoding rnn \"\"\"\n    )\n    group.add_argument(\n        \"--structured_self_attention.encoding_rnn_dropout\",\n        type=float, default=0., dest=\"model.structured_self_attention.encoding_rnn_dropout\",\n        help=\"\"\" The prob of token encoding rnn dropout (between layers) \"\"\"\n    )\n    group.add_argument(\n        \"--structured_self_attention.attention_dim\",\n        type=int, default=350, dest=\"model.structured_self_attention.attention_dim\",\n        help=\"\"\" The number of embedding dimension for attention \"\"\"\n    )\n    group.add_argument(\n        \"--structured_self_attention.num_attention_heads\",\n        type=int, default=30, dest=\"model.structured_self_attention.num_attention_heads\",\n        help=\"\"\" The number of rows for attention (attention heads) \"\"\"\n    )\n    group.add_argument(\n        \"--structured_self_attention.project_dim\",\n        type=int, default=2000, dest=\"model.structured_self_attention.project_dim\",\n        help=\"\"\" The number of bottleneck layer embedding dimension \"\"\"\n    )\n    group.add_argument(\n        \"--structured_self_attention.dropout\",\n        type=float, default=0.5, dest=\"model.structured_self_attention.dropout\",\n        help=\"\"\" The prob of bottleneck-making fnn dropout \"\"\"\n    )\n    group.add_argument(\n        \"--structured_self_attention.penalization_coefficient\",\n        type=float, default=1., dest=\"model.structured_self_attention.penalization_coefficient\",\n        help=\"\"\" The coefficient of penalization term \"\"\"\n    )\n\n    token_classification_title = \"ㅁToken Classification\"\n    group = parser.add_argument_group(f\"{token_classification_title}\\n # BERT for Token Classification\")\n    group.add_argument(\n        \"--bert_for_tok_cls.pretrained_model_name\",\n        type=str, default=None, dest=\"model.bert_for_tok_cls.pretrained_model_name\",\n        help=\"\"\" A str with the name of a pre-trained model to load selected in the list of (default: None):\n                    . `bert-base-uncased`\n                    . `bert-large-uncased`\n                    . `bert-base-cased`\n                    . `bert-base-multilingual`\n                    . `bert-base-chinese` \"\"\",\n    )\n    group.add_argument(\n        \"--bert_for_tok_cls.dropout\",\n        type=float, default=0.2, dest=\"model.bert_for_tok_cls.dropout\",\n        help=\"\"\" The prob of fc layer dropout \"\"\"\n    )\n\n    group = parser.add_argument_group(f\" # RoBERTa\")\n    group.add_argument(\n        \"--roberta_for_tok_cls.pretrained_model_name\",\n        type=str, default=None, dest=\"model.roberta_for_tok_cls.pretrained_model_name\",\n        help=\"\"\" A str with the name of a pre-trained model to load selected in the list of (default: None):\n                    . `roberta-base`\n                    . `roberta-large` \"\"\",\n    )\n    group.add_argument(\n        \"--roberta_for_tok_cls.dropout\",\n        type=float, default=0.2, dest=\"model.roberta_for_tok_cls.dropout\",\n        help=\"\"\" The prob of fc layer dropout \"\"\"\n    )\n\n\ndef nsml_for_internal(parser):\n\n    group = parser.add_argument_group(\"NSML\")\n    group.add_argument(\n        \"--pause\",\n        type=int, default=0, dest=\"nsml.pause\",\n        help=\"\"\" NSML default setting\"\"\"\n    )\n    group.add_argument(\n        \"--iteration\",\n        type=int, default=0, dest=\"nsml.iteration\",\n        help=\"\"\" Start from NSML epoch count\"\"\",\n    )\n\n\ndef trainer(parser):\n\n    group = parser.add_argument_group(\"Trainer\")\n    group.add_argument(\n        \"--num_epochs\",\n        type=int, default=20, dest=\"trainer.num_epochs\",\n        help=\"\"\" The number of training epochs\"\"\",\n    )\n    group.add_argument(\n        \"--patience\",\n        type=int, default=10, dest=\"trainer.early_stopping_threshold\",\n        help=\"\"\" The number of early stopping threshold\"\"\",\n    )\n    group.add_argument(\n        \"--metric_key\",\n        type=str, default=\"em\", dest=\"trainer.metric_key\",\n        help=\"\"\" The key of metric for model's score\"\"\",\n    )\n    group.add_argument(\n        \"--verbose_step_count\",\n        type=int, default=100, dest=\"trainer.verbose_step_count\",\n        help=\"\"\" The number of training verbose\"\"\",\n    )\n    group.add_argument(\n        \"--eval_and_save_step_count\",\n        type=int, default=1, dest=\"trainer.eval_and_save_step_count\",\n        help=\"\"\" The number of save and evaluate step_count (e.g. 'epoch' or 1000)\"\"\",\n    )\n    group.add_argument(\n        \"--save_checkpoint\",\n        type=arg_str2bool, default=True, dest=\"trainer.save_checkpoint\",\n        help=\"\"\" The boolean value of save checkpoint\"\"\",\n    )\n    group.add_argument(\n        \"--log_dir\",\n        type=str, default=\"logs/experiment_1\", dest=\"trainer.log_dir\",\n        help=\"\"\" TensorBoard and Checkpoint log directory\"\"\",\n    )\n\n    group = parser.add_argument_group(\"Gradient\")\n    group.add_argument(\n        \"--grad_max_norm\",\n        type=float, default=None, dest=\"trainer.grad_max_norm\",\n        help=\"\"\" Clips gradient norm of an iterable of parameters. (Default: None)\"\"\")\n\n    group = parser.add_argument_group(\"Optimizer\")\n    group.add_argument(\n        \"--optimizer_type\",\n        type=str, default=\"adam\", dest=\"optimizer.op_type\",\n        help=\"\"\" Optimizer\n    (https://pytorch.org/docs/stable/optim.html#algorithms)\n\n    - adadelta: ADADELTA: An Adaptive Learning Rate Method\n        (https://arxiv.org/abs/1212.5701)\n    - adagrad: Adaptive Subgradient Methods for Online Learning and Stochastic Optimization\n        (http://jmlr.org/papers/v12/duchi11a.html)\n    - adam: Adam: A Method for Stochastic Optimization\n        (https://arxiv.org/abs/1412.6980)\n    - adamw: Adam: Adam algorithm with weight decay fix. (BertAdam)\n    - sparse_adam: Implements lazy version of Adam algorithm suitable for sparse tensors.\n        In this variant, only moments that show up in the gradient get updated,\n        and only those portions of the gradient get applied to the parameters.\n    - adamax: Implements Adamax algorithm (a variant of Adam based on infinity norm).\n    - averaged_sgd: Acceleration of stochastic approximation by averaging\n        (http://dl.acm.org/citation.cfm?id=131098)\n    - rmsprop: Implements RMSprop algorithm.\n        (https://arxiv.org/pdf/1308.0850v5.pdf)\n    - rprop: Implements the resilient backpropagation algorithm.\n    - sgd: Implements stochastic gradient descent (optionally with momentum).\n        Nesterov momentum: (http://www.cs.toronto.edu/~hinton/absps/momentum.pdf)\n\n    [adadelta|adagrad|adam|adamw|sparse_adam|adamax|averaged_sgd|rmsprop|rprop|sgd]\"\"\",\n    )\n    group.add_argument(\n        \"--learning_rate\",\n        type=float, default=0.5, dest=\"optimizer.learning_rate\",\n        help=\"\"\"\\\n    Starting learning rate.\n    Recommended settings: sgd = 1, adagrad = 0.1, adadelta = 1, adam = 0.001 \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # Adadelta\")\n    group.add_argument(\n        \"--adadelta.rho\",\n        type=float, default=0.9, dest=\"optimizer.adadelta.rho\",\n        help=\"\"\"\\\n    coefficient used for computing a running average of squared gradients\n    Default: 0.9 \"\"\",\n    )\n    group.add_argument(\n        \"--adadelta.eps\",\n        type=float, default=1e-6, dest=\"optimizer.adadelta.eps\",\n        help=\"\"\"\\\n    term added to the denominator to improve numerical stability\n    Default: 1e-6 \"\"\",\n    )\n    group.add_argument(\n        \"--adadelta.weight_decay\",\n        type=float,\n        default=0,\n        dest=\"optimizer.adadelta.weight_decay\",\n        help=\"\"\"\\\n    weight decay (L2 penalty)\n    Default: 0 \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # Adagrad\")\n    group.add_argument(\n        \"--adagrad.lr_decay\",\n        type=float, default=0, dest=\"optimizer.adagrad.lr_decay\",\n        help=\"\"\"\\\n    learning rate decay\n    Default: 0 \"\"\",\n    )\n    group.add_argument(\n        \"--adagrad.weight_decay\",\n        type=float,\n        default=0,\n        dest=\"optimizer.adagrad.weight_decay\",\n        help=\"\"\"\\\n    weight decay (L2 penalty)\n    Default: 0 \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # Adam\")\n    group.add_argument(\n        \"--adam.betas\", nargs=\"+\",\n        type=float, default=[0.9, 0.999], dest=\"optimizer.adam.betas\",\n        help=\"\"\"\\\n    coefficients used for computing running averages of gradient and its square\n    Default: (0.9, 0.999) \"\"\",\n    )\n    group.add_argument(\n        \"--adam.eps\",\n        type=float, default=1e-8, dest=\"optimizer.adam.eps\",\n        help=\"\"\"\\\n    term added to the denominator to improve numerical stability\n    Default: 1e-8 \"\"\",\n    )\n    group.add_argument(\n        \"--adam.weight_decay\",\n        type=float,\n        default=0,\n        dest=\"optimizer.adam.weight_decay\",\n        help=\"\"\"\\\n    weight decay (L2 penalty)\n    Default: 0 \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # AdamW\")\n    group.add_argument(\n        \"--adamw.betas\", nargs=\"+\",\n        type=float, default=[0.9, 0.999], dest=\"optimizer.adamw.betas\",\n        help=\"\"\"\\\n    coefficients used for computing running averages of gradient and its square\n    Default: (0.9, 0.999) \"\"\",\n    )\n    group.add_argument(\n        \"--adamw.eps\",\n        type=float, default=1e-6, dest=\"optimizer.adamw.eps\",\n        help=\"\"\"\\\n    term added to the denominator to improve numerical stability\n    Default: 1e-8 \"\"\",\n    )\n    group.add_argument(\n        \"--adamw.weight_decay\",\n        type=float,\n        default=0.0,\n        dest=\"optimizer.adamw.weight_decay\",\n        help=\"\"\"\\\n    weight decay (L2 penalty)\n    Default: 0 \"\"\",\n    )\n    group.add_argument(\n        \"--adamw.correct_bias\",\n        type=arg_str2bool,\n        default=True,\n        dest=\"optimizer.adamw.correct_bias\",\n        help=\"\"\"\\\n    can be set to False to avoid correcting bias in Adam (e.g. like in Bert TF repository).\n    Default: True \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # SparseAdam\")\n    group.add_argument(\n        \"--sparse_adam.betas\", nargs=\"+\",\n        type=float, default=[0.9, 0.999], dest=\"optimizer.sparse_adam.betas\",\n        help=\"\"\"\\\n    coefficients used for computing running averages of gradient and its square\n    Default: (0.9, 0.999) \"\"\",\n    )\n    group.add_argument(\n        \"--sparse_adam.eps\",\n        type=float, default=1e-8, dest=\"optimizer.sparse_adam.eps\",\n        help=\"\"\"\\\n    term added to the denominator to improve numerical stability\n    Default: 1e-8 \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # Adamax\")\n    group.add_argument(\n        \"--adamax.betas\", nargs=\"+\",\n        type=float, default=[0.9, 0.999], dest=\"optimizer.adamax.betas\",\n        help=\"\"\"\\\n    coefficients used for computing running averages of gradient and its square.\n    Default: (0.9, 0.999) \"\"\",\n    )\n    group.add_argument(\n        \"--adamax.eps\",\n        type=float, default=1e-8, dest=\"optimizer.adamax.eps\",\n        help=\"\"\"\\\n    term added to the denominator to improve numerical stability.\n    Default: 1e-8 \"\"\",\n    )\n    group.add_argument(\n        \"--adamax.weight_decay\",\n        type=float, default=0, dest=\"optimizer.adamax.weight_decay\",\n        help=\"\"\"\\\n    weight decay (L2 penalty)\n    Default: 0 \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # ASGD (Averaged Stochastic Gradient Descent)\")\n    group.add_argument(\n        \"--averaged_sgd.lambd\",\n        type=float, default=1e-4, dest=\"optimizer.averaged_sgd.lambd\",\n        help=\"\"\"\\\n    decay term\n    Default: 1e-4 \"\"\",\n    )\n    group.add_argument(\n        \"--averaged_sgd.alpha\",\n        type=float, default=0.75, dest=\"optimizer.averaged_sgd.alpha\",\n        help=\"\"\"\\\n    power for eta update\n    Default: 0.75 \"\"\",\n    )\n    group.add_argument(\n        \"--averaged_sgd.t0\",\n        type=float, default=1e6, dest=\"optimizer.averaged_sgd.t0\",\n        help=\"\"\"\\\n    point at which to start averaging\n    Default: 1e6 \"\"\",\n    )\n    group.add_argument(\n        \"--averaged_sgd.weight_decay\",\n        type=float, default=0, dest=\"optimizer.averaged_sgd.weight_decay\",\n        help=\"\"\"\\\n    weight decay (L2 penalty)\n    Default: 0 \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # RMSprop\")\n    group.add_argument(\n        \"--rmsprop.momentum\",\n        type=float, default=0, dest=\"optimizer.rmsprop.momentum\",\n        help=\"\"\"\\\n    momentum factor\n    Default: 0 \"\"\",\n    )\n    group.add_argument(\n        \"--rmsprop.alpha\",\n        type=float, default=0.99, dest=\"optimizer.rmsprop.alpha\",\n        help=\"\"\"\\\n    smoothing constant\n    Default: 0.99 \"\"\",\n    )\n    group.add_argument(\n        \"--rmsprop.eps\",\n        type=float, default=1e-8, dest=\"optimizer.rmsprop.eps\",\n        help=\"\"\"\\\n    term added to the denominator to improve numerical stability.\n    Default: 1e-8 \"\"\",\n    )\n    group.add_argument(\n        \"--rmsprop.centered\",\n        type=arg_str2bool, default=False, dest=\"optimizer.rmsprop.centered\",\n        help=\"\"\"\\\n    if True, compute the centered RMSProp,\n    the gradient is normalized by an estimation of its variance\n    Default: False \"\"\",\n    )\n    group.add_argument(\n        \"--rmsprop.weight_decay\",\n        type=float, default=0, dest=\"optimizer.rmsprop.weight_decay\",\n        help=\"\"\"\\\n    weight decay (L2 penalty)\n    Default: 0 \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # SGD (Stochastic Gradient Descent)\")\n    group.add_argument(\n        \"--sgd.momentum\",\n        type=float, default=0, dest=\"optimizer.sgd.momentum\",\n        help=\"\"\"\\\n    momentum factor\n    Default: 0 \"\"\",\n    )\n    group.add_argument(\n        \"--sgd.dampening\",\n        type=float, default=0, dest=\"optimizer.sgd.dampening\",\n        help=\"\"\"\\\n    dampening for momentum\n    Default: 0 \"\"\",\n    )\n    group.add_argument(\n        \"--sgd.nesterov\",\n        type=arg_str2bool, default=False, dest=\"optimizer.sgd.nesterov\",\n        help=\"\"\"\\\n    enables Nesterov momentum\n    Default: False \"\"\",\n    )\n    group.add_argument(\n        \"--sgd.weight_decay\",\n        type=float, default=0, dest=\"optimizer.sgd.weight_decay\",\n        help=\"\"\"\\\n    weight decay (L2 penalty)\n    Default: 0 \"\"\",\n    )\n\n    group = parser.add_argument_group(\"Learning Rate Scheduler\")\n    group.add_argument(\n        \"--lr_scheduler_type\",\n        type=str, default=None, dest=\"optimizer.lr_scheduler_type\",\n        help=\"\"\"Learning Rate Schedule\n    (https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate) \\n\n\n    - lambda: Sets the learning rate of each parameter group to the\n        initial lr times a given function.\n    - step: Sets the learning rate of each parameter group to the\n        initial lr decayed by gamma every step_size epochs.\n    - multi_step: Set the learning rate of each parameter group to\n        the initial lr decayed by gamma once the number of epoch\n        reaches one of the milestones.\n    - exponential: Set the learning rate of each parameter group to\n        the initial lr decayed by gamma every epoch.\n    - cosine: Set the learning rate of each parameter group using\n        a cosine annealing schedule, where ηmax is set to the initial\n        lr and Tcur is the number of epochs since the last restart in SGDR:\n        SGDR: Stochastic Gradient Descent with Warm Restarts\n        (https://arxiv.org/abs/1608.03983)\n    When last_epoch=-1, sets initial lr as lr.\n\n    - reduce_on_plateau: Reduce learning rate when a metric has\n        stopped improving. Models often benefit from reducing the\n        learning rate by a factor of 2-10 once learning stagnates.\n        This scheduler reads a metrics quantity and if no improvement\n        is seen for a ‘patience’ number of epochs, the learning rate is reduced.\n    - warmup_constant: Linear warmup and then constant.\n        Linearly increases learning rate schedule from 0 to 1 over `warmup_steps` training steps.\n        Keeps learning rate schedule equal to 1. after warmup_steps.\n    - warmup_linear: Linear warmup and then linear decay.\n        Linearly increases learning rate from 0 to 1 over `warmup_steps` training steps.\n        Linearly decreases learning rate from 1. to 0. over remaining `t_total - warmup_steps` steps.\n    - warmup_consine: Linear warmup and then cosine decay.\n        Linearly increases learning rate from 0 to 1 over `warmup_steps` training steps.\n        Decreases learning rate from 1. to 0. over remaining `t_total - warmup_steps` steps following a cosine curve.\n        If `cycles` (default=0.5) is different from default, learning rate follows cosine function after warmup.\n    - warmup_consine_with_hard_restart: Linear warmup and then cosine cycles with hard restarts.\n        Linearly increases learning rate from 0 to 1 over `warmup_steps` training steps.\n        If `cycles` (default=1.) is different from default, learning rate follows `cycles` times a cosine decaying\n        learning rate (with hard restarts).\n\n    [step|multi_step|exponential|reduce_on_plateau|cosine|\n        warmup_constant|warmup_linear|warmup_consine|warmup_consine_with_hard_restart]\n        \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # StepLR\")\n    group.add_argument(\n        \"--step.step_size\",\n        type=int, default=1, dest=\"optimizer.step.step_size\",\n        help=\"\"\"\\\n    Period of learning rate decay.\n    Default: 1\"\"\",\n    )\n    group.add_argument(\n        \"--step.gamma\",\n        type=float, default=0.1, dest=\"optimizer.step.gamma\",\n        help=\"\"\"\\\n    Multiplicative factor of learning rate decay.\n    Default: 0.1. \"\"\",\n    )\n    group.add_argument(\n        \"--step.last_epoch\",\n        type=int, default=-1, dest=\"optimizer.step.last_epoch\",\n        help=\"\"\"\\\n    The index of last epoch.\n    Default: -1. \"\"\"\n    )\n\n    group = parser.add_argument_group(\"  # MultiStepLR\")\n    group.add_argument(\n        \"--multi_step.milestones\", nargs=\"+\",\n        type=int, dest=\"optimizer.multi_step.milestones\",\n        help=\"\"\"\\\n    List of epoch indices. Must be increasing\n    list of int\"\"\",\n    )\n    group.add_argument(\n        \"--multi_step.gamma\",\n        type=float, default=0.1, dest=\"optimizer.multi_step.gamma\",\n        help=\"\"\"\\\n    Multiplicative factor of learning rate decay.\n    Default: 0.1. \"\"\",\n    )\n    group.add_argument(\n        \"--multi_step.last_epoch\",\n        type=int, default=-1, dest=\"optimizer.multi_step.last_epoch\",\n        help=\"\"\"\\\n    The index of last epoch.\n    Default: -1. \"\"\"\n    )\n\n    group = parser.add_argument_group(\"  # ExponentialLR\")\n    group.add_argument(\n        \"--exponential.gamma\",\n        type=float, default=0.1, dest=\"optimizer.exponential.gamma\",\n        help=\"\"\"\\\n    Multiplicative factor of learning rate decay.\n    Default: 0.1. \"\"\",\n    )\n    group.add_argument(\n        \"--exponential.last_epoch\",\n        type=int, default=-1, dest=\"optimizer.exponential.last_epoch\",\n        help=\"\"\"\\\n    The index of last epoch.\n    Default: -1. \"\"\"\n    )\n\n    group = parser.add_argument_group(\"  # CosineAnnealingLR\")\n    group.add_argument(\n        \"--cosine.T_max\",\n        type=int, default=50, dest=\"optimizer.cosine.T_max\",\n        help=\"\"\"\\\n    Maximum number of iterations.\n    Default: 50\"\"\",\n    )\n    group.add_argument(\n        \"--cosine.eta_min\",\n        type=float, default=0, dest=\"optimizer.cosine.eta_min\",\n        help=\"\"\"\\\n    Minimum learning rate.\n    Default: 0. \"\"\",\n    )\n    group.add_argument(\n        \"--cosine.last_epoch\",\n        type=int, default=-1, dest=\"optimizer.cosine.last_epoch\",\n        help=\"\"\"\\\n    The index of last epoch.\n    Default: -1. \"\"\"\n    )\n\n    group = parser.add_argument_group(\"  # ReduceLROnPlateau\")\n    group.add_argument(\n        \"--reduce_on_plateau.factor\",\n        type=float, default=0.1, dest=\"optimizer.reduce_on_plateau.factor\",\n        help=\"\"\" Factor by which the learning rate will be reduced. new_lr = lr * factor. Default: 0.1. \"\"\",\n    )\n    group.add_argument(\n        \"--reduce_on_plateau.mode\",\n        type=str, default=\"min\", dest=\"optimizer.reduce_on_plateau.mode\",\n        help=\"\"\"\\\n    One of `min`, `max`. In `min` mode, lr will\n    be reduced when the quantity monitored has stopped\n    decreasing; in `max` mode it will be reduced when the\n    quantity monitored has stopped increasing.\n    Default: 'min'. \"\"\",\n    )\n    group.add_argument(\n        \"--reduce_on_plateau.patience\",\n        type=int, default=10, dest=\"optimizer.reduce_on_plateau.patience\",\n        help=\"\"\"\\\n    Number of epochs with no improvement after which learning rate will be reduced.\n    Default: 10. \"\"\",\n    )\n    group.add_argument(\n        \"--reduce_on_plateau.threshold\",\n        type=float, default=1e-4, dest=\"optimizer.reduce_on_plateau.threshold\",\n        help=\"\"\"\\\n    Threshold for measuring the new optimum, to only focus on significant changes.\n    Default: 1e-4 \"\"\",\n    )\n    group.add_argument(\n        \"--reduce_on_plateau.threshold_mode\",\n        type=str, default=\"rel\", dest=\"optimizer.reduce_on_plateau.threshold_mode\",\n        help=\"\"\"\\\n    One of rel, abs. In rel mode, dynamic_threshold = best * ( 1 + threshold ) in ‘max’ mode or\n    best * ( 1 - threshold ) in min mode. In abs mode, dynamic_threshold = best + threshold\n    in max mode or best - threshold in min mode.\n    Default: ‘rel’. \"\"\"\n    )\n    group.add_argument(\n        \"--reduce_on_plateau.cooldown\",\n        type=int, default=0, dest=\"optimizer.reduce_on_plateau.cooldown\",\n        help=\"\"\"\\\n    Number of epochs to wait before resuming normal operation after lr has been reduced.\n    Default: 0. \"\"\",\n    )\n    group.add_argument(\n        \"--reduce_on_plateau.min_lr\", nargs=\"+\",\n        type=float, default=0, dest=\"optimizer.reduce_on_plateau.min_lr\",\n        help=\"\"\"\\\n    A scalar or a list of scalars. A lower bound on the learning rate of\n    all param groups or each group respectively.\n    Default: 0. \"\"\",\n    )\n    group.add_argument(\n        \"--reduce_on_plateau.eps\",\n        type=float, default=1e-8, dest=\"optimizer.reduce_on_plateau.eps\",\n        help=\"\"\"\\\n    Minimal decay applied to lr. If the difference between new and\n    old lr is smaller than eps, the update is ignored.\n    Default: 1e-8 \"\"\",\n    )\n\n    group = parser.add_argument_group(\"  # WarmUp Constant\")\n    group.add_argument(\n        \"--warmup_constant.warmup_steps\",\n        type=int, default=None, dest=\"optimizer.warmup_constant.warmup_steps\",\n        help=\"\"\"\\\n    The number of steps to increase the learning rate from 0 to 1.\n    Default: None \"\"\",\n    )\n    group.add_argument(\n        \"--warmup_constant.last_epoch\",\n        type=int, default=-1, dest=\"optimizer.warmup_constant.last_epoch\",\n        help=\"\"\"\\\n    The index of last epoch.\n    Default: -1. \"\"\"\n    )\n\n    group = parser.add_argument_group(\"  # WarmUp Linear\")\n    group.add_argument(\n        \"--warmup_linear.warmup_steps\",\n        type=int, default=None, dest=\"optimizer.warmup_linear.warmup_steps\",\n        help=\"\"\"\\\n    The number of steps to increase the learning rate from 0 to 1.\n    Default: None \"\"\",\n    )\n    group.add_argument(\n        \"--warmup_linear_warmup_proportion\",\n        type=float, default=None, dest=\"optimizer.warmup_linear.warmup_proportion\",\n        help=\"\"\"\\\n    The number of steps (proportion of total_step) to increase the learning rate from 0 to 1.\n    Default: None \"\"\",\n    )\n    group.add_argument(\n        \"--warmup_linear.last_epoch\",\n        type=int, default=-1, dest=\"optimizer.warmup_linear.last_epoch\",\n        help=\"\"\"\\\n    The index of last epoch.\n    Default: -1. \"\"\"\n    )\n\n    group = parser.add_argument_group(\"  # WarmUp Cosine\")\n    group.add_argument(\n        \"--warmup_cosine.warmup_steps\",\n        type=int, default=None, dest=\"optimizer.warmup_cosine.warmup_steps\",\n        help=\"\"\"\\\n    The number of steps to increase the learning rate from 0 to 1.\n    Default: None \"\"\",\n    )\n    group.add_argument(\n        \"--warmup_cosine.last_epoch\",\n        type=int, default=-1, dest=\"optimizer.warmup_cosine.last_epoch\",\n        help=\"\"\"\\\n    The index of last epoch.\n    Default: -1. \"\"\"\n    )\n    group.add_argument(\n        \"--warmup_cosine.cycles\",\n        type=float, default=.5, dest=\"optimizer.warmup_cosine.cycles\",\n        help=\"\"\"\\\n    If `cycles` is different from default, learning rate follows cosine function after warmup\n    Default: .5 \"\"\"\n    )\n\n    group = parser.add_argument_group(\"  # WarmUp Cosine with hard restarts\")\n    group.add_argument(\n        \"--warmup_cosine_with_hard_restart.warmup_steps\",\n        type=int, default=None, dest=\"optimizer.warmup_cosine_with_hard_restart.warmup_steps\",\n        help=\"\"\"\\\n    The number of steps to increase the learning rate from 0 to 1.\n    Default: None \"\"\",\n    )\n    group.add_argument(\n        \"--warmup_cosine_with_hard_restart.last_epoch\",\n        type=int, default=-1, dest=\"optimizer.warmup_cosine_with_hard_restart.last_epoch\",\n        help=\"\"\"\\\n    The index of last epoch.\n    Default: -1. \"\"\"\n    )\n    group.add_argument(\n        \"--warmup_cosine_with_hard_restart.cycles\",\n        type=float, default=1., dest=\"optimizer.warmup_cosine_with_hard_restart.cycles\",\n        help=\"\"\"\\\n    If `cycles` is different from default, learning rate follows cosine_with_hard_restart function after warmup\n    Default: 1. \"\"\"\n    )\n\n    group = parser.add_argument_group(\"Exponential Moving Average\")\n    group.add_argument(\n        \"--ema\",\n        type=float, default=None, dest=\"optimizer.exponential_moving_average\",\n        help=\"\"\"\\\n    Exponential Moving Average\n    Default: None (don't use)\"\"\",\n    )\n\n\ndef base_config(parser):\n\n    group = parser.add_argument_group(\"Base Config\")\n    group.add_argument(\n        \"--base_config\",\n        type=str, default=None, dest=\"base_config\",\n        help=f\"\"\"\\\n    Use pre-defined base_config:\n    {_get_define_config()}\n\n\n    * CoNLL 2003:\n    {_get_define_config(category='conll2003')}\n\n    * GLUE:\n    {_get_define_config(category='glue')}\n\n    * KorQuAD:\n    {_get_define_config(category='korquad')}\n\n    * SQuAD:\n    {_get_define_config(category='squad')}\n\n    * WikiSQL:\n    {_get_define_config(category='wikisql')}\n    \"\"\",\n    )\n\n\ndef _get_define_config(category=None, config_dir=\"base_config\"):\n    if category is not None:\n        config_dir = os.path.join(config_dir, category)\n\n    config_files = [\n        config_path.replace(\".json\", \"\")\n        for config_path in os.listdir(config_dir)\n        if config_path.endswith(\".json\")\n    ]\n\n    if category is not None:\n        config_files = [category + \"/\" + fname for fname in config_files]\n    return config_files\n\n\ndef evaluate(parser):\n\n    group = parser.add_argument_group(\"Run evaluate\")\n    group.add_argument(\n        \"data_file_path\",\n        type=str,\n        help=\" Path to the file containing the evaluation data\"\n    )\n    group.add_argument(\"checkpoint_path\", type=str, help=\"Path to an checkpoint trained model\")\n    group.add_argument(\n        \"--infer\",\n        default=None, dest=\"inference_latency\", type=int,\n        help=\"\"\" Evaluate with inference-latency with maximum value (ms)\"\"\",\n    )\n    group.add_argument(\n        \"--prev_cuda_device_id\",\n        type=int, default=0, dest=\"prev_cuda_device_id\",\n        help=\"\"\" Previous cuda device id (need to mapping)\"\"\",\n    )\n\n\ndef predict(parser):\n\n    group = parser.add_argument_group(\"Run inference\")\n    group.add_argument(\n        \"checkpoint_path\",\n        type=str,\n        help=\" Path to an checkpoint trained model\")\n    group.add_argument(\n        \"-i\", \"--interactive\",\n        default=False, dest=\"interactive\", action=\"store_true\",\n        help=\"\"\" Interactive Mode \"\"\",\n    )\n    group.add_argument(\n        \"--prev_cuda_device_id\",\n        type=int, default=0, dest=\"prev_cuda_device_id\",\n        help=\"\"\" Previous cuda device id (need to mapping)\"\"\",\n    )\n\n    group.add_argument(\"--question\",\n                       type=str, dest=\"question\",\n                       help=\"\"\" Input Question (required)\"\"\")\n\n    group = parser.add_argument_group(\" # Reading Comprehension\")\n    group.add_argument(\"--context\",\n                       type=str, dest=\"context\",\n                       help=\"\"\" Input Context \"\"\")\n\n    group = parser.add_argument_group(\" # Semantic Parsing\")\n    group.add_argument(\"--column\", nargs=\"+\",\n                       type=str, dest=\"column\",\n                       help=\"\"\" Input Database Columns \"\"\")\n    group.add_argument(\"--db_path\",\n                       type=str, dest=\"db_path\",\n                       help=\"\"\" Input Database file path \"\"\")\n    group.add_argument(\"--table_id\",\n                       type=str, dest=\"table_id\",\n                       help=\"\"\" Input Database Table Id \"\"\")\n\n    group = parser.add_argument_group(\" # Document Retrieval\")\n    group.add_argument(\"--doc_path\",\n                       type=str, dest=\"doc_path\",\n                       help=\"\"\" Document file Path \"\"\")\n\n    group.add_argument(\n        \"--retrieval\",\n        type=str, default=None, dest=\"doc_retrieval\",\n        help=\"\"\" Document Retrieval Model [tfidf] \"\"\",\n    )\n    group.add_argument(\"--k\",\n                       type=int, default=1, dest=\"top_k\",\n                       help=\"\"\" Return Top K results \"\"\")\n\n    group = parser.add_argument_group(\" # Sequence/Token Classification\")\n    group.add_argument(\"--sequence\",\n                       type=str, dest=\"sequence\",\n                       help=\"\"\" Input Sequence \"\"\")\n\n\ndef machine(parser):\n\n    group = parser.add_argument_group(\"Machine Config\")\n    group.add_argument(\n        \"--machine_config\",\n        type=str, default=None, dest=\"machine_config\",\n        help=f\"\"\"\\\n    Use pre-defined machine_config (.json)\n\n    {_get_define_config(config_dir=\"./machine_config\")}\n    \"\"\")\n\n# fmt: on\n"
  },
  {
    "path": "claf/config/namespace.py",
    "content": "\nimport argparse\n\n\nclass NestedNamespace(argparse.Namespace):\n    \"\"\"\n    Nested Namespace\n    (Simple class used by default by parse_args() to create\n     an object holding attributes and return it.)\n    \"\"\"\n\n    def __setattr__(self, name, value):\n        if \".\" in name:\n            group, name = name.split(\".\", 1)\n            namespace = getattr(self, group, NestedNamespace())\n            setattr(namespace, name, value)\n            self.__dict__[group] = namespace\n        else:\n            self.__dict__[name] = value\n\n    def delete_unselected(self, namespace, excepts=[]):\n        delete_keys = []\n        for key in namespace.__dict__:\n            if key not in excepts:\n                delete_keys.append(key)\n\n        for key in delete_keys:\n            delattr(namespace, key)\n\n    def overwrite(self, config):\n        def _overwrite(namespace, d):\n            for k, v in d.items():\n                if type(v) == dict:\n                    nested_namespace = getattr(namespace, k, None)\n                    if nested_namespace is None:\n                        nested_namespace = NestedNamespace()\n                        nested_namespace.load_from_json(v)\n\n                        setattr(namespace, k, nested_namespace)\n                    else:\n                        _overwrite(nested_namespace, v)\n                else:\n                    setattr(namespace, k, v)\n            return namespace\n\n        return _overwrite(self, config)\n\n    def load_from_json(self, dict_data):\n\n        name_value_pairs = []\n\n        def make_key_value_pairs(d, prefix=\"\"):\n            for k, v in d.items():\n                if type(v) == dict:\n                    next_prefix = k\n                    if prefix != \"\":\n                        next_prefix = f\"{prefix}.{k}\"\n                    make_key_value_pairs(v, prefix=next_prefix)\n                else:\n                    key_with_prefix = k\n                    if prefix != \"\":\n                        key_with_prefix = f\"{prefix}.{k}\"\n                    name_value_pairs.append((key_with_prefix, v))\n\n        make_key_value_pairs(dict_data)\n        for (name, value) in name_value_pairs:\n            self.__setattr__(name, value)\n"
  },
  {
    "path": "claf/config/pattern.py",
    "content": "class Singleton(type):\n    \"\"\"\n    Design Pattern Base\n\n    Singleton Meta Class\n    the singleton pattern is a software design pattern that restricts the\n    instantiation of a class to one object.\n    \"\"\"\n\n    _instances = {}\n\n    def __call__(cls, *args, **kwargs):\n        if cls not in cls._instances:\n            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)\n        return cls._instances[cls]\n"
  },
  {
    "path": "claf/config/registry.py",
    "content": "\nimport logging\n\nfrom claf.config.pattern import Singleton\n\nlogger = logging.getLogger(__name__)\n\n\nclass Registry(metaclass=Singleton):\n    \"\"\"\n    Registry class (Singleton)\n    \"\"\"\n\n    def __init__(self):\n        self._name_to_subclass = {\n            \"component\": {},\n            \"reader\": {},\n            \"machine\": {},\n            \"model\": {},\n            \"token\": {},\n        }\n\n    def add(self, name, obj):\n        component_type, component_name = self._split_component_type_and_name(name)\n\n        if component_name in self._name_to_subclass[component_type]:\n            logger.info(\n                f\"{component_name} is already included in Registry. It override with {obj}.\"\n            )\n        self._name_to_subclass[component_type][component_name] = obj\n\n    def get(self, name):\n        component_type, component_name = self._split_component_type_and_name(name)\n\n        if component_type not in self._name_to_subclass:\n            raise ValueError(f\"There is no {component_type} in _name_to_subclass.\")\n        if component_name not in self._name_to_subclass[component_type]:\n            raise ValueError(f\"There is no {component_name} object in {component_type}.\")\n        return self._name_to_subclass[component_type][component_name]\n\n    def _split_component_type_and_name(self, name):\n        if \":\" in name:\n            names = name.split(\":\")\n            return names[0], names[1]\n        else:\n            raise ValueError(\"do not recognize component_type.\")\n"
  },
  {
    "path": "claf/config/utils.py",
    "content": "\nfrom argparse import Namespace\nimport copy\nimport json\nimport os\n\nimport jsbeautifier\nimport numpy as np\nimport random\nimport torch\nimport yaml\n\n\n_CONFIG_EXTENSIONS = [\".json\", \".yaml\"]\n\n\ndef add_config_extension(file_path):\n    for ext in _CONFIG_EXTENSIONS:\n        if ext in file_path:\n            return file_path\n\n        full_path = file_path + ext\n        if os.path.exists(full_path):\n            return full_path\n\n    raise ValueError(f\"{file_path} is not valid extensions {_CONFIG_EXTENSIONS}\")\n\n\ndef read_config(file_path):\n    if file_path.endswith(\".json\"):\n        with open(file_path, \"r\") as f:\n            return json.load(f)\n\n    if file_path.endswith(\".yaml\"):\n        with open(file_path, \"r\") as f:\n            return yaml.load(f)\n\n    raise ValueError(f\"{file_path} is not valid extensions {_CONFIG_EXTENSIONS}\")\n\n\ndef pretty_json_dumps(inputs):\n    js_opts = jsbeautifier.default_options()\n    js_opts.indent_size = 2\n\n    inputs = remove_none(inputs)\n    return jsbeautifier.beautify(json.dumps(inputs))\n\n\ndef remove_none(obj):\n    if isinstance(obj, (list, tuple, set)):\n        return type(obj)(remove_none(x) for x in obj if x is not None)\n    elif isinstance(obj, dict):\n        return type(obj)(\n            (remove_none(k), remove_none(v))\n            for k, v in obj.items()\n            if k is not None and v is not None\n        )\n    else:\n        return obj\n\n\ndef convert_config2dict(config):\n    config_dict = copy.deepcopy(config)\n    if isinstance(config_dict, Namespace):\n        config_dict = vars(config_dict)\n\n    for k, v in config_dict.items():\n        if isinstance(v, Namespace):\n            config_dict[k] = convert_config2dict(v)\n    return config_dict\n\n\ndef set_global_seed(seed=21):\n    # Tensorflow\n    try:\n        import tensorflow as tf\n    except ImportError:\n        pass\n    else:\n        tf.set_random_seed(seed)\n\n    # PyTorch\n    torch.manual_seed(seed)\n    if torch.cuda.is_available():\n        torch.cuda.manual_seed_all(seed)\n\n    # NumPy\n    np.random.seed(seed)\n\n    # Python\n    random.seed(seed)\n"
  },
  {
    "path": "claf/data/__init__.py",
    "content": ""
  },
  {
    "path": "claf/data/collate.py",
    "content": "\nfrom overrides import overrides\n\nimport torch\nfrom torch.autograd import Variable\n\nfrom claf.data import utils\n\n\nclass PadCollator:\n    \"\"\"\n    Collator apply pad and make tensor\n    Minimizes amount of padding needed while producing mini-batch.\n\n    * Kwargs:\n        cuda_device_id: tensor assign to cuda device id\n            Default is None (CPU)\n        skip_keys: skip to make tensor\n    \"\"\"\n\n    def __init__(self, cuda_device_id=None, pad_value=0, skip_keys=[\"text\"]):\n        self.cuda_device_id = cuda_device_id\n        self.pad_value = pad_value\n        self.skip_keys = skip_keys\n\n    def __call__(self, features, labels):\n        self.collate(features, pad_value=self.pad_value)\n        self.collate(labels, apply_pad=False, pad_value=self.pad_value)\n\n        return utils.make_batch(features, labels)\n\n    def collate(self, datas, apply_pad=True, pad_value=0):\n        for data_name, data in datas.items():\n            if isinstance(data, dict):\n                for key, value in data.items():\n                    data[key] = self._collate(\n                        value, apply_pad=apply_pad, token_name=key, pad_value=pad_value)\n            else:\n                datas[data_name] = self._collate(data, apply_pad=apply_pad)\n\n    def _collate(self, value, apply_pad=True, token_name=None, pad_value=0):\n        if apply_pad:\n            value = self._apply_pad(value, token_name=token_name, pad_value=pad_value)\n        return self._make_tensor(value)\n\n    def _apply_pad(self, value, token_name=None, pad_value=0):\n        return utils.padding_tokens(value, token_name=token_name, pad_value=pad_value)\n\n    def _make_tensor(self, value):\n        if not isinstance(value, torch.Tensor):\n            value_type = utils.get_token_type(value)\n            if value_type == int:\n                value = torch.LongTensor(value)\n            else:\n                value = torch.FloatTensor(value)\n\n        value = Variable(value, requires_grad=False)\n        if self.cuda_device_id is not None:\n            value = value.cuda(self.cuda_device_id)\n        return value\n\n\nclass FeatLabelPadCollator(PadCollator):\n    \"\"\"\n    Collator apply pad and make tensor\n    Minimizes amount of padding needed while producing mini-batch.\n\n    FeatLabelPadCollator allows applying pad to not only features, but also labels.\n\n    * Kwargs:\n        cuda_device_id: tensor assign to cuda device id\n            Default is None (CPU)\n        skip_keys: skip to make tensor\n    \"\"\"\n\n    @overrides\n    def __call__(self, features, labels, apply_pad_labels=(), apply_pad_values=()):\n        self.collate(features)\n        self.collate(labels, apply_pad=False,\n                     apply_pad_labels=apply_pad_labels, apply_pad_values=apply_pad_values)\n\n        return utils.make_batch(features, labels)\n\n    @overrides\n    def collate(self, datas, apply_pad=True, apply_pad_labels=(), apply_pad_values=()):\n        for data_name, data in datas.items():\n            if not apply_pad and data_name in apply_pad_labels:\n                _apply_pad = True  # ignore apply_pad\n                pad_value = apply_pad_values[apply_pad_labels.index(data_name)]\n            else:\n                _apply_pad = apply_pad\n                pad_value = 0\n\n            if isinstance(data, dict):\n                for key, value in data.items():\n                    data[key] = self._collate(\n                        value, apply_pad=_apply_pad, token_name=key, pad_value=pad_value)\n            else:\n                datas[data_name] = self._collate(data, apply_pad=_apply_pad, pad_value=pad_value)\n"
  },
  {
    "path": "claf/data/data_handler.py",
    "content": "\nimport logging\nimport pickle\nimport os\nfrom pathlib import Path, PosixPath\nimport shutil\nimport tempfile\n\nimport msgpack\nimport requests\nfrom tqdm import tqdm\n\nfrom claf import nsml\n\nlogger = logging.getLogger(__name__)\n\n\nclass CachePath:\n    if nsml.IS_ON_NSML:\n        ROOT = Path(\"./claf_cache\")\n    else:\n        ROOT = Path.home() / \".claf_cache\"\n    DATASET = ROOT / \"dataset\"\n    MACHINE = ROOT / \"machine\"\n    PRETRAINED_VECTOR = ROOT / \"pretrained_vector\"\n    TOKEN_COUNTER = ROOT / \"token_counter\"\n    VOCAB = ROOT / \"vocab\"\n\n\nclass DataHandler:\n    \"\"\"\n    DataHandler with CachePath\n\n    - read (from_path, from_http)\n    - dump (.msgpack or .pkl (pickle))\n    - load\n    \"\"\"\n\n    def __init__(self, cache_path=CachePath.ROOT):\n        if type(cache_path) != PosixPath:\n            raise ValueError(f\"cache_path type is PosixPath (use pathlib.Path). not f{type(cache_path)}\")\n\n        self.cache_path = cache_path\n        cache_path.mkdir(parents=True, exist_ok=True)\n\n    def convert_cache_path(self, path):\n        cache_data_path = self.cache_path / Path(path)\n        return cache_data_path\n\n    def read_embedding(self, file_path):\n        raise NotImplementedError()\n\n    def read(self, file_path, encoding=\"utf-8\", return_path=False):\n        if file_path.startswith(\"http\"):\n           file_path = self._read_from_http(file_path, encoding)\n\n        path = Path(file_path)\n        if path.exists():\n            if return_path:\n                return path\n            return path.read_bytes().decode(encoding)\n\n        if nsml.IS_ON_NSML:\n            dataset_path = Path(nsml.DATASET_PATH)\n\n            path = dataset_path / file_path\n            if not path.exists():\n                path = dataset_path / \"train\" / file_path\n            if not path.exists():\n                raise FileNotFoundError(path)\n\n        if path.exists():\n            if return_path:\n                return path\n            return path.read_bytes().decode(encoding)\n        else:\n            raise FileNotFoundError(f\"{file_path} is not found.\")\n\n    def _read_from_http(self, file_path, encoding, return_path=False):\n        cache_data_path = self.cache_path / Path(file_path).name\n        if cache_data_path.exists():\n            logger.info(f\"'{file_path}' is already downloaded.\")\n            pass\n        else:\n            with tempfile.TemporaryFile() as temp_file:\n                self._download_from_http(temp_file, file_path)\n                temp_file.flush()\n                temp_file.seek(0)\n\n                with open(cache_data_path, 'wb') as cache_file:\n                    shutil.copyfileobj(temp_file, cache_file)\n\n        return cache_data_path\n\n    def _download_from_http(self, temp_file, url):\n        req = requests.get(url, stream=True)\n        content_length = req.headers.get('Content-Length')\n        total = int(content_length) if content_length is not None else None\n        with tqdm(total=total, unit=\"B\", unit_scale=True, desc=\"download...\") as pbar:\n            for chunk in req.iter_content(chunk_size=1024):\n                if chunk:  # filter out keep-alive new chunks\n                    temp_file.write(chunk)\n                    pbar.update(len(chunk))\n\n    def cache_token_counter(self, data_reader_config, tokenizer_name, obj=None):\n        data_paths = os.path.basename(data_reader_config.train_file_path)\n        if getattr(data_reader_config, \"valid_file_path\", None):\n            data_paths += \"#\" + os.path.basename(data_reader_config.valid_file_path)\n\n        path = self.cache_path / data_reader_config.dataset / data_paths\n        path.mkdir(parents=True, exist_ok=True)\n        path = path / tokenizer_name\n\n        if obj:\n            self.dump(path, obj)\n        else:\n            return self.load(path)\n\n    def load(self, file_path, encoding=\"utf-8\"):\n        path = self.cache_path / file_path\n        logger.info(f\"load path: {path}\")\n\n        msgpack_path = path.with_suffix(\".msgpack\")\n        if msgpack_path.exists():\n            return self._load_msgpack(msgpack_path, encoding)\n\n        pickle_path = path.with_suffix(\".pkl\")\n        if pickle_path.exists():\n            return self._load_pickle(pickle_path, encoding)\n\n        return None\n\n    def _load_msgpack(self, path, encoding):\n        with open(path, \"rb\") as in_file:\n            return msgpack.unpack(in_file, encoding=encoding)\n\n    def _load_pickle(self, path, encoding):\n        with open(path, \"rb\") as in_file:\n            return pickle.load(in_file, encoding=encoding)\n\n    def dump(self, file_path, obj, encoding=\"utf-8\"):\n        path = self.cache_path / file_path\n        path.parent.mkdir(parents=True, exist_ok=True)\n\n        try:\n            with open(path.with_suffix(\".msgpack\"), \"wb\") as out_file:\n                msgpack.pack(obj, out_file, encoding=encoding)\n        except TypeError:\n            os.remove(path.with_suffix(\".msgpack\"))\n            with open(path.with_suffix(\".pkl\"), \"wb\") as out_file:\n                pickle.dump(obj, out_file, protocol=pickle.HIGHEST_PROTOCOL)\n"
  },
  {
    "path": "claf/data/dataset/__init__.py",
    "content": "\nfrom claf.data.dataset.squad import SQuADDataset\nfrom claf.data.dataset.wikisql import WikiSQLDataset\nfrom claf.data.dataset.seq_cls import SeqClsDataset\n\nfrom claf.data.dataset.bert.multi_task import MultiTaskBertDataset\nfrom claf.data.dataset.bert.regression import RegressionBertDataset\nfrom claf.data.dataset.bert.squad import SQuADBertDataset\nfrom claf.data.dataset.bert.seq_cls import SeqClsBertDataset\nfrom claf.data.dataset.bert.tok_cls import TokClsBertDataset\n\n\n# fmt: off\n\n__all__ = [\n    \"MultiTaskBertDataset\",\n    \"RegressionBertDataset\",\n    \"SeqClsDataset\", \"SeqClsBertDataset\",\n    \"SQuADDataset\", \"SQuADBertDataset\",\n    \"TokClsBertDataset\",\n    \"WikiSQLDataset\",\n]\n\n# fmt: on\n"
  },
  {
    "path": "claf/data/dataset/base.py",
    "content": "\nfrom torch.utils.data.dataset import Dataset\n\nfrom claf.data import utils\n\n\nclass DatasetBase(Dataset):\n    \"\"\"\n    Dataset Base Model\n    An abstract class representing a Dataset.\n    \"\"\"\n\n    def __init__(self):\n        # Features - Lazy Evaluation\n        self.f_count = 0\n        self.features = []\n\n    def __getitem__(self, index):\n        raise NotImplementedError\n\n    def _get_feature_maxlen(self, features):\n        max_len = -1\n        for feature in features:\n            for token_name, sentence in feature.items():\n                if token_name == \"text\":\n                    continue\n                if callable(sentence):\n                    continue\n\n                max_len = max(max_len, len(sentence))\n        return max_len\n\n    def collate_fn(self, cuda_device_id):\n        raise NotImplementedError\n\n    def get_ground_truths(self, data_idxs):\n        data_idxs_dim = utils.get_token_dim(data_idxs)\n        if data_idxs_dim > 2:\n            raise ValueError(f\"data_idxs dimension can't be larger than 2.({data_idxs_dim})\")\n\n        if data_idxs_dim == 2:\n            return [self.get_ground_truth(data_id) for data_id in data_idxs]\n        elif data_idxs_dim == 1:\n            return self.get_ground_truth(data_idxs)\n        else:\n            raise ValueError(f\"data_idxs dimension must be 1 or 2. not {data_idxs_dim}\")\n\n    def get_ground_truth(self):\n        raise NotImplementedError\n\n    def get_predict(self):\n        raise NotImplementedError\n\n    def lazy_evaluation(self, index):\n        if self.f_count < self.__len__():\n            self.f_count += 1\n\n            for feature in self.features:\n                for k, v in feature[index].items():\n                    if utils.is_lazy(v):\n                        feature[index][k] = v()\n"
  },
  {
    "path": "claf/data/dataset/bert/__init__.py",
    "content": "\n"
  },
  {
    "path": "claf/data/dataset/bert/multi_task.py",
    "content": "\nimport json\nfrom overrides import overrides\nimport torch\nimport random\n\nfrom claf.factory.data_loader import make_data_loader\nfrom claf.data.dataset.base import DatasetBase\n\n\nclass MultiTaskBertDataset(DatasetBase):\n    \"\"\"\n    Dataset for Multi-Task GLUE using BERT\n\n    * Args:\n        batch: Batch DTO (claf.data.batch)\n\n    * Kwargs:\n        helper: helper from data_reader\n    \"\"\"\n\n    def __init__(self, batches, vocab, helper=None):\n        super(MultiTaskBertDataset, self).__init__()\n\n        self.name = \"multitask_bert\"\n        self.vocab = vocab\n\n        task_helpers = helper[\"task_helpers\"]\n\n        self.multi_dataset_size = 0\n        self.batch_sizes = []\n        self.task_datasets = []\n\n        for b, h in zip(batches, task_helpers):\n            batch_size = h[\"batch_size\"]\n            self.batch_sizes.append(batch_size)\n\n            dataset_cls = h[\"dataset\"]\n            dataset = dataset_cls(b, vocab, helper=h)\n            self.task_datasets.append(dataset)\n\n            task_dataset_size, remain = divmod(len(dataset), batch_size)\n            if remain > 0:\n                task_dataset_size += 1\n            self.multi_dataset_size += task_dataset_size\n\n        self.init_iterators()\n\n    def init_iterators(self):\n        cuda_device_id = None\n        if torch.cuda.is_available():\n            cuda_device_id = 0  # TODO: Hard-code\n\n        self.iterators = []\n        for batch_size, dataset in zip(self.batch_sizes, self.task_datasets):\n            data_loader = make_data_loader(dataset, batch_size=batch_size, cuda_device_id=cuda_device_id)  # TODO: cuda_device_id\n            self.iterators.append(iter(data_loader))\n\n        self.available_iterators = list(range(len(self.iterators)))\n\n    @overrides\n    def collate_fn(self, cuda_device_id=None):\n\n        def pass_tensor(data):\n            task_idx, tensor_datas = zip(*data)\n            tensor_batch = tensor_datas[0]\n\n            task_id_tensor = torch.LongTensor(list(task_idx))\n            if torch.cuda.is_available():\n                task_id_tensor.cuda(cuda_device_id)\n            tensor_batch.features[\"task_index\"] = task_id_tensor\n            return tensor_batch\n        return pass_tensor\n\n    @overrides\n    def __getitem__(self, index):\n        # self.lazy_evaluation(index)\n        if len(self.available_iterators) == 0:\n            self.init_iterators()\n\n        random_index = random.choice(self.available_iterators)\n        task_iterator = self.iterators[random_index]\n        try:\n            return random_index, next(task_iterator)\n        except StopIteration:\n            self.available_iterators.remove(random_index)\n            return self.__getitem__(index)\n\n    def __len__(self):\n        return self.multi_dataset_size\n\n    def __repr__(self):\n        dataset_properties = {\n            \"name\": self.name,\n            \"total_count\": self.__len__(),\n            \"dataset_count\": len(self.iterators),\n            \"task_dataset_sizes\": [len(dataset) for dataset in self.task_datasets],\n        }\n        return json.dumps(dataset_properties, indent=4)\n"
  },
  {
    "path": "claf/data/dataset/bert/regression.py",
    "content": "\nimport json\nfrom overrides import overrides\n\nfrom claf.data import utils\nfrom claf.data.collate import PadCollator\nfrom claf.data.dataset.base import DatasetBase\n\n\nclass RegressionBertDataset(DatasetBase):\n    \"\"\"\n    Dataset for Regression using BERT\n\n    * Args:\n        batch: Batch DTO (claf.data.batch)\n\n    * Kwargs:\n        helper: helper from data_reader\n    \"\"\"\n\n    def __init__(self, batch, vocab, helper=None):\n        super(RegressionBertDataset, self).__init__()\n\n        self.name = \"reg_bert\"\n        self.vocab = vocab\n        self.helper = helper\n\n        # Features\n        self.bert_input_idx = [feature[\"bert_input\"] for feature in batch.features]\n        SEP_token = self.helper.get(\"sep_token\", \"[SEP]\")\n        self.token_type_idx = utils.make_bert_token_types(self.bert_input_idx, SEP_token=SEP_token)\n\n        self.features = [self.bert_input_idx, self.token_type_idx]  # for lazy evaluation\n\n        # Labels\n        self.data_ids = {data_index: label[\"id\"] for (data_index, label) in enumerate(batch.labels)}\n        self.data_indices = list(self.data_ids.keys())\n\n        self.labels = {\n            label[\"id\"]: {\n                \"score\": label[\"score\"],\n            }\n            for label in batch.labels\n        }\n\n        self.label_scores = [label[\"score\"] for label in batch.labels]\n\n    @overrides\n    def collate_fn(self, cuda_device_id=None):\n        \"\"\" collate: indexed features and labels -> tensor \"\"\"\n        collator = PadCollator(cuda_device_id=cuda_device_id, pad_value=self.vocab.pad_index)\n\n        def make_tensor_fn(data):\n            data_idxs, bert_input_idxs, token_type_idxs, label_scores = zip(*data)\n\n            features = {\n                \"bert_input\": utils.transpose(bert_input_idxs, skip_keys=[\"text\"]),\n                \"token_type\": utils.transpose(token_type_idxs, skip_keys=[\"text\"]),\n            }\n            labels = {\n                \"data_idx\": data_idxs,\n                \"score\": label_scores,\n            }\n            return collator(features, labels)\n\n        return make_tensor_fn\n\n    @overrides\n    def __getitem__(self, index):\n        self.lazy_evaluation(index)\n\n        return (\n            self.data_indices[index],\n            self.bert_input_idx[index],\n            self.token_type_idx[index],\n            self.label_scores[index],\n        )\n\n    def __len__(self):\n        return len(self.data_ids)\n\n    def __repr__(self):\n        dataset_properties = {\n            \"name\": self.name,\n            \"total_count\": self.__len__(),\n            \"sequence_maxlen\": self.sequence_maxlen,\n        }\n        return json.dumps(dataset_properties, indent=4)\n\n    @property\n    def sequence_maxlen(self):\n        return self._get_feature_maxlen(self.bert_input_idx)\n\n    def get_id(self, data_index):\n        return self.data_ids[data_index]\n\n    @overrides\n    def get_ground_truth(self, data_id):\n        return self.labels[data_id]\n"
  },
  {
    "path": "claf/data/dataset/bert/seq_cls.py",
    "content": "\nimport json\nfrom overrides import overrides\n\nfrom claf.data import utils\nfrom claf.data.collate import PadCollator\nfrom claf.data.dataset.base import DatasetBase\n\n\nclass SeqClsBertDataset(DatasetBase):\n    \"\"\"\n    Dataset for Sequence Classification using BERT\n\n    * Args:\n        batch: Batch DTO (claf.data.batch)\n\n    * Kwargs:\n        helper: helper from data_reader\n    \"\"\"\n\n    def __init__(self, batch, vocab, helper=None):\n        super(SeqClsBertDataset, self).__init__()\n\n        self.name = \"seq_cls_bert\"\n        self.vocab = vocab\n        self.helper = helper\n\n        self.class_idx2text = helper[\"class_idx2text\"]\n\n        # Features\n        self.bert_input_idx = [feature[\"bert_input\"] for feature in batch.features]\n        SEP_token = self.helper.get(\"sep_token\", \"[SEP]\")\n        self.token_type_idx = utils.make_bert_token_types(self.bert_input_idx, SEP_token=SEP_token)\n\n        self.features = [self.bert_input_idx, self.token_type_idx]  # for lazy evaluation\n\n        # Labels\n        self.data_ids = {data_index: label[\"id\"] for (data_index, label) in enumerate(batch.labels)}\n        self.data_indices = list(self.data_ids.keys())\n\n        self.classes = {\n            label[\"id\"]: {\n                \"class_idx\": label[\"class_idx\"],\n                \"class_text\": label[\"class_text\"],\n            }\n            for label in batch.labels\n        }\n\n        self.class_text = [label[\"class_text\"] for label in batch.labels]\n        self.class_idx = [label[\"class_idx\"] for label in batch.labels]\n\n    @overrides\n    def collate_fn(self, cuda_device_id=None):\n        \"\"\" collate: indexed features and labels -> tensor \"\"\"\n        collator = PadCollator(cuda_device_id=cuda_device_id, pad_value=self.vocab.pad_index)\n\n        def make_tensor_fn(data):\n            data_idxs, bert_input_idxs, token_type_idxs, class_idxs = zip(*data)\n\n            features = {\n                \"bert_input\": utils.transpose(bert_input_idxs, skip_keys=[\"text\"]),\n                \"token_type\": utils.transpose(token_type_idxs, skip_keys=[\"text\"]),\n            }\n            labels = {\n                \"class_idx\": class_idxs,\n                \"data_idx\": data_idxs,\n            }\n            return collator(features, labels)\n\n        return make_tensor_fn\n\n    @overrides\n    def __getitem__(self, index):\n        self.lazy_evaluation(index)\n\n        return (\n            self.data_indices[index],\n            self.bert_input_idx[index],\n            self.token_type_idx[index],\n            self.class_idx[index],\n        )\n\n    def __len__(self):\n        return len(self.data_ids)\n\n    def __repr__(self):\n        dataset_properties = {\n            \"name\": self.name,\n            \"total_count\": self.__len__(),\n            \"num_classes\": self.num_classes,\n            \"sequence_maxlen\": self.sequence_maxlen,\n            \"classes\": self.class_idx2text,\n        }\n        return json.dumps(dataset_properties, indent=4)\n\n    @property\n    def num_classes(self):\n        return len(self.class_idx2text)\n\n    @property\n    def sequence_maxlen(self):\n        return self._get_feature_maxlen(self.bert_input_idx)\n\n    def get_id(self, data_index):\n        return self.data_ids[data_index]\n\n    @overrides\n    def get_ground_truth(self, data_id):\n        return self.classes[data_id]\n\n    def get_class_text_with_idx(self, class_index):\n        if class_index is None:\n            raise ValueError(\"class_index is required.\")\n\n        return self.class_idx2text[class_index]\n"
  },
  {
    "path": "claf/data/dataset/bert/squad.py",
    "content": "\nimport json\nfrom overrides import overrides\n\nfrom claf.data import utils\nfrom claf.data.collate import PadCollator\nfrom claf.data.dataset.base import DatasetBase\n\n\nclass SQuADBertDataset(DatasetBase):\n    \"\"\"\n    SQuAD Dataset for BERT\n        compatible with v1.1 and v2.0\n\n    * Args:\n        batch: Batch DTO (claf.data.batch)\n\n    * Kwargs:\n        helper: helper from data_reader\n    \"\"\"\n\n    def __init__(self, batch, vocab, helper=None):\n        super(SQuADBertDataset, self).__init__()\n\n        self.name = \"squad_bert\"\n        self.vocab = vocab\n        self.helper = helper\n        self.raw_dataset = helper[\"raw_dataset\"]\n\n        # Features\n        self.bert_input_idx = [feature[\"bert_input\"] for feature in batch.features]\n        SEP_token = self.helper.get(\"sep_token\", \"[SEP]\")\n        self.token_type_idx = utils.make_bert_token_types(self.bert_input_idx, SEP_token=SEP_token)\n\n        self.features = [self.bert_input_idx, self.token_type_idx]  # for lazy_evaluation\n\n        # Labels\n        self.qids = {data_index: label[\"id\"] for (data_index, label) in enumerate(batch.labels)}\n        self.data_indices = list(self.qids.keys())\n\n        self.answers = {\n            label[\"id\"]: (\n                label[\"answerable\"],\n                (label[\"answer_start\"], label[\"answer_end\"]),\n            )\n            for label in batch.labels\n        }\n        self.answer_starts = [label[\"answer_start\"] for label in batch.labels]\n        self.answer_ends = [label[\"answer_end\"] for label in batch.labels]\n        self.answerables = [label[\"answerable\"] for label in batch.labels]\n\n    @overrides\n    def collate_fn(self, cuda_device_id=None):\n        \"\"\" collate: indexed features and labels -> tensor \"\"\"\n        collator = PadCollator(cuda_device_id=cuda_device_id, pad_value=self.vocab.pad_index)\n\n        def make_tensor_fn(data):\n            bert_input_idxs, token_type_idxs, data_idxs, answer_starts, answer_ends, answerables = zip(\n                *data\n            )\n\n            features = {\n                \"bert_input\": utils.transpose(bert_input_idxs, skip_keys=[\"text\"]),\n                \"token_type\": utils.transpose(token_type_idxs, skip_keys=[\"text\"]),\n            }\n            labels = {\n                \"data_idx\": data_idxs,\n                \"answer_start_idx\": answer_starts,\n                \"answer_end_idx\": answer_ends,\n                \"answerable\": answerables,\n            }\n            return collator(features, labels)\n\n        return make_tensor_fn\n\n    @overrides\n    def __getitem__(self, index):\n        self.lazy_evaluation(index)\n\n        return (\n            self.bert_input_idx[index],\n            self.token_type_idx[index],\n            self.data_indices[index],\n            self.answer_starts[index],\n            self.answer_ends[index],\n            self.answerables[index],\n        )\n\n    def __len__(self):\n        return len(self.qids)\n\n    def __repr__(self):\n        dataset_properties = {\n            \"name\": self.name,\n            \"total_count\": self.__len__(),\n            \"HasAns_count\": len([True for k, v in self.answers.items() if v[1] == 1]),\n            \"NoAns_count\": len([False for k, v in self.answers.items() if v[1] == 0]),\n            \"bert_input_maxlen\": self.bert_input_maxlen,\n        }\n        return json.dumps(dataset_properties, indent=4)\n\n    @property\n    def bert_input_maxlen(self):\n        return self._get_feature_maxlen(self.bert_input_idx)\n\n    def get_qid(self, data_index):\n        qid = self.qids[data_index]\n        if \"#\" in qid:\n            qid = qid.split(\"#\")[0]\n        return qid\n\n    def get_id(self, data_index):\n        return self.get_qid(data_index)\n\n    def get_qid_index(self, data_index):\n        qid = self.qids[data_index]\n        if \"#\" in qid:\n            return qid.split(\"#\")[1]\n        return None\n\n    def get_context(self, data_index):\n        qid = self.get_qid(data_index)\n        return self.helper[\"examples\"][qid][\"context\"]\n\n    @overrides\n    def get_ground_truths(self, data_index):\n        qid = self.get_qid(data_index)\n        answer_texts = self.helper[\"examples\"][qid][\"answers\"]\n        answerable, answer_span = self.answers[qid]\n        return answer_texts, answerable, answer_span\n\n    @overrides\n    def get_predict(self, data_index, start, end):\n        return self.get_text_with_index(data_index, start, end)\n\n    def get_text_with_index(self, data_index, start, end):\n        if data_index is None:\n            raise ValueError(\"data_id or text is required.\")\n\n        context_text = self.get_context(data_index)\n        bert_token = self.get_bert_tokens(data_index)\n\n        if (\n            start <= 0\n            or end >= len(bert_token)\n            or bert_token[start].text_span is None\n            or bert_token[end].text_span is None\n        ):\n            # No_Answer Case\n            return \"<noanswer>\"\n\n        char_start = bert_token[start].text_span[0]\n        char_end = bert_token[end].text_span[1]\n        if char_start > char_end or len(context_text) <= char_end:\n            return \"\"\n        return context_text[char_start:char_end]\n\n    def get_bert_tokens(self, data_index):\n        qid = self.get_qid(data_index)\n        index = self.get_qid_index(data_index)\n\n        if index is None:\n            raise ValueError(\"bert_qid must have 'bert_index' (bert_id: qid#bert_index)\")\n\n        bert_index = f\"bert_tokens_{index}\"\n        return self.helper[\"examples\"][qid][bert_index]\n"
  },
  {
    "path": "claf/data/dataset/bert/tok_cls.py",
    "content": "\nimport json\nfrom overrides import overrides\n\nfrom claf.data import utils\nfrom claf.data.collate import FeatLabelPadCollator\nfrom claf.data.dataset.base import DatasetBase\n\n\nclass TokClsBertDataset(DatasetBase):\n    \"\"\"\n    Dataset for Token Classification\n\n    * Args:\n        batch: Batch DTO (claf.data.batch)\n\n    * Kwargs:\n        helper: helper from data_reader\n    \"\"\"\n\n    def __init__(self, batch, vocab, helper=None):\n        super(TokClsBertDataset, self).__init__()\n\n        self.name = \"tok_cls_bert\"\n        self.vocab = vocab\n        self.helper = helper\n\n        self.tag_idx2text = helper[\"tag_idx2text\"]\n\n        # Features\n        self.bert_input_idx = [feature[\"bert_input\"] for feature in batch.features]\n        SEP_token = self.helper.get(\"sep_token\", \"[SEP]\")\n        self.token_type_idx = utils.make_bert_token_types(self.bert_input_idx, SEP_token=SEP_token)\n\n        self.tagged_sub_token_idxs = [{\"feature\": feature[\"tagged_sub_token_idxs\"]} for feature in batch.features]\n        self.num_tokens = [{\"feature\": feature[\"num_tokens\"]} for feature in batch.features]\n\n        self.features = [self.bert_input_idx, self.token_type_idx]  # for lazy evaluation\n\n        # Labels\n        self.data_ids = {data_index: label[\"id\"] for (data_index, label) in enumerate(batch.labels)}\n        self.data_indices = list(self.data_ids.keys())\n\n        self.tags = {\n            label[\"id\"]: {\n                \"tag_idxs\": label[\"tag_idxs\"],\n                \"tag_texts\": label[\"tag_texts\"],\n            }\n            for label in batch.labels\n        }\n        self.tag_texts = [label[\"tag_texts\"] for label in batch.labels]\n        self.tag_idxs = [label[\"tag_idxs\"] for label in batch.labels]\n\n        self.ignore_tag_idx = helper[\"ignore_tag_idx\"]\n\n    @overrides\n    def collate_fn(self, cuda_device_id=None):\n        \"\"\" collate: indexed features and labels -> tensor \"\"\"\n        collator = FeatLabelPadCollator(cuda_device_id=cuda_device_id, pad_value=self.vocab.pad_index)\n\n        def make_tensor_fn(data):\n            data_idxs, bert_input_idxs, token_type_idxs, tagged_token_idxs, num_tokens, tag_idxs_list = zip(*data)\n\n            features = {\n                \"bert_input\": utils.transpose(bert_input_idxs, skip_keys=[\"text\"]),\n                \"token_type\": utils.transpose(token_type_idxs, skip_keys=[\"text\"]),\n                \"tagged_sub_token_idxs\": utils.transpose(tagged_token_idxs, skip_keys=[\"text\"]),\n                \"num_tokens\": utils.transpose(num_tokens, skip_keys=[\"text\"]),\n            }\n            labels = {\n                \"tag_idxs\": tag_idxs_list,\n                \"data_idx\": data_idxs,\n            }\n            return collator(\n                features,\n                labels,\n                apply_pad_labels=[\"tag_idxs\"],\n                apply_pad_values=[self.ignore_tag_idx]\n            )\n\n        return make_tensor_fn\n\n    @overrides\n    def __getitem__(self, index):\n        self.lazy_evaluation(index)\n\n        return (\n            self.data_indices[index],\n            self.bert_input_idx[index],\n            self.token_type_idx[index],\n            self.tagged_sub_token_idxs[index],\n            self.num_tokens[index],\n            self.tag_idxs[index],\n        )\n\n    def __len__(self):\n        return len(self.data_ids)\n\n    def __repr__(self):\n        dataset_properties = {\n            \"name\": self.name,\n            \"total_count\": self.__len__(),\n            \"num_tags\": self.num_tags,\n            \"sequence_maxlen\": self.sequence_maxlen,\n            \"tags\": self.tag_idx2text,\n        }\n        return json.dumps(dataset_properties, indent=4)\n\n    @property\n    def num_tags(self):\n        return len(self.tag_idx2text)\n\n    @property\n    def sequence_maxlen(self):\n        return self._get_feature_maxlen(self.bert_input_idx)\n\n    def get_id(self, data_index):\n        return self.data_ids[data_index]\n\n    @overrides\n    def get_ground_truth(self, data_id):\n        return self.tags[data_id]\n\n    def get_tag_texts_with_idxs(self, tag_idxs):\n        return [self.get_tag_text_with_idx(tag_idx)for tag_idx in tag_idxs]\n\n    def get_tag_text_with_idx(self, tag_index):\n        if tag_index is None:\n            raise ValueError(\"tag_index is required.\")\n\n        return self.tag_idx2text[tag_index]\n"
  },
  {
    "path": "claf/data/dataset/seq_cls.py",
    "content": "\nimport json\nfrom overrides import overrides\nimport torch\n\nfrom claf.data import utils\nfrom claf.data.collate import PadCollator\nfrom claf.data.dataset.base import DatasetBase\n\n\nclass SeqClsDataset(DatasetBase):\n    \"\"\"\n    Dataset for Sequence Classification\n\n    * Args:\n        batch: Batch DTO (claf.data.batch)\n\n    * Kwargs:\n        helper: helper from data_reader\n    \"\"\"\n\n    def __init__(self, batch, vocab, helper=None):\n        super(SeqClsDataset, self).__init__()\n\n        self.name = \"seq_cls\"\n        self.vocab = vocab\n        self.helper = helper\n\n        self.class_idx2text = helper[\"class_idx2text\"]\n\n        self.sequences = {feature[\"id\"]: feature[\"sequence\"][\"text\"] for feature in batch.features}\n\n        # Features\n        self.sequence_idxs = [feature[\"sequence\"] for feature in batch.features]\n\n        self.features = [self.sequence_idxs]  # for lazy evaluation\n\n        # Labels\n        self.data_ids = {data_index: label[\"id\"] for (data_index, label) in enumerate(batch.labels)}\n        self.data_indices = list(self.data_ids.keys())\n\n        self.classes = {\n            label[\"id\"]: {\n                \"class_idx\": label[\"class_idx\"],\n                \"class_text\": label[\"class_text\"],\n            }\n            for label in batch.labels\n        }\n\n        self.class_text = [label[\"class_text\"] for label in batch.labels]\n        self.class_idx = [label[\"class_idx\"] for label in batch.labels]\n\n    @overrides\n    def collate_fn(self, cuda_device_id=None):\n        \"\"\" collate: indexed features and labels -> tensor \"\"\"\n        collator = PadCollator(cuda_device_id=cuda_device_id, pad_value=self.vocab.pad_index)\n\n        def make_tensor_fn(data):\n            data_idxs, sequence_idxs, class_idxs = zip(*data)\n\n            features = {\n                \"sequence\": utils.transpose(sequence_idxs, skip_keys=[\"text\"]),\n            }\n            labels = {\n                \"class_idx\": class_idxs,\n                \"data_idx\": data_idxs,\n            }\n            return collator(features, labels)\n\n        return make_tensor_fn\n\n    @overrides\n    def __getitem__(self, index):\n        self.lazy_evaluation(index)\n\n        return (\n            self.data_indices[index],\n            self.sequence_idxs[index],\n            self.class_idx[index],\n        )\n\n    def __len__(self):\n        return len(self.data_ids)\n\n    def __repr__(self):\n        dataset_properties = {\n            \"name\": self.name,\n            \"total_count\": self.__len__(),\n            \"num_classes\": self.num_classes,\n            \"sequence_maxlen\": self.sequence_maxlen,\n            \"classes\": self.class_idx2text,\n        }\n        return json.dumps(dataset_properties, indent=4)\n\n    @property\n    def num_classes(self):\n        return len(self.class_idx2text)\n\n    @property\n    def sequence_maxlen(self):\n        return self._get_feature_maxlen(self.sequence_idxs)\n\n    def get_id(self, data_index):\n        return self.data_ids[data_index]\n\n    @overrides\n    def get_ground_truth(self, data_id):\n        return self.classes[data_id]\n\n    def get_class_text_with_idx(self, class_index):\n        if class_index is None:\n            raise ValueError(\"class_index is required.\")\n\n        return self.class_idx2text[class_index]\n"
  },
  {
    "path": "claf/data/dataset/squad.py",
    "content": "\nimport json\nfrom overrides import overrides\n\nfrom claf.data import utils\nfrom claf.data.collate import PadCollator\nfrom claf.data.dataset.base import DatasetBase\n\n\nclass SQuADDataset(DatasetBase):\n    \"\"\"\n    SQuAD Dataset\n        compatible with v1.1 and v2.0\n\n    * Args:\n        batch: Batch DTO (claf.data.batch)\n\n    * Kwargs:\n        helper: helper from data_reader\n    \"\"\"\n\n    def __init__(self, batch, vocab, helper=None):\n        super(SQuADDataset, self).__init__()\n\n        self.name = \"squad\"\n        self.vocab = vocab\n        self.helper = helper\n        self.raw_dataset = helper[\"raw_dataset\"]  # for SQuAD official metric\n\n        # Features\n        self.context_idx = [feature[\"context\"] for feature in batch.features]\n        self.question_idx = [feature[\"question\"] for feature in batch.features]\n\n        self.features = [self.context_idx, self.question_idx]  # for lazy_evaluation\n\n        # Labels\n        self.qids = {data_index: label[\"id\"] for (data_index, label) in enumerate(batch.labels)}\n        self.data_indices = list(self.qids.keys())\n\n        self.answers = {\n            label[\"id\"]: (\n                label[\"answerable\"],\n                (label[\"answer_start\"], label[\"answer_end\"]),\n            )\n            for label in batch.labels\n        }\n        self.answer_starts = [label[\"answer_start\"] for label in batch.labels]\n        self.answer_ends = [label[\"answer_end\"] for label in batch.labels]\n        self.answerables = [label[\"answerable\"] for label in batch.labels]\n\n    @overrides\n    def collate_fn(self, cuda_device_id=None):\n        \"\"\" collate: indexed features and labels -> tensor \"\"\"\n        collator = PadCollator(cuda_device_id=cuda_device_id, pad_value=self.vocab.pad_index)\n\n        def make_tensor_fn(data):\n            context_idxs, question_idxs, data_idxs, \\\n                answer_starts, answer_ends, answerables = zip(*data)\n\n            features = {\n                \"context\": utils.transpose(context_idxs, skip_keys=[\"text\"]),\n                \"question\": utils.transpose(question_idxs, skip_keys=[\"text\"]),\n            }\n            labels = {\n                \"data_idx\": data_idxs,\n                \"answer_start_idx\": answer_starts,\n                \"answer_end_idx\": answer_ends,\n                \"answerable\": answerables,\n            }\n            return collator(features, labels)\n\n        return make_tensor_fn\n\n    @overrides\n    def __getitem__(self, index):\n        self.lazy_evaluation(index)\n\n        return (\n            self.context_idx[index],\n            self.question_idx[index],\n            self.data_indices[index],\n            self.answer_starts[index],\n            self.answer_ends[index],\n            self.answerables[index],\n        )\n\n    def __len__(self):\n        return len(self.qids)\n\n    def __repr__(self):\n        dataset_properties = {\n            \"name\": self.name,\n            \"total_count\": self.__len__(),\n            \"HasAns_count\": len([True for item in self.answerables if item == 1]),\n            \"NoAns_count\": len([False for item in self.answerables if item == 0]),\n            \"context_maxlen\": self.context_maxlen,\n            \"question_maxlen\": self.question_maxlen,\n        }\n        return json.dumps(dataset_properties, indent=4)\n\n    @property\n    def context_maxlen(self):\n        return self._get_feature_maxlen(self.context_idx)\n\n    @property\n    def question_maxlen(self):\n        return self._get_feature_maxlen(self.question_idx)\n\n    def get_qid(self, data_index):\n        return self.qids[data_index]\n\n    def get_context(self, data_index):\n        qid = self.get_qid(data_index)\n        return self.helper[\"examples\"][qid][\"context\"]\n\n    def get_text_span(self, data_index):\n        qid = self.get_qid(data_index)\n        return self.helper[\"examples\"][qid][\"text_span\"]\n\n    @overrides\n    def get_ground_truths(self, data_index):\n        qid = self.get_qid(data_index)\n        answer_texts = self.helper[\"examples\"][qid][\"answers\"]\n        answerable, answer_span = self.answers[qid]\n        return answer_texts, answerable, answer_span\n\n    @overrides\n    def get_predict(self, data_index, start, end):\n        return self.get_text_with_index(data_index, start, end)\n\n    def get_text_with_index(self, data_index, start, end):\n        if data_index is None:\n            raise ValueError(\"qid or text is required.\")\n\n        context_text = self.get_context(data_index)\n        text_span = self.get_text_span(data_index)\n\n        if start >= len(text_span) or end >= len(text_span):\n            # No_Answer Case\n            return \"<noanswer>\"\n\n        char_start = text_span[start][0]\n        char_end = text_span[end][1]\n        if char_start > char_end or len(context_text) <= char_end:\n            return \"\"\n        return context_text[char_start:char_end]\n"
  },
  {
    "path": "claf/data/dataset/wikisql.py",
    "content": "\nimport json\nfrom overrides import overrides\n\nimport torch\n\nfrom claf.data import utils\nfrom claf.data.collate import PadCollator\nfrom claf.data.dataset.base import DatasetBase\n\n\n\nclass WikiSQLDataset(DatasetBase):\n    \"\"\"\n    WikiSQL Dataset\n\n    * Args:\n        batch: Batch DTO (claf.data.batch)\n\n    * Kwargs:\n        helper: helper from data_reader\n    \"\"\"\n\n    def __init__(self, batch, vocab, helper=None):\n        super(WikiSQLDataset, self).__init__()\n\n        self.name = \"wikisql\"\n        self.vocab = vocab\n        self.helper = helper\n\n        # Features\n        self.column_idx = [feature[\"column\"] for feature in batch.features]\n        self.question_idx = [feature[\"question\"] for feature in batch.features]\n\n        self.features = [self.column_idx, self.question_idx]\n\n        # Labels\n        self.data_idx = {data_index: label[\"id\"] for (data_index, label) in enumerate(batch.labels)}\n        self.data_indices = list(self.data_idx.keys())\n\n        self.table_idx = {data_index: label[\"table_id\"] for (data_index, label) in enumerate(batch.labels)}\n\n        self.tokenized_question = {label[\"id\"]: label[\"tokenized_question\"] for label in batch.labels}\n\n        self.labels = {\n            label[\"id\"]: {\n                \"agg_idx\": label[\"aggregator_idx\"],\n                \"sel_idx\": label[\"select_column_idx\"],\n                \"conds_num\": label[\"conditions_num\"],\n                \"conds_col\": label[\"conditions_column_idx\"],\n                \"conds_op\": label[\"conditions_operator_idx\"],\n                \"conds_val_str\": label[\"conditions_value_string\"],\n                \"conds_val_pos\": label[\"conditions_value_position\"],\n                \"sql_query\": label[\"sql_query\"],\n                \"execution_result\": label[\"execution_result\"],\n            }\n            for label in batch.labels\n        }\n\n    @overrides\n    def collate_fn(self, cuda_device_id=None):\n        \"\"\" collate: indexed features and labels -> tensor \"\"\"\n        collator = PadCollator(cuda_device_id=cuda_device_id, pad_value=self.vocab.pad_index)\n\n        def make_tensor_fn(data):\n            column_idxs, question_idxs, data_idxs = zip(*data)\n\n            features = {\n                \"column\": utils.transpose(column_idxs, skip_keys=[\"text\"]),\n                \"question\": utils.transpose(question_idxs, skip_keys=[\"text\"]),\n            }\n            labels = {\n                \"data_idx\": data_idxs,\n            }\n            return collator(features, labels)\n\n        return make_tensor_fn\n\n    @overrides\n    def __getitem__(self, index):\n        self.lazy_evaluation(index)\n\n        return (\n            self.column_idx[index],\n            self.question_idx[index],\n            self.data_indices[index],\n        )\n\n    def __len__(self):\n        return len(self.data_idx)\n\n    def __repr__(self):\n        dataset_properties = {\n            \"name\": self.name,\n            \"total_count\": self.__len__(),\n            \"question_maxlen\": self.question_maxlen,\n        }\n        return json.dumps(dataset_properties, indent=4)\n\n    @property\n    def question_maxlen(self):\n        return self._get_feature_maxlen(self.question_idx)\n\n    def get_id(self, data_index):\n        if type(data_index) == torch.Tensor:\n            data_index = data_index.item()\n        return self.data_idx[data_index]\n\n    def get_table_id(self, data_index):\n        if type(data_index) == torch.Tensor:\n            data_index = data_index.item()\n        return self.table_idx[data_index]\n\n    def get_tokenized_question(self, data_index):\n        data_id = self.get_id(data_index)\n        return self.tokenized_question[data_id]\n\n    @overrides\n    def get_ground_truth(self, data_index):\n        if type(data_index) == torch.Tensor:\n            data_id = self.get_id(data_index)\n        else:\n            data_id = data_index\n        return self.labels[data_id]\n"
  },
  {
    "path": "claf/data/dto/__init__.py",
    "content": "\nfrom claf.data.dto.batch import Batch\nfrom claf.data.dto.bert_feature import BertFeature\nfrom claf.data.dto.helper import Helper\n\n# fmt: off\n\n__all__ = [\n    \"Batch\",\n    \"BertFeature\",\n    \"Helper\",\n]\n\n# fmt: on\n"
  },
  {
    "path": "claf/data/dto/batch.py",
    "content": "\nimport logging\n\nlogger = logging.getLogger(__name__)\n\n\nclass Batch:\n    \"\"\"\n    Batch Data Transfer Object (DTO) Class\n\n    dictionary consisting of\n        - features: (dict) input\n        - labels: (dict) output\n    \"\"\"\n\n    def __init__(self, **kwargs):\n        if set(kwargs.keys()) != set([\"features\", \"labels\"]):\n            raise ValueError(\"You can use only 'features' and 'labels' as dictionary key.\")\n        self.__dict__ = kwargs\n\n    def __repr__(self):\n        return str(self.__dict__)\n\n    def __len__(self):\n        return len(self.__dict__)\n\n    def sort_by_key(self, sort_key):\n        logger.info(f\"Start sort by key: {sort_key}'s length\")\n\n        zipped = zip(self.__dict__[\"features\"], self.__dict__[\"labels\"])\n\n        features = self.__dict__[\"features\"]\n        if type(features) == list:\n            feature_keys = list(features[0].keys())\n        else:\n            feature_keys = features.keys()\n\n        key_index = 0 if sort_key in feature_keys else 1  # sort_key in features or labels\n\n        sorted_features, sorted_labels = [], []\n        for data in sorted(zipped, key=lambda x: len(x[key_index][sort_key])):\n            feature, label = data\n            sorted_features.append(feature)\n            sorted_labels.append(label)\n\n        self.__dict__[\"features\"] = sorted_features\n        self.__dict__[\"labels\"] = sorted_labels\n        zipped = None\n        logger.info(\"Complete sorting...\")\n\n    def to_dict(self, flatten=False, recursive=True):\n        def _flatten(d):\n            if d == {}:\n                return d\n\n            k, v = d.popitem()\n            if isinstance(v, dict):\n                flat_v = _flatten(v)\n                for f_k in list(flat_v.keys()):\n                    flat_v[k + \"#\" + f_k] = flat_v[f_k]\n                    del flat_v[f_k]\n                return {**flat_v, **_flatten(d)}\n            else:\n                return {k: v, **_flatten(d)}\n\n        def _recursive(d):\n            if not isinstance(d, dict):\n                return d\n\n            for k, v in d.items():\n                if isinstance(v, dict):\n                    dict_v = dict(v)\n                    d[k] = _recursive(dict_v)\n            return d\n\n        if flatten:\n            d = {}\n            d.update(_flatten(self.__dict__[\"features\"]))\n            d.update(_flatten(self.__dict__[\"labels\"]))\n            return d\n\n        if recursive:\n            return _recursive(self.__dict__)\n\n        return dict(self.__dict__)\n"
  },
  {
    "path": "claf/data/dto/bert_feature.py",
    "content": "\nfrom claf.data import utils\n\n\nclass BertFeature:\n    \"\"\"\n    BertFeature Data Transfer Object (DTO) Class\n\n    dictionary consisting of\n        - bert_input: indexed bert_input feature\n        - token_type: segment_ids feature\n    \"\"\"\n\n    BERT_INPUT = \"bert_input\"\n    TOKEN_TYPE = \"token_type\"  #segment_id\n\n    def __init__(self, **kwargs):\n        self.__dict__ = kwargs\n\n    def set_input(self, bert_input):\n        self.__dict__[self.BERT_INPUT] = bert_input\n        self.set_feature(self.TOKEN_TYPE, utils.make_bert_token_type(bert_input))\n\n    def set_input_with_speical_token(self, *args, **kwargs):\n        bert_input = utils.make_bert_input(*args, **kwargs)\n        self.set_input(bert_input)\n\n    def set_feature(self, key, value):\n        self.__dict__[key] = {\"feature\": value, \"text\": \"\"}\n\n    def to_dict(self):\n        return dict(self.__dict__)\n"
  },
  {
    "path": "claf/data/dto/helper.py",
    "content": "\n\n\nclass Helper:\n    \"\"\"\n    Helper Data Transfer Object (DTO) Class\n      (include model parameter - value defined by data, predict_helper and etc.)\n\n    dictionary consisting of\n        - model: (dict) model parameter (ex. num_classes)\n        - predict_helper: (dict) predict_helper (ex. class_idx2text)\n\n    \"\"\"\n\n    EXAMPLES = \"examples\"\n    MODEL = \"model\"\n    PREDICT_HELPER = \"predict_helper\"\n\n    def __init__(self, **kwargs):\n        self.__dict__ = kwargs\n\n        default_keys = [self.EXAMPLES, self.MODEL, self.PREDICT_HELPER]\n        for key in default_keys:\n            if key not in self.__dict__:\n                self.__dict__[key] = {}\n\n    def set_example(self, uid, example, update=False):\n        if update:\n            self.__dict__[self.EXAMPLES][uid].update(example)\n        else:\n            self.__dict__[self.EXAMPLES][uid] = example\n\n    def set_model_parameter(self, parameters):\n        self.__dict__[self.MODEL] = parameters\n\n    def set_predict_helper(self, predict_helper):\n        self.__dict__[self.PREDICT_HELPER] = predict_helper\n\n    def to_dict(self):\n        return dict(self.__dict__)\n"
  },
  {
    "path": "claf/data/reader/__init__.py",
    "content": "\nfrom claf.data.reader.seq_cls import SeqClsReader\nfrom claf.data.reader.cola import CoLAReader\n\nfrom claf.data.reader.squad import SQuADReader\n\nfrom claf.data.reader.wikisql import WikiSQLReader\n\nfrom claf.data.reader.bert.multi_task import MultiTaskBertReader\n\nfrom claf.data.reader.bert.seq_cls import SeqClsBertReader\nfrom claf.data.reader.bert.glue.cola import CoLABertReader\nfrom claf.data.reader.bert.glue.mrpc import MRPCBertReader\nfrom claf.data.reader.bert.glue.mnli import MNLIBertReader\nfrom claf.data.reader.bert.glue.qnli import QNLIBertReader\nfrom claf.data.reader.bert.glue.qqp import QQPBertReader\nfrom claf.data.reader.bert.glue.sst import SSTBertReader\nfrom claf.data.reader.bert.glue.rte import RTEBertReader\nfrom claf.data.reader.bert.glue.wnli import WNLIBertReader\n\nfrom claf.data.reader.bert.regression import RegressionBertReader\nfrom claf.data.reader.bert.glue.stsb import STSBBertReader\n\nfrom claf.data.reader.bert.squad import SQuADBertReader\n\nfrom claf.data.reader.bert.tok_cls import TokClsBertReader\nfrom claf.data.reader.bert.conll2003 import CoNLL2003BertReader\n\n\n# fmt: off\n\n__all__ = [\n    \"MultiTaskBertReader\",\n\n    \"RegressionBertReader\", \"STSBBertReader\",\n\n    \"SeqClsReader\", \"CoLAReader\",\n\n    \"SeqClsBertReader\", \"CoLABertReader\", \"MRPCBertReader\", \"MNLIBertReader\", \"QNLIBertReader\",\n    \"QQPBertReader\", \"RTEBertReader\", \"SSTBertReader\", \"STSBBertReader\", \"WNLIBertReader\",\n\n    \"SQuADReader\",\n    \"SQuADBertReader\",\n\n    \"TokClsBertReader\", \"CoNLL2003BertReader\",\n\n    \"WikiSQLReader\",\n]\n\n# fmt: on\n"
  },
  {
    "path": "claf/data/reader/base.py",
    "content": "\nimport logging\n\nfrom claf.data.data_handler import CachePath, DataHandler\nfrom claf import utils as common_utils\n\nlogger = logging.getLogger(__name__)\n\n\nclass DataReader:\n    \"\"\"\n    DataReader Base Class\n\n    * Args:\n        file_paths: dictionary of consisting ('train' and 'vaild') file_path\n        dataset_obj: Dataset Object (claf.data.dataset.base)\n    \"\"\"\n\n    def __init__(self, file_paths, dataset_obj):\n        self.file_paths = file_paths\n        self.dataset_obj = dataset_obj\n\n        self.data_handler = DataHandler(cache_path=CachePath.DATASET)  # for Concrete DataReader\n        self.text_columns = None\n\n    def filter_texts(self, dataset):\n        texts = []\n\n        def append_texts(datas):\n            for data in datas:\n                for key, value in data.items():\n                    if key in self.text_columns:\n                        texts.append(value)\n\n        for data_type, dataset in dataset.items():\n            append_texts(dataset.features)\n            # append_texts(dataset.labels)\n\n        texts = list(common_utils.flatten(texts))\n        texts = list(set(texts))  # remove duplicate\n        return texts\n\n    def read(self):\n        \"\"\" read with Concrete DataReader each type \"\"\"\n\n        if type(self.file_paths) != dict:\n            raise ValueError(f\"file_paths type is must be dict. not {type(self.file_paths)}\")\n\n        logger.info(\"Start read dataset\")\n        datasets, helpers = {}, {}\n        for data_type, file_path in self.file_paths.items():\n            if data_type is None:\n                continue\n\n            batch, helper = self._read(file_path, data_type=data_type)\n\n            datasets[data_type] = batch\n            helpers[data_type] = helper\n        logger.info(\"Complete read dataset...\\n\")\n        return datasets, helpers\n\n    def _read(self, file_path, desc=None):\n        raise NotImplementedError\n\n    def read_one_example(self, inputs):\n        helper = None\n        return inputs, helper\n\n    def convert_to_dataset(self, datas, vocab, helpers=None):\n        \"\"\" Batch to Dataset \"\"\"\n        datasets = {}\n        for k, batch in datas.items():\n            if batch is None:\n                continue\n            datasets[k] = self.dataset_obj(batch, vocab, helper=helpers[k])\n            logger.info(f\"{k} dataset. {datasets[k]}\")\n        return datasets\n"
  },
  {
    "path": "claf/data/reader/bert/__init__.py",
    "content": "\n"
  },
  {
    "path": "claf/data/reader/bert/conll2003.py",
    "content": "\nimport logging\nfrom itertools import chain\n\nfrom overrides import overrides\n\nfrom claf.data.reader import TokClsBertReader\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:conll2003_bert\")\nclass CoNLL2003BertReader(TokClsBertReader):\n    \"\"\"\n     CoNLL2003 for BERT\n\n    * Args:\n        file_paths: file paths (train and dev)\n\n    * Kwargs:\n        ignore_tag_idx: prediction results that have this number as ground-truth idx are ignored\n    \"\"\"\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        ignore_tag_idx=-1,\n    ):\n\n        super(CoNLL2003BertReader, self).__init__(\n            file_paths,\n            tokenizers,\n            lang_code=None,\n            sequence_max_length=sequence_max_length,\n            cls_token=cls_token,\n            sep_token=sep_token,\n            ignore_tag_idx=ignore_tag_idx,\n        )\n\n    @overrides\n    def _get_data(self, file_path):\n        _file = self.data_handler.read(file_path)\n        texts = _file.split(\"\\n\\n\")\n        texts.pop(0)\n\n        data = []\n        for text in texts:\n            tokens = text.split(\"\\n\")\n            if len(tokens) > 1:\n                example = list(zip(*[token.split() for token in tokens]))\n                data.append({\n                    \"sequence\": \" \".join(example[0]),\n                    self.tag_key: list(example[-1]),\n                })\n\n        return data, data\n\n    @overrides\n    def _get_tag_dicts(self, **kwargs):\n        data = kwargs[\"data\"]\n        tags = sorted(list(set(chain.from_iterable(d[self.tag_key] for d in data))))\n\n        tag_idx2text = {tag_idx: tag_text for tag_idx, tag_text in enumerate(tags)}\n        tag_text2idx = {tag_text: tag_idx for tag_idx, tag_text in tag_idx2text.items()}\n\n        return tag_idx2text, tag_text2idx\n"
  },
  {
    "path": "claf/data/reader/bert/glue/__init__.py",
    "content": ""
  },
  {
    "path": "claf/data/reader/bert/glue/cola.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.data.reader import SeqClsBertReader\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:cola_bert\")\nclass CoLABertReader(SeqClsBertReader):\n    \"\"\"\n    CoLA DataReader for BERT\n\n    * Args:\n        file_paths: .tsv file paths (train and dev)\n        tokenizers: defined tokenizers config\n    \"\"\"\n\n    CLASS_DATA = [0, 1]\n    METRIC_KEY = \"matthews_corr\"\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        input_type=\"bert\",\n        is_test=False,\n    ):\n\n        super(CoLABertReader, self).__init__(\n            file_paths,\n            tokenizers,\n            sequence_max_length,\n            class_key=None,\n            cls_token=cls_token,\n            sep_token=sep_token,\n            input_type=input_type,\n            is_test=is_test,\n        )\n\n    @overrides\n    def _get_data(self, file_path, **kwargs):\n        data_type = kwargs[\"data_type\"]\n\n        _file = self.data_handler.read(file_path)\n        lines = _file.split(\"\\n\")\n\n        data = []\n        for i, line in enumerate(lines):\n            line_tokens = line.split(\"\\t\")\n            if len(line_tokens) <= 3:\n                continue\n            data.append({\n                \"uid\": f\"cola-{file_path}-{data_type}-{i}\",\n                \"sequence_a\": line_tokens[3],\n                self.class_key: str(line_tokens[1])\n            })\n\n        return data\n"
  },
  {
    "path": "claf/data/reader/bert/glue/mnli.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.data.reader import SeqClsBertReader\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:mnli_bert\")\nclass MNLIBertReader(SeqClsBertReader):\n    \"\"\"\n    MNLI DataReader for BERT\n\n    * Args:\n        file_paths: .tsv file paths (train and dev)\n        tokenizers: defined tokenizers config\n    \"\"\"\n\n    CLASS_DATA = [\"contradiction\", \"entailment\", \"neutral\"]\n    METRIC_KEY = \"accuracy\"\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        input_type=\"bert\",\n        is_test=False,\n    ):\n\n        super(MNLIBertReader, self).__init__(\n            file_paths,\n            tokenizers,\n            sequence_max_length,\n            class_key=None,\n            cls_token=cls_token,\n            sep_token=sep_token,\n            input_type=input_type,\n            is_test=is_test,\n        )\n\n    @overrides\n    def _get_data(self, file_path, **kwargs):\n        data_type = kwargs[\"data_type\"]\n\n        _file = self.data_handler.read(file_path)\n        lines = _file.split(\"\\n\")\n\n        data = []\n        for i, line in enumerate(lines):\n            if i == 0:\n                continue\n            line_tokens = line.split(\"\\t\")\n            if len(line_tokens) <= 1:\n                continue\n            data.append({\n                \"uid\": f\"mnli-{file_path}-{data_type}-{i}\",\n                \"sequence_a\": line_tokens[8],\n                \"sequence_b\": line_tokens[9],\n                self.class_key: str(line_tokens[-1]),\n            })\n\n        return data\n"
  },
  {
    "path": "claf/data/reader/bert/glue/mrpc.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.data.reader import SeqClsBertReader\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:mrpc_bert\")\nclass MRPCBertReader(SeqClsBertReader):\n    \"\"\"\n    MRPC DataReader for BERT\n\n    * Args:\n        file_paths: .tsv file paths (train and dev)\n        tokenizers: defined tokenizers config\n    \"\"\"\n\n    CLASS_DATA = [0, 1]\n    METRIC_KEY = \"f1\"\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        input_type=\"bert\",\n        is_test=False,\n    ):\n\n        super(MRPCBertReader, self).__init__(\n            file_paths,\n            tokenizers,\n            sequence_max_length,\n            class_key=None,\n            cls_token=cls_token,\n            sep_token=sep_token,\n            input_type=input_type,\n            is_test=is_test,\n        )\n\n    @overrides\n    def _get_data(self, file_path, **kwargs):\n        data_type = kwargs[\"data_type\"]\n\n        _file = self.data_handler.read(file_path)\n        lines = _file.split(\"\\n\")\n\n        data = []\n        for i, line in enumerate(lines):\n            if i == 0:\n                continue\n            line_tokens = line.split(\"\\t\")\n            if len(line_tokens) != 5:\n                continue\n            data.append({\n                \"uid\": f\"mrpc-{file_path}-{data_type}-{i}\",\n                \"sequence_a\": line_tokens[3],\n                \"sequence_b\": line_tokens[4],\n                self.class_key: str(line_tokens[0]),\n            })\n\n        return data\n"
  },
  {
    "path": "claf/data/reader/bert/glue/qnli.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.data.reader import SeqClsBertReader\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:qnli_bert\")\nclass QNLIBertReader(SeqClsBertReader):\n    \"\"\"\n    QNLI DataReader for BERT\n\n    * Args:\n        file_paths: .tsv file paths (train and dev)\n        tokenizers: defined tokenizers config\n    \"\"\"\n\n    CLASS_DATA = [\"entailment\", \"not_entailment\"]\n    METRIC_KEY = \"accuracy\"\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        input_type=\"bert\",\n        is_test=False,\n    ):\n\n        super(QNLIBertReader, self).__init__(\n            file_paths,\n            tokenizers,\n            sequence_max_length,\n            class_key=None,\n            cls_token=cls_token,\n            sep_token=sep_token,\n            input_type=input_type,\n            is_test=is_test,\n        )\n\n    @overrides\n    def _get_data(self, file_path, **kwargs):\n        data_type = kwargs[\"data_type\"]\n\n        _file = self.data_handler.read(file_path)\n        lines = _file.split(\"\\n\")\n\n        data = []\n        for i, line in enumerate(lines):\n            if i == 0:\n                continue\n            line_tokens = line.split(\"\\t\")\n            if len(line_tokens) <= 1:\n                continue\n            data.append({\n                \"uid\": f\"qnli-{file_path}-{data_type}-{i}\",\n                \"sequence_a\": line_tokens[1],\n                \"sequence_b\": line_tokens[2],\n                self.class_key: str(line_tokens[-1]),\n            })\n\n        return data\n"
  },
  {
    "path": "claf/data/reader/bert/glue/qqp.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.data.reader import SeqClsBertReader\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:qqp_bert\")\nclass QQPBertReader(SeqClsBertReader):\n    \"\"\"\n    Quora Question Pairs DataReader for BERT\n\n    * Args:\n        file_paths: .tsv file paths (train and dev)\n        tokenizers: defined tokenizers config\n    \"\"\"\n\n    CLASS_DATA = [0, 1]\n    METRIC_KEY = \"f1\"\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        input_type=\"bert\",\n        is_test=False,\n    ):\n\n        super(QQPBertReader, self).__init__(\n            file_paths,\n            tokenizers,\n            sequence_max_length,\n            class_key=None,\n            cls_token=cls_token,\n            sep_token=sep_token,\n            input_type=input_type,\n            is_test=is_test,\n        )\n\n    @overrides\n    def _get_data(self, file_path, **kwargs):\n        data_type = kwargs[\"data_type\"]\n\n        _file = self.data_handler.read(file_path)\n        lines = _file.split(\"\\n\")\n\n        data = []\n        for i, line in enumerate(lines):\n            if i == 0:\n                continue\n            line_tokens = line.split(\"\\t\")\n            try:\n                data.append({\n                    \"uid\": f\"qqp-{file_path}-{data_type}-{i}\",\n                    \"sequence_a\": line_tokens[3],\n                    \"sequence_b\": line_tokens[4],\n                    self.class_key: str(line_tokens[5])\n                })\n            except IndexError:\n                continue\n\n        return data\n"
  },
  {
    "path": "claf/data/reader/bert/glue/rte.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.data.reader import SeqClsBertReader\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:rte_bert\")\nclass RTEBertReader(SeqClsBertReader):\n    \"\"\"\n    RTE (Recognizing Textual Entailment) DataReader for BERT\n\n    * Args:\n        file_paths: .tsv file paths (train and dev)\n        tokenizers: defined tokenizers config\n    \"\"\"\n\n    CLASS_DATA = [\"entailment\", \"not_entailment\"]\n    METRIC_KEY = \"accuracy\"\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        input_type=\"bert\",\n        is_test=False,\n    ):\n\n        super(RTEBertReader, self).__init__(\n            file_paths,\n            tokenizers,\n            sequence_max_length,\n            class_key=None,\n            cls_token=cls_token,\n            sep_token=sep_token,\n            input_type=input_type,\n            is_test=is_test,\n        )\n\n    @overrides\n    def _get_data(self, file_path, **kwargs):\n        data_type = kwargs[\"data_type\"]\n\n        _file = self.data_handler.read(file_path)\n        lines = _file.split(\"\\n\")\n\n        data = []\n        for i, line in enumerate(lines):\n            if i == 0:\n                continue\n            line_tokens = line.split(\"\\t\")\n            if len(line_tokens) <= 1:\n                continue\n            data.append({\n                \"uid\": f\"rte-{file_path}-{data_type}-{i}\",\n                \"sequence_a\": line_tokens[1],\n                \"sequence_b\": line_tokens[2],\n                self.class_key: str(line_tokens[-1]),\n            })\n\n        return data\n"
  },
  {
    "path": "claf/data/reader/bert/glue/sst.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.data.reader import SeqClsBertReader\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:sst_bert\")\nclass SSTBertReader(SeqClsBertReader):\n    \"\"\"\n    SST DataReader for BERT\n\n    * Args:\n        file_paths: .tsv file paths (train and dev)\n        tokenizers: defined tokenizers config\n    \"\"\"\n\n    CLASS_DATA = [0, 1]\n    METRIC_KEY = \"accuracy\"\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        input_type=\"bert\",\n        is_test=False,\n    ):\n\n        super(SSTBertReader, self).__init__(\n            file_paths,\n            tokenizers,\n            sequence_max_length,\n            class_key=None,\n            cls_token=cls_token,\n            sep_token=sep_token,\n            input_type=input_type,\n            is_test=is_test,\n        )\n\n    @overrides\n    def _get_data(self, file_path, **kwargs):\n        data_type = kwargs[\"data_type\"]\n\n        _file = self.data_handler.read(file_path)\n        lines = _file.split(\"\\n\")\n\n        if data_type == \"train\":\n            lines.pop(0)\n\n        data = []\n        for i, line in enumerate(lines):\n            if i == 0:\n                continue\n            line_tokens = line.split(\"\\t\")\n            if len(line_tokens) <= 1:\n                continue\n            data.append({\n                \"uid\": f\"sst-{file_path}-{data_type}-{i}\",\n                \"sequence_a\": line_tokens[0],\n                self.class_key: str(line_tokens[1]),\n            })\n\n        return data\n"
  },
  {
    "path": "claf/data/reader/bert/glue/stsb.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.data.reader import RegressionBertReader\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:stsb_bert\")\nclass STSBBertReader(RegressionBertReader):\n    \"\"\"\n    STS-B (Semantic Textual Similarity Benchmark) DataReader for BERT\n\n    * Args:\n        file_paths: .tsv file paths (train and dev)\n        tokenizers: defined tokenizers config\n    \"\"\"\n\n    METRIC_KEY = \"pearson_spearman_corr\"\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        input_type=\"bert\",\n        is_test=False,\n    ):\n\n        super(STSBBertReader, self).__init__(\n            file_paths,\n            tokenizers,\n            sequence_max_length,\n            label_key=\"score\",\n            cls_token=cls_token,\n            sep_token=sep_token,\n            input_type=input_type,\n            is_test=is_test,\n        )\n\n    @overrides\n    def _get_data(self, file_path, **kwargs):\n        data_type = kwargs[\"data_type\"]\n\n        _file = self.data_handler.read(file_path)\n        lines = _file.split(\"\\n\")\n\n        data = []\n        for i, line in enumerate(lines):\n            if i == 0:\n                continue\n            line_tokens = line.split(\"\\t\")\n            if len(line_tokens) <= 1:\n                continue\n            data.append({\n                \"uid\": f\"stsb-{file_path}-{data_type}-{i}\",\n                \"sequence_a\": line_tokens[7],\n                \"sequence_b\": line_tokens[8],\n                \"score\": float(line_tokens[-1]),\n            })\n\n        return data\n"
  },
  {
    "path": "claf/data/reader/bert/glue/wnli.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.data.reader import SeqClsBertReader\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:wnli_bert\")\nclass WNLIBertReader(SeqClsBertReader):\n    \"\"\"\n    WNLI (Winograd NLI) DataReader for BERT\n\n    * Args:\n        file_paths: .tsv file paths (train and dev)\n        tokenizers: defined tokenizers config\n    \"\"\"\n\n    CLASS_DATA = [0, 1]\n    METRIC_KEY = \"accuracy\"\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        input_type=\"bert\",\n        is_test=False,\n    ):\n\n        super(WNLIBertReader, self).__init__(\n            file_paths,\n            tokenizers,\n            sequence_max_length,\n            class_key=None,\n            cls_token=cls_token,\n            sep_token=sep_token,\n            input_type=input_type,\n            is_test=is_test,\n        )\n\n    @overrides\n    def _get_data(self, file_path, **kwargs):\n        data_type = kwargs[\"data_type\"]\n\n        _file = self.data_handler.read(file_path)\n        lines = _file.split(\"\\n\")\n\n        data = []\n        for i, line in enumerate(lines):\n            if i == 0:\n                continue\n            line_tokens = line.split(\"\\t\")\n            if len(line_tokens) <= 1:\n                continue\n            data.append({\n                \"uid\": f\"wnli-{file_path}-{data_type}-{i}\",\n                \"sequence_a\": line_tokens[1],\n                \"sequence_b\": line_tokens[2],\n                self.class_key: str(line_tokens[-1]),\n            })\n\n        return data\n"
  },
  {
    "path": "claf/data/reader/bert/multi_task.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.config.namespace import NestedNamespace\nfrom claf.config.registry import Registry\nfrom claf.data.dataset import MultiTaskBertDataset\nfrom claf.data.dto import Helper\nfrom claf.data.reader.base import DataReader\nfrom claf.decorator import register\nfrom claf.factory import DataReaderFactory\nfrom claf.model.multi_task.category import TaskCategory\n\nfrom .seq_cls import SeqClsBertReader\nfrom .squad import SQuADBertReader\nfrom .regression import RegressionBertReader\nfrom .tok_cls import TokClsBertReader\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:multitask_bert\")\nclass MultiTaskBertReader(DataReader):\n    \"\"\"\n    DataReader for Multi-Task using BERT\n\n    * Args:\n        file_paths: .json file paths (train and dev)\n        tokenizers: define tokenizers config (subword)\n\n    * Kwargs:\n        class_key: name of the label in .json file to use for classification\n    \"\"\"\n\n    CLASS_DATA = None\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        batch_sizes=[],\n        readers=[],\n    ):\n\n        super(MultiTaskBertReader, self).__init__(file_paths, MultiTaskBertDataset)\n        assert len(batch_sizes) == len(readers)\n\n        self.registry = Registry()\n        self.text_columns = [\"bert_input\"]\n        self.data_reader_factory = DataReaderFactory()\n\n        self.tokenizers = tokenizers\n        self.batch_sizes = batch_sizes\n\n        self.dataset_batches = []\n        self.dataset_helpers = []\n        self.tasks = []\n\n        for reader in readers:\n            data_reader = self.make_data_reader(reader)\n            batches, helpers = data_reader.read()\n\n            self.dataset_batches.append(batches)\n            self.dataset_helpers.append(helpers)\n\n            dataset_name = reader[\"dataset\"]\n            helper = helpers[\"train\"]\n            task = self.make_task_by_reader(dataset_name, data_reader, helper)\n            self.tasks.append(task)\n\n    def make_data_reader(self, config_dict):\n        config = NestedNamespace()\n        config.load_from_json(config_dict)\n        config.tokenizers = self.tokenizers\n\n        return self.data_reader_factory.create(config)\n\n    def make_task_by_reader(self, name, data_reader, helper):\n        task = {}\n        task[\"name\"] = name\n        task[\"metric_key\"] = data_reader.METRIC_KEY\n\n        if isinstance(data_reader, SeqClsBertReader):\n            task[\"category\"] = TaskCategory.SEQUENCE_CLASSIFICATION\n            task[\"num_label\"] = helper[\"model\"][\"num_classes\"]\n        elif isinstance(data_reader, SQuADBertReader):\n            task[\"category\"] = TaskCategory.READING_COMPREHENSION\n            task[\"num_label\"] = None\n        elif isinstance(data_reader, RegressionBertReader):\n            task[\"category\"] = TaskCategory.REGRESSION\n            task[\"num_label\"] = 1\n        elif isinstance(data_reader, TokClsBertReader):\n            task[\"category\"] = TaskCategory.TOKEN_CLASSIFICATION\n            task[\"num_label\"] = helper[\"model\"][\"num_tags\"]\n        else:\n            raise ValueError(\"Check data_reader.\")\n\n        task[\"model_params\"] = helper.get(\"model\", {})\n        return task\n\n    @overrides\n    def _read(self, file_path, data_type=None):\n        \"\"\" TODO: Doc-String \"\"\"\n\n        batches = []\n        helper = Helper()\n        helper.task_helpers = []\n\n        for b in self.dataset_batches:\n            batches.append(b[data_type])\n        for i, h in enumerate(self.dataset_helpers):\n            task_helper = h[data_type]\n            task_helper[\"batch_size\"] = self.batch_sizes[i]\n\n            helper.task_helpers.append(task_helper)\n\n        helper.set_model_parameter({\n            \"tasks\": self.tasks,\n        })\n        return batches, helper.to_dict()\n\n    def read_one_example(self, inputs):\n        pass\n"
  },
  {
    "path": "claf/data/reader/bert/regression.py",
    "content": "\nimport logging\nimport json\nimport uuid\n\nfrom overrides import overrides\nfrom tqdm import tqdm\n\nfrom claf.data.dataset import RegressionBertDataset\nfrom claf.data.dto import BertFeature, Helper\nfrom claf.data.reader.base import DataReader\nfrom claf.data import utils\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:regression_bert\")\nclass RegressionBertReader(DataReader):\n    \"\"\"\n    Regression DataReader for BERT\n\n    * Args:\n        file_paths: .tsv file paths (train and dev)\n        tokenizers: defined tokenizers config\n    \"\"\"\n\n    METRIC_KEY = None\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        label_key=\"score\",\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        input_type=\"bert\",\n        is_test=False,\n    ):\n\n        super(RegressionBertReader, self).__init__(file_paths, RegressionBertDataset)\n\n        self.sequence_max_length = sequence_max_length\n        self.text_columns = [\"bert_input\", \"sequence\"]\n\n        # Tokenizers\n        # - BERT: Word + Subword or Word + Char\n        # - RoBERTa: BPE\n\n        if input_type == \"bert\":\n            self.tokenizer = tokenizers.get(\"subword\", None)\n            if self.tokenizer is None:\n                self.tokenizer[\"char\"]\n        elif input_type == \"roberta\":\n            self.tokenizer = tokenizers[\"bpe\"]\n        else:\n            raise ValueError(\"'bert' and 'roberta' are available input_type.\")\n\n        self.label_key = label_key\n        self.cls_token = cls_token\n        self.sep_token = sep_token\n        self.input_type = input_type\n        self.is_test = is_test\n\n    def _get_data(self, file_path, **kwargs):\n        data = self.data_handler.read(file_path)\n        seq_cls_data = json.loads(data)\n\n        return seq_cls_data[\"data\"]\n\n    @overrides\n    def _read(self, file_path, data_type=None):\n        \"\"\"\n        .json file structure should be something like this:\n\n        {\n            \"data\": [\n                {\n                    \"sequence_a\": \"what a wonderful day!\",\n                    \"sequence_b\": \"what a great day!\",\n                    \"score\": 0.9\n                },\n                ...\n            ]\n        }\n        \"\"\"\n\n        data = self._get_data(file_path, data_type=data_type)\n\n        helper = Helper(**{\n            \"file_path\": file_path,\n            \"cls_token\": self.cls_token,\n            \"sep_token\": self.sep_token,\n            \"dataset\": RegressionBertDataset,\n            \"metric_key\": self.METRIC_KEY,\n        })\n\n        features, labels = [], []\n\n        for example in tqdm(data, desc=data_type):\n            sequence_a = utils.get_sequence_a(example)\n            sequence_b = example.get(\"sequence_b\", None)\n\n            sequence_a_tokens = self.tokenizer.tokenize(sequence_a)\n            sequence_b_tokens = None\n            if sequence_b:\n                sequence_b_tokens = self.tokenizer.tokenize(sequence_b)\n\n            bert_input = utils.make_bert_input(\n                sequence_a,\n                sequence_b,\n                self.tokenizer,\n                max_seq_length=self.sequence_max_length,\n                data_type=data_type,\n                cls_token=self.cls_token,\n                sep_token=self.sep_token,\n                input_type=self.input_type,\n            )\n\n            if bert_input is None:\n                continue\n\n            if \"uid\" in example:\n                data_uid = example[\"uid\"]\n            else:\n                data_uid = str(uuid.uuid1())\n\n            feature_row = {\n                \"id\": data_uid,\n                \"bert_input\": bert_input,\n            }\n            features.append(feature_row)\n\n            score = example[self.label_key]\n            label_row = {\n                \"id\": data_uid,\n                \"score\": score,\n            }\n            labels.append(label_row)\n\n            helper.set_example(data_uid, {\n                \"sequence_a\": sequence_a,\n                \"sequence_a_tokens\": sequence_a_tokens,\n                \"sequence_b\": sequence_b,\n                \"sequence_b_tokens\": sequence_b_tokens,\n                \"score\": score,\n            })\n\n            if self.is_test and len(features) >= 10:\n                break\n\n        return utils.make_batch(features, labels), helper.to_dict()\n\n    def read_one_example(self, inputs):\n        \"\"\" inputs keys: sequence_a and sequence_b \"\"\"\n        sequence_a = utils.get_sequence_a(inputs)\n        sequence_b = inputs.get(\"sequence_b\", None)\n\n        bert_feature = BertFeature()\n        bert_feature.set_input_with_speical_token(\n            sequence_a,\n            sequence_b,\n            self.tokenizer,\n            max_seq_length=self.sequence_max_length,\n            data_type=\"predict\",\n            cls_token=self.cls_token,\n            sep_token=self.sep_token,\n            input_type=self.input_type,\n        )\n\n        features = [bert_feature.to_dict()]\n        helper = {}\n        return features, helper\n"
  },
  {
    "path": "claf/data/reader/bert/seq_cls.py",
    "content": "\nimport json\nimport logging\nimport uuid\n\nfrom overrides import overrides\nfrom tqdm import tqdm\n\nfrom claf.data.dataset import SeqClsBertDataset\nfrom claf.data.dto import BertFeature, Helper\nfrom claf.data.reader.base import DataReader\nfrom claf.data import utils\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:seq_cls_bert\")\nclass SeqClsBertReader(DataReader):\n    \"\"\"\n    DataReader for Sequence (Single and Pair) Classification using BERT\n\n    * Args:\n        file_paths: .json file paths (train and dev)\n        tokenizers: define tokenizers config (subword)\n\n    * Kwargs:\n        class_key: name of the label in .json file to use for classification\n    \"\"\"\n\n    CLASS_DATA = None\n    METRIC_KEY = None\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        sequence_max_length=None,\n        class_key=\"class\",\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        input_type=\"bert\",\n        is_test=False,\n    ):\n\n        super(SeqClsBertReader, self).__init__(file_paths, SeqClsBertDataset)\n\n        self.sequence_max_length = sequence_max_length\n        self.text_columns = [\"bert_input\", \"sequence\"]\n\n        # Tokenizers\n        # - BERT: Word + Subword or Word + Char\n        # - RoBERTa: BPE\n\n        if input_type == \"bert\":\n            self.tokenizer = tokenizers.get(\"subword\", None)\n            if self.tokenizer is None:\n                self.tokenizer[\"char\"]\n        elif input_type == \"roberta\":\n            self.tokenizer = tokenizers[\"bpe\"]\n        else:\n            raise ValueError(\"'bert' and 'roberta' are available input_type.\")\n\n        self.class_key = class_key\n        self.cls_token = cls_token\n        self.sep_token = sep_token\n        self.input_type = input_type\n        self.is_test = is_test\n\n    def _get_data(self, file_path, **kwargs):\n        data = self.data_handler.read(file_path)\n        seq_cls_data = json.loads(data)\n\n        return seq_cls_data[\"data\"]\n\n    def _get_class_dicts(self, **kwargs):\n        seq_cls_data = kwargs[\"data\"]\n        if self.class_key is None:\n            class_data = self.CLASS_DATA\n        else:\n            class_data = [item[self.class_key] for item in seq_cls_data]\n            class_data = list(set(class_data))  # remove duplicate\n\n        class_idx2text = {\n            class_idx: str(class_text)\n            for class_idx, class_text in enumerate(class_data)\n        }\n        class_text2idx = {class_text: class_idx for class_idx, class_text in class_idx2text.items()}\n\n        return class_idx2text, class_text2idx\n\n    @overrides\n    def _read(self, file_path, data_type=None):\n        \"\"\"\n        .json file structure should be something like this:\n\n        {\n            \"data\": [\n                {\n                    \"sequence\": \"what a wonderful day!\",\n                    \"emotion\": \"happy\"\n                },\n                ...\n            ],\n            \"emotion\": [  // class_key\n                \"angry\",\n                \"happy\",\n                \"sad\",\n                ...\n            ]\n        }\n        \"\"\"\n\n        data = self._get_data(file_path, data_type=data_type)\n        class_idx2text, class_text2idx = self._get_class_dicts(data=data)\n\n        helper = Helper(**{\n            \"file_path\": file_path,\n            \"class_idx2text\": class_idx2text,\n            \"class_text2idx\": class_text2idx,\n            \"cls_token\": self.cls_token,\n            \"sep_token\": self.sep_token,\n            \"dataset\": SeqClsBertDataset,\n            \"metric_key\": self.METRIC_KEY,\n        })\n        helper.set_model_parameter({\n            \"num_classes\": len(class_idx2text),\n        })\n        helper.set_predict_helper({\n            \"class_idx2text\": class_idx2text,\n        })\n\n        features, labels = [], []\n\n        for example in tqdm(data, desc=data_type):\n            sequence_a = utils.get_sequence_a(example)\n            sequence_b = example.get(\"sequence_b\", None)\n\n            sequence_a_tokens = self.tokenizer.tokenize(sequence_a)\n            sequence_b_tokens = None\n            if sequence_b:\n                sequence_b_tokens = self.tokenizer.tokenize(sequence_b)\n\n            bert_input = utils.make_bert_input(\n                sequence_a,\n                sequence_b,\n                self.tokenizer,\n                max_seq_length=self.sequence_max_length,\n                data_type=data_type,\n                cls_token=self.cls_token,\n                sep_token=self.sep_token,\n                input_type=self.input_type,\n            )\n\n            if bert_input is None:\n                continue\n\n            if \"uid\" in example:\n                data_uid = example[\"uid\"]\n            else:\n                data_uid = str(uuid.uuid1())\n\n            # token_type(segment_ids) will be added in dataset\n            feature_row = {\n                \"id\": data_uid,\n                \"bert_input\": bert_input,\n            }\n            features.append(feature_row)\n\n            class_text = example[self.class_key]\n            label_row = {\n                \"id\": data_uid,\n                \"class_idx\": class_text2idx[class_text],\n                \"class_text\": class_text,\n            }\n            labels.append(label_row)\n\n            helper.set_example(data_uid, {\n                \"sequence_a\": sequence_a,\n                \"sequence_a_tokens\": sequence_a_tokens,\n                \"sequence_b\": sequence_b,\n                \"sequence_b_tokens\": sequence_b_tokens,\n                \"class_idx\": class_text2idx[class_text],\n                \"class_text\": class_text,\n            })\n\n            if self.is_test and len(features) >= 10:\n                break\n\n        return utils.make_batch(features, labels), helper.to_dict()\n\n    def read_one_example(self, inputs):\n        \"\"\" inputs keys: sequence_a and sequence_b \"\"\"\n        sequence_a = utils.get_sequence_a(inputs)\n        sequence_b = inputs.get(\"sequence_b\", None)\n\n        bert_feature = BertFeature()\n        bert_feature.set_input_with_speical_token(\n            sequence_a,\n            sequence_b,\n            self.tokenizer,\n            max_seq_length=self.sequence_max_length,\n            data_type=\"predict\",\n            cls_token=self.cls_token,\n            sep_token=self.sep_token,\n            input_type=self.input_type,\n        )\n\n        features = [bert_feature.to_dict()]\n        helper = {}\n        return features, helper\n"
  },
  {
    "path": "claf/data/reader/bert/squad.py",
    "content": "\nfrom collections import Counter\nimport json\nimport logging\nimport re\n\nfrom overrides import overrides\nfrom tqdm import tqdm\n\nfrom claf.data.dataset import SQuADBertDataset\nfrom claf.data.dto import BertFeature, Helper\nfrom claf.data.reader.base import DataReader\nfrom claf.data import utils\nfrom claf.decorator import register\nfrom claf.metric.squad_v1_official import normalize_answer\nfrom claf.tokens.tokenizer import SentTokenizer, WordTokenizer\n\nlogger = logging.getLogger(__name__)\n\n\nclass Token:\n    def __init__(self, text, text_span=None):\n        self.text = text\n        self.text_span = text_span\n\n\n@register(\"reader:squad_bert\")\nclass SQuADBertReader(DataReader):\n    \"\"\"\n    SQuAD DataReader for BERT\n\n    * Args:\n        file_paths: .json file paths (train and dev)\n        tokenizers: defined tokenizers config (char/word)\n    \"\"\"\n\n    METRIC_KEY = \"f1\"\n\n    def __init__(\n        self,\n        file_paths,\n        lang_code,\n        tokenizers,\n        max_seq_length=384,\n        context_stride=128,\n        max_question_length=64,\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n    ):\n\n        super(SQuADBertReader, self).__init__(file_paths, SQuADBertDataset)\n        self.lang_code = lang_code\n        self.max_seq_length = max_seq_length\n        self.context_stride = context_stride\n        self.max_question_length = max_question_length\n        self.cls_token = cls_token\n        self.sep_token = sep_token\n\n        self.text_columns = [\"bert_input\", \"context\", \"question\"]\n\n        sent_tokenizer = SentTokenizer(\"punkt\", {})\n        if lang_code == \"ko\":\n            self.word_tokenizer = WordTokenizer(\"mecab_ko\", sent_tokenizer, split_with_regex=True)\n        else:\n            self.word_tokenizer = WordTokenizer(\n                \"treebank_en\", sent_tokenizer, split_with_regex=True\n            )\n\n        if tokenizers[\"bpe\"] is not None:\n            self.sub_level_tokenizer = tokenizers[\"bpe\"]  # RoBERTa\n        elif tokenizers[\"subword\"] is not None:\n            self.sub_level_tokenizer = tokenizers[\"subword\"]  # BERT\n        else:\n            raise ValueError(\"'bpe' or 'subword' tokenizer is required.\")\n\n    @overrides\n    def _read(self, file_path, data_type=None):\n        word_tokenized_error_count, sub_level_tokenized_error_count = 0, 0\n\n        data = self.data_handler.read(file_path)\n        squad = json.loads(data)\n        if \"data\" in squad:\n            squad = squad[\"data\"]\n\n        helper = Helper(**{\n            \"file_path\": file_path,\n            \"raw_dataset\": squad,\n            \"cls_token\": self.cls_token,\n            \"sep_token\": self.sep_token,\n            \"dataset\": SQuADBertDataset,\n        })\n        helper.set_model_parameter({\n            \"lang_code\": self.lang_code,\n        })\n\n        features, labels = [], []\n        is_training = data_type == \"train\"\n\n        for article in tqdm(squad, desc=data_type):\n            for paragraph in article[\"paragraphs\"]:\n                context_text = paragraph[\"context\"].replace(\"``\", '\" ').replace(\"''\", '\" ')\n                context_tokens = self.word_tokenizer.tokenize(context_text)\n\n                context_spans, char_to_word_offset = self._convert_to_spans(\n                    context_text, context_tokens\n                )\n                context_tokens = [\n                    Token(text, span) for (text, span) in zip(context_tokens, context_spans)\n                ]\n\n                context_sub_tokens = []\n                for token in context_tokens:\n                    for sub_token in self.sub_level_tokenizer.tokenize(token.text):\n                        context_sub_tokens.append(Token(sub_token, token.text_span))\n\n                for qa in paragraph[\"qas\"]:\n                    question_text = qa[\"question\"]\n                    question_text = \" \".join(self.word_tokenizer.tokenize(question_text))\n                    question_sub_tokens = [\n                        Token(sub_token) for sub_token in self.sub_level_tokenizer.tokenize(question_text)\n                    ]\n\n                    id_ = qa[\"id\"]\n                    answers = qa[\"answers\"]\n\n                    answer_texts, answer_indices = [], []\n\n                    if qa.get(\"is_impossible\", None):\n                        answers = qa[\"plausible_answers\"]\n                        answerable = 0\n                    else:\n                        answers = qa[\"answers\"]\n                        answerable = 1\n\n                    for answer in answers:\n                        answer_start = answer[\"answer_start\"]\n                        answer_end = answer_start + len(answer[\"text\"]) - 1\n\n                        answer_texts.append(answer[\"text\"])\n                        answer_indices.append((answer_start, answer_end))\n\n                    if len(answer_indices) > 0:\n                        answer_char_start, answer_char_end = self._find_one_most_common(\n                            answer_indices\n                        )\n                        answer_word_start = char_to_word_offset[answer_char_start]\n                        answer_word_end = char_to_word_offset[answer_char_end]\n\n                        char_answer_text = context_text[answer_char_start : answer_char_end + 1]\n                        word_answer_text = context_text[\n                            context_spans[answer_word_start][0] : context_spans[answer_word_end][1]\n                        ]\n\n                        if not self._is_rebuild(char_answer_text, word_answer_text):\n                            logger.warning(f\"word_tokenized_error: {char_answer_text}  ###  {word_answer_text}\")\n                            word_tokenized_error_count += 1\n                    else:\n                        # Unanswerable\n                        answers = [\"<noanswer>\"]\n                        answer_char_start, answer_char_end = -1, -1\n                        answer_word_start, answer_word_end = -1, -1\n\n                    bert_features, bert_labels = self._make_features_and_labels(\n                        context_sub_tokens,\n                        question_sub_tokens,\n                        answer_char_start,\n                        answer_char_end + 1,\n                    )\n\n                    for (index, (feature, label)) in enumerate(zip(bert_features, bert_labels)):\n                        bert_tokens = feature\n                        answer_start, answer_end = label\n\n                        if is_training and (\n                            answer_start < 0\n                            or answer_start >= len(bert_tokens)\n                            or answer_end >= len(bert_tokens)\n                            or bert_tokens[answer_start].text_span is None\n                            or bert_tokens[answer_end].text_span is None\n                        ):\n                            continue\n\n                        if is_training:\n                            char_start = bert_tokens[answer_start].text_span[0]\n                            char_end = bert_tokens[answer_end].text_span[1]\n                            bert_answer = context_text[char_start:char_end]\n\n                            if char_answer_text != bert_answer:\n                                logger.warning(f\"sub_level_tokenized_error: {char_answer_text} ### {word_answer_text})\")\n                                sub_level_tokenized_error_count += 1\n\n                        feature_row = {\n                            \"bert_input\": [token.text for token in bert_tokens],\n                            \"bert_token\": bert_tokens,\n                        }\n                        features.append(feature_row)\n\n                        bert_id = id_ + f\"#{index}\"\n                        label_row = {\n                            \"id\": bert_id,  # question_id + bert_index\n                            \"answer_texts\": \"\\t\".join(answer_texts),\n                            \"answer_start\": answer_start,\n                            \"answer_end\": answer_end,\n                            \"answerable\": answerable,\n                        }\n                        labels.append(label_row)\n\n                        if id_ not in helper.examples:\n                            helper.set_example(id_, {\n                                \"context\": context_text,\n                                \"question\": question_text,\n                                \"answers\": answer_texts,\n                            })\n                        helper.set_example(id_, {\n                            f\"bert_tokens_{index}\": bert_tokens,\n                        }, update=True)\n\n        logger.info(\n            f\"tokenized_error_count - word: {word_tokenized_error_count} | sub_level: {sub_level_tokenized_error_count}\"\n        )\n        return utils.make_batch(features, labels), helper.to_dict()\n\n    @overrides\n    def read_one_example(self, inputs):\n        \"\"\" inputs keys: question, context \"\"\"\n        context_text = inputs[\"context\"].replace(\"``\", '\" ').replace(\"''\", '\" ')\n        tokenized_context = self.word_tokenizer.tokenize(context_text)\n        context_spans, char_to_word_offset = self._convert_to_spans(context_text, tokenized_context)\n        context_tokens = [\n            Token(text, span) for (text, span) in zip(tokenized_context, context_spans)\n        ]\n\n        context_sub_tokens = []\n        for token in context_tokens:\n            for sub_token in self.sub_level_tokenizer.tokenize(token.text):\n                context_sub_tokens.append(Token(sub_token, token.text_span))\n\n        question_text = inputs[\"question\"]\n        question_text = \" \".join(self.word_tokenizer.tokenize(question_text))\n        question_sub_tokens = [\n            Token(sub_token) for sub_token in self.sub_level_tokenizer.tokenize(question_text)\n        ]\n\n        bert_tokens, _ = self._make_features_and_labels(\n            context_sub_tokens, question_sub_tokens, -1, -1\n        )\n\n        features = []\n        helper = Helper(**{\n            \"bert_token\": [],\n            \"tokenized_context\": tokenized_context,\n            \"token_key\": \"tokenized_context\"  # for 1-example inference latency key\n        })\n\n        for bert_token in bert_tokens:\n            bert_input = [token.text for token in bert_token]\n\n            bert_feature = BertFeature()\n            bert_feature.set_input(bert_input)\n\n            features.append(bert_feature.to_dict())\n            helper.bert_token.append(bert_token)\n        return features, helper.to_dict()\n\n    def _find_one_most_common(self, answers):\n        answer_counter = Counter(answers)\n        value = answer_counter.most_common(1)[0][0]\n        return value[0], value[1]\n\n    def _convert_to_spans(self, raw_text, tokenized_text):\n        \"\"\" Convert a tokenized version of `raw_text` into a series character spans referencing the `raw_text` \"\"\"\n        double_quote_re = re.compile(\"\\\"|``|''\")\n\n        curr_idx = 0\n        spans = []\n        char_to_words = [-1 for _ in range(len(raw_text))]\n\n        for token in tokenized_text:\n            # Tokenizer might transform double quotes, for this case search over several\n            # possible encodings\n            if double_quote_re.match(token):\n                span = double_quote_re.search(raw_text[curr_idx:])\n                temp = curr_idx + span.start()\n                token_length = span.end() - span.start()\n            else:\n                temp = raw_text.find(token, curr_idx)\n                token_length = len(token)\n            if temp < curr_idx:\n                joined_tokenized_text = \" \".join(tokenized_text)\n                raise ValueError(\n                    f\"\\n{raw_text} \\n\\n{joined_tokenized_text} \\nToken: {token}, Index: {temp}, Current Index: {curr_idx}\"\n                )\n            curr_idx = temp\n            spans.append((curr_idx, curr_idx + token_length))\n            curr_idx += token_length\n\n            start, end = spans[-1]\n            for i in range(start, end):\n                char_to_words[i] = len(spans) - 1\n\n        for i in range(len(raw_text)):\n            if char_to_words[i] != -1:\n                continue\n\n            for j, span in enumerate(spans):\n                start, end = span\n                if start < i <= end:\n                    char_to_words[i] = j\n\n        return spans, char_to_words\n\n    def _is_rebuild(self, char_answer_text, word_answer_text):\n        norm_char_answer_text = normalize_answer(char_answer_text)\n        norm_word_answer_text = normalize_answer(word_answer_text)\n\n        if norm_char_answer_text != norm_word_answer_text:\n            return False\n        else:\n            return True\n\n    def _make_features_and_labels(\n        self, context_sub_tokens, question_sub_tokens, answer_char_start, answer_char_end\n    ):\n        # sub_token, context_stride logic with context_max_length\n        context_max_length = (\n            self.max_seq_length - len(question_sub_tokens) - 3\n        )  # [CLS], [SEP], [SEP]\n        start_offset = 0\n\n        context_stride_spans = []\n        while start_offset < len(context_sub_tokens):\n            strided_context_length = len(context_sub_tokens) - start_offset\n            if strided_context_length > context_max_length:\n                strided_context_length = context_max_length\n\n            context_stride_spans.append((start_offset, strided_context_length))\n            if start_offset + strided_context_length == len(context_sub_tokens):\n                break\n            start_offset += min(strided_context_length, self.context_stride)\n\n        features, labels = [], []\n        for (start_offset, length) in context_stride_spans:\n            bert_tokens = [Token(self.cls_token)]\n            bert_tokens += question_sub_tokens[: self.max_question_length]\n            bert_tokens += [Token(self.sep_token)]\n            bert_tokens += context_sub_tokens[start_offset : start_offset + length]\n            bert_tokens += [Token(self.sep_token)]\n            features.append(bert_tokens)\n\n            if answer_char_start == -1 and answer_char_end == -1:\n                answer_start, answer_end = 0, 0\n            else:\n                answer_start, answer_end = self._get_closest_answer_spans(\n                    bert_tokens, answer_char_start, answer_char_end\n                )\n\n            labels.append((answer_start, answer_end))\n        return features, labels\n\n    def _get_closest_answer_spans(self, tokens, char_start, char_end):\n        NONE_VALUE, DISTANCE_THRESHOLD = -100, 2\n\n        text_spans = [\n            (NONE_VALUE, NONE_VALUE) if token.text_span is None else token.text_span\n            for token in tokens\n        ]\n\n        start_distances = [abs(span[0] - char_start) for span in text_spans]\n        end_distances = [abs(span[1] - char_end) for span in text_spans]\n\n        min_start_distance, min_end_distance = min(start_distances), min(end_distances)\n        if min_start_distance < DISTANCE_THRESHOLD:\n            answer_start = start_distances.index(min_start_distance)\n        else:\n            answer_start = 0\n\n        if min_end_distance < DISTANCE_THRESHOLD:\n            answer_end = end_distances.index(min_end_distance)\n            start_from = answer_end + 1\n            try:\n                # e.g.) end_distances: [3, 1, 1, 4], min_end_distance = 1 => use 2 index instead of 1\n                answer_end = end_distances.index(min_end_distance, start_from)\n            except ValueError:\n                pass\n        else:\n            answer_end = 0\n        return answer_start, answer_end\n"
  },
  {
    "path": "claf/data/reader/bert/tok_cls.py",
    "content": "\nfrom itertools import chain\nimport json\nimport logging\nimport uuid\n\nfrom overrides import overrides\nfrom tqdm import tqdm\n\nfrom claf.data.dataset import TokClsBertDataset\nfrom claf.data.dto import BertFeature, Helper\nfrom claf.data.reader.base import DataReader\nfrom claf.decorator import register\nfrom claf.tokens.tokenizer import WordTokenizer\nimport claf.data.utils as utils\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:tok_cls_bert\")\nclass TokClsBertReader(DataReader):\n    \"\"\"\n    DataReader for Token Classification using BERT\n\n    * Args:\n        file_paths: .json file paths (train and dev)\n        tokenizers: define tokenizers config (subword)\n\n    * Kwargs:\n        lang_code: language code: set as 'ko' if using BERT model trained with mecab-tokenized data\n        tag_key: name of the label in .json file to use for classification\n        ignore_tag_idx: prediction results that have this number as ground-truth idx are ignored\n    \"\"\"\n\n    def __init__(\n        self,\n        file_paths,\n        tokenizers,\n        lang_code=None,\n        sequence_max_length=None,\n        tag_key=\"tags\",\n        cls_token=\"[CLS]\",\n        sep_token=\"[SEP]\",\n        ignore_tag_idx=-1,\n    ):\n\n        super(TokClsBertReader, self).__init__(file_paths, TokClsBertDataset)\n\n        self.sequence_max_length = sequence_max_length\n        self.text_columns = [\"bert_input\", \"sequence\"]\n\n        if \"subword\" not in tokenizers:\n            raise ValueError(\"WordTokenizer and SubwordTokenizer is required.\")\n\n        self.subword_tokenizer = tokenizers[\"subword\"]\n\n        self.sent_tokenizer = tokenizers[\"sent\"]\n        self.word_tokenizer = tokenizers[\"word\"]\n        if lang_code == \"ko\":\n            self.mecab_tokenizer = WordTokenizer(\"mecab_ko\", self.sent_tokenizer, split_with_regex=False)\n\n        self.lang_code = lang_code\n        self.tag_key = tag_key\n        self.cls_token = cls_token\n        self.sep_token = sep_token\n        self.ignore_tag_idx = ignore_tag_idx\n\n    def _get_data(self, file_path):\n        data = self.data_handler.read(file_path)\n        tok_cls_data = json.loads(data)\n\n        return tok_cls_data[\"data\"]\n\n    def _get_tag_dicts(self, **kwargs):\n        data = kwargs[\"data\"]\n\n        if type(data) == dict:\n            tag_idx2text = {tag_idx: tag_text for tag_idx, tag_text in enumerate(data[self.tag_key])}\n        elif type(data) == list:\n            tags = sorted(list(set(chain.from_iterable(d[self.tag_key] for d in data))))\n            tag_idx2text = {tag_idx: tag_text for tag_idx, tag_text in enumerate(tags)}\n        else:\n            raise ValueError(\"check _get_data return type.\")\n\n        tag_text2idx = {tag_text: tag_idx for tag_idx, tag_text in tag_idx2text.items()}\n\n        return tag_idx2text, tag_text2idx\n\n    @overrides\n    def _read(self, file_path, data_type=None):\n        \"\"\"\n        .json file structure should be something like this:\n\n        {\n            \"data\": [\n                {\n                    \"sequence\": \"i'm looking for a flight from New York to London.\",\n                    \"slots\": [\"O\", \"O\", \"O\", \"O\", \"O\", \"O\", \"B-city.dept\", \"I-city.dept\" \"O\", \"B-city.dest\"]\n                    // the number of tokens in sequence.split() and tags must match\n                },\n                ...\n            ],\n            \"slots\": [  // tag_key\n                \"O\",    // tags should be in IOB format\n                \"B-city.dept\",\n                \"I-city.dept\",\n                \"B-city.dest\",\n                \"I-city.dest\",\n                ...\n            ]\n        }\n        \"\"\"\n\n        data = self._get_data(file_path)\n        tag_idx2text, tag_text2idx = self._get_tag_dicts(data=data)\n\n        helper = Helper(**{\n            \"file_path\": file_path,\n            \"tag_idx2text\": tag_idx2text,\n            \"ignore_tag_idx\": self.ignore_tag_idx,\n            \"cls_token\": self.cls_token,\n            \"sep_token\": self.sep_token,\n        })\n        helper.set_model_parameter({\n            \"num_tags\": len(tag_idx2text),\n            \"ignore_tag_idx\": self.ignore_tag_idx,\n        })\n        helper.set_predict_helper({\n            \"tag_idx2text\": tag_idx2text,\n        })\n\n        features, labels = [], []\n\n        for example in tqdm(data, desc=data_type):\n            sequence_text = example[\"sequence\"].strip().replace(\"\\n\", \"\")\n\n            sequence_tokens = self.word_tokenizer.tokenize(sequence_text)\n            naive_tokens = sequence_text.split()\n            is_head_word = utils.get_is_head_of_word(naive_tokens, sequence_tokens)\n\n            sequence_sub_tokens = []\n            tagged_sub_token_idxs = []\n            curr_sub_token_idx = 1  # skip CLS_TOKEN\n            for token_idx, token in enumerate(sequence_tokens):\n                for sub_token_pos, sub_token in enumerate(\n                        self.subword_tokenizer.tokenize(token, unit=\"word\")\n                ):\n                    sequence_sub_tokens.append(sub_token)\n                    if is_head_word[token_idx] and sub_token_pos == 0:\n                        tagged_sub_token_idxs.append(curr_sub_token_idx)\n                    curr_sub_token_idx += 1\n\n            bert_input = [self.cls_token] + sequence_sub_tokens + [self.sep_token]\n\n            if (\n                    self.sequence_max_length is not None\n                    and data_type == \"train\"\n                    and len(bert_input) > self.sequence_max_length\n            ):\n                continue\n\n            if \"uid\" in example:\n                data_uid = example[\"uid\"]\n            else:\n                data_uid = str(uuid.uuid1())\n\n            tag_texts = example[self.tag_key]\n            tag_idxs = [tag_text2idx[tag_text] for tag_text in tag_texts]\n\n            utils.sanity_check_iob(naive_tokens, tag_texts)\n            assert len(naive_tokens) == len(tagged_sub_token_idxs), \\\n                f\"\"\"Wrong tagged_sub_token_idxs: followings mismatch.\n                naive_tokens: {naive_tokens}\n                sequence_sub_tokens: {sequence_sub_tokens}\n                tagged_sub_token_idxs: {tagged_sub_token_idxs}\"\"\"\n\n            feature_row = {\n                \"id\": data_uid,\n                \"bert_input\": bert_input,\n                \"tagged_sub_token_idxs\": tagged_sub_token_idxs,\n                \"num_tokens\": len(naive_tokens),\n            }\n            features.append(feature_row)\n\n            label_row = {\n                \"id\": data_uid,\n                \"tag_idxs\": tag_idxs,\n                \"tag_texts\": tag_texts,\n            }\n            labels.append(label_row)\n\n            helper.set_example(data_uid, {\n                \"sequence\": sequence_text,\n                \"sequence_sub_tokens\": sequence_sub_tokens,\n                \"tag_idxs\": tag_idxs,\n                \"tag_texts\": tag_texts,\n            })\n\n        return utils.make_batch(features, labels), helper.to_dict()\n\n    def read_one_example(self, inputs):\n        \"\"\" inputs keys: sequence \"\"\"\n        sequence_text = inputs[\"sequence\"].strip().replace(\"\\n\", \"\")\n        sequence_tokens = self.word_tokenizer.tokenize(sequence_text)\n        naive_tokens = sequence_text.split()\n        is_head_word = utils.get_is_head_of_word(naive_tokens, sequence_tokens)\n\n        sequence_sub_tokens = []\n        tagged_sub_token_idxs = []\n        curr_sub_token_idx = 1  # skip CLS_TOKEN\n        for token_idx, token in enumerate(sequence_tokens):\n            for sub_token_pos, sub_token in enumerate(\n                    self.subword_tokenizer.tokenize(token, unit=\"word\")\n            ):\n                sequence_sub_tokens.append(sub_token)\n                if is_head_word[token_idx] and sub_token_pos == 0:\n                    tagged_sub_token_idxs.append(curr_sub_token_idx)\n                curr_sub_token_idx += 1\n\n        if len(sequence_sub_tokens) > self.sequence_max_length:\n            sequence_sub_tokens = sequence_sub_tokens[:self.sequence_max_length]\n\n        bert_input = [self.cls_token] + sequence_sub_tokens + [self.sep_token]\n        assert len(naive_tokens) == len(tagged_sub_token_idxs), \\\n            f\"\"\"Wrong tagged_sub_token_idxs: followings mismatch.\n            naive_tokens: {naive_tokens}\n            sequence_sub_tokens: {sequence_sub_tokens}\n            tagged_sub_token_idxs: {tagged_sub_token_idxs}\"\"\"\n\n        bert_feature = BertFeature()\n        bert_feature.set_input(bert_input)\n        bert_feature.set_feature(\"tagged_sub_token_idxs\", tagged_sub_token_idxs)\n        bert_feature.set_feature(\"num_tokens\", len(naive_tokens))\n\n        features = [bert_feature.to_dict()]\n        helper = {}\n        return features, helper\n"
  },
  {
    "path": "claf/data/reader/cola.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.data.reader import SeqClsReader\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:cola\")\nclass CoLAReader(SeqClsReader):\n    \"\"\"\n    CoLA DataReader\n\n    * Args:\n        file_paths: .json file paths (train and dev)\n        tokenizers: define tokenizers config (word)\n    \"\"\"\n\n    CLASS_DATA = [0, 1]\n\n    def __init__(\n            self,\n            file_paths,\n            tokenizers,\n            sequence_max_length=None,\n    ):\n\n        super(CoLAReader, self).__init__(\n            file_paths,\n            tokenizers,\n            sequence_max_length=sequence_max_length,\n        )\n\n    @overrides\n    def _get_data(self, file_path, **kwargs):\n        data_type = kwargs[\"data_type\"]\n\n        _file = self.data_handler.read(file_path)\n        lines = _file.split(\"\\n\")\n\n        if data_type == \"train\":\n            lines.pop(0)\n\n        data = []\n        for i, line in enumerate(lines):\n            line_tokens = line.split(\"\\t\")\n            if len(line_tokens) > 1:\n                data.append({\n                    \"uid\": f\"{data_type}-{i}\",\n                    \"sequence\": line_tokens[1] if data_type == \"test\" else line_tokens[3],\n                    self.class_key: str(0) if data_type == \"test\" else str(line_tokens[1])\n                })\n\n        return data\n"
  },
  {
    "path": "claf/data/reader/seq_cls.py",
    "content": "\nimport json\nimport logging\nimport uuid\n\nfrom overrides import overrides\nfrom tqdm import tqdm\n\nfrom claf.data.dataset.seq_cls import SeqClsDataset\nfrom claf.data.dto import Helper\nfrom claf.data.reader.base import DataReader\nfrom claf.data import utils\nfrom claf.decorator import register\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:seq_cls\")\nclass SeqClsReader(DataReader):\n    \"\"\"\n    DataReader for Sequence Classification\n\n    * Args:\n        file_paths: .json file paths (train and dev)\n        tokenizers: define tokenizers config (word)\n\n    * Kwargs:\n        class_key: name of the label in .json file to use for classification\n    \"\"\"\n\n    CLASS_DATA = None\n\n    def __init__(self, file_paths, tokenizers, sequence_max_length=None, class_key=\"class\"):\n        super(SeqClsReader, self).__init__(file_paths, SeqClsDataset)\n\n        self.sequence_max_length = sequence_max_length\n        self.text_columns = [\"sequence\"]\n\n        if \"word\" not in tokenizers:\n            raise ValueError(\"WordTokenizer is required. define WordTokenizer\")\n\n        self.word_tokenizer = tokenizers[\"word\"]\n        self.class_key = class_key\n\n    def _get_data(self, file_path, **kwargs):\n        data = self.data_handler.read(file_path)\n        seq_cls_data = json.loads(data)\n\n        return seq_cls_data[\"data\"]\n\n    def _get_class_dicts(self, **kwargs):\n        seq_cls_data = kwargs[\"data\"]\n        if self.class_key is None:\n            class_data = self.CLASS_DATA\n        else:\n            class_data = [item[self.class_key] for item in seq_cls_data]\n            class_data = list(set(class_data))  # remove duplicate\n\n        class_idx2text = {\n            class_idx: str(class_text)\n            for class_idx, class_text in enumerate(class_data)\n        }\n        class_text2idx = {class_text: class_idx for class_idx, class_text in class_idx2text.items()}\n\n        return class_idx2text, class_text2idx\n\n    @overrides\n    def _read(self, file_path, data_type=None):\n        \"\"\"\n        .json file structure should be something like this:\n\n        {\n            \"data\": [\n                {\n                    \"sequence\": \"what a wonderful day!\",\n                    \"emotion\": \"happy\"\n                },\n                ...\n            ],\n            \"emotion\": [  // class_key\n                \"angry\",\n                \"happy\",\n                \"sad\",\n                ...\n            ]\n        }\n        \"\"\"\n\n        data = self._get_data(file_path, data_type=data_type)\n        class_idx2text, class_text2idx = self._get_class_dicts(data=data)\n\n        helper = Helper(**{\n            \"file_path\": file_path,\n            \"class_idx2text\": class_idx2text,\n            \"class_text2idx\": class_text2idx,\n        })\n        helper.set_model_parameter({\n            \"num_classes\": len(class_idx2text),\n        })\n        helper.set_predict_helper({\n            \"class_idx2text\": class_idx2text,\n        })\n\n        features, labels = [], []\n\n        for example in tqdm(data, desc=data_type):\n            sequence = example[\"sequence\"].strip().replace(\"\\n\", \"\")\n            sequence_words = self.word_tokenizer.tokenize(sequence)\n\n            if (\n                    self.sequence_max_length is not None\n                    and data_type == \"train\"\n                    and len(sequence_words) > self.sequence_max_length\n            ):\n                continue\n\n            if \"uid\" in example:\n                data_uid = example[\"uid\"]\n            else:\n                data_uid = str(uuid.uuid1())\n\n            feature_row = {\n                \"id\": data_uid,\n                \"sequence\": sequence,\n            }\n            features.append(feature_row)\n\n            class_text = example[self.class_key]\n            label_row = {\n                \"id\": data_uid,\n                \"class_idx\": class_text2idx[class_text],\n                \"class_text\": class_text,\n            }\n            labels.append(label_row)\n\n            helper.set_example(data_uid, {\n                \"sequence\": sequence,\n                \"class_idx\": class_text2idx[class_text],\n                \"class_text\": class_text,\n            })\n\n        return utils.make_batch(features, labels), helper.to_dict()\n\n    def read_one_example(self, inputs):\n        \"\"\" inputs keys: sequence \"\"\"\n        sequence = inputs[\"sequence\"].strip().replace(\"\\n\", \"\")\n\n        inputs[\"sequence\"] = sequence\n\n        return inputs, {}\n"
  },
  {
    "path": "claf/data/reader/squad.py",
    "content": "\nfrom collections import Counter\nimport json\nimport logging\nimport re\n\nfrom overrides import overrides\nfrom tqdm import tqdm\n\nfrom claf.data.dataset import SQuADDataset\nfrom claf.data.dto import Helper\nfrom claf.data.reader.base import DataReader\nfrom claf.data import utils\nfrom claf.decorator import register\nfrom claf.metric.squad_v1_official import normalize_answer\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:squad\")\nclass SQuADReader(DataReader):\n    \"\"\"\n    SQuAD DataReader\n\n    * Args:\n        file_paths: .json file paths (train and dev)\n        tokenizers: defined tokenizers config (char/word)\n    \"\"\"\n\n    def __init__(self, file_paths, lang_code, tokenizers, context_max_length=None):\n        super(SQuADReader, self).__init__(file_paths, SQuADDataset)\n        self.lang_code = lang_code\n        self.context_max_length = context_max_length\n\n        self.text_columns = [\"context\", \"question\"]\n\n        if \"word\" not in tokenizers:\n            raise ValueError(\"WordTokenizer is required. define English WordTokenizer\")\n        self.word_tokenizer = tokenizers[\"word\"]\n\n    @overrides\n    def _read(self, file_path, data_type=None):\n        tokenized_error_count = 0\n\n        data = self.data_handler.read(file_path)\n        squad = json.loads(data)\n        if \"data\" in squad:\n            squad = squad[\"data\"]\n\n        helper = Helper(**{\n            \"file_path\": file_path,\n            \"raw_dataset\": squad,\n        })\n        helper.set_model_parameter({\n            \"lang_code\": self.lang_code,\n        })\n\n        features, labels = [], []\n\n        for article in tqdm(squad, desc=data_type):\n            for paragraph in article[\"paragraphs\"]:\n                context = paragraph[\"context\"].replace(\"``\", '\" ').replace(\"''\", '\" ')\n                context_words = self.word_tokenizer.tokenize(context)\n\n                if (\n                    self.context_max_length is not None\n                    and data_type == \"train\"\n                    and len(context_words) > self.context_max_length\n                ):\n                    continue\n\n                for qa in paragraph[\"qas\"]:\n                    question = qa[\"question\"].strip().replace(\"\\n\", \"\")\n                    id_ = qa[\"id\"]\n\n                    answer_texts, answer_indices = [], []\n\n                    if qa.get(\"is_impossible\", None):\n                        answers = qa[\"plausible_answers\"]\n                        answerable = 0\n                    else:\n                        answers = qa[\"answers\"]\n                        answerable = 1\n\n                    for answer in answers:\n                        answer_start = answer[\"answer_start\"]\n                        answer_end = answer_start + len(answer[\"text\"])\n\n                        answer_texts.append(answer[\"text\"])\n                        answer_indices.append((answer_start, answer_end))\n\n                    feature_row = {\n                        \"context\": self._clean_text(context),\n                        \"question\": question,\n                    }\n                    features.append(feature_row)\n\n                    if len(answer_indices) > 0:\n                        answer_start, answer_end = self._find_one_most_common(answer_indices)\n                        text_spans = self._convert_to_spans(context, context_words)\n                        word_idxs = self._get_word_span_idxs(text_spans, answer_start, answer_end)\n\n                        word_answer_start = word_idxs[0]\n                        word_answer_end = word_idxs[-1]\n\n                        # To check rebuild answer: char_answer_text - word_answer_text\n                        char_answer_text = context[answer_start:answer_end]\n                        word_answer_text = context[\n                            text_spans[word_answer_start][0] : text_spans[word_answer_end][1]\n                        ]\n\n                        if not self._is_rebuild(char_answer_text, word_answer_text):\n                            logger.warning(f\"word_tokenized_error: {char_answer_text}  ###  {word_answer_text}\")\n                            tokenized_error_count += 1\n\n                    else:\n                        # Unanswerable\n                        answers = [\"<noanswer>\"]\n                        text_spans = []\n                        answer_start, answer_end = 0, 0\n                        word_answer_start, word_answer_end = 0, 0\n\n                    label_row = {\n                        \"id\": id_,\n                        \"answer_start\": word_answer_start,\n                        \"answer_end\": word_answer_end,\n                        \"answerable\": answerable,\n                    }\n                    labels.append(label_row)\n\n                    helper.set_example(id_, {\n                        \"context\": context,\n                        \"text_span\": text_spans,\n                        \"question\": question,\n                        \"answers\": answer_texts,\n                    })\n\n        logger.info(f\"tokenized_error_count: {tokenized_error_count} \")\n        return utils.make_batch(features, labels), helper.to_dict()\n\n    @overrides\n    def read_one_example(self, inputs):\n        \"\"\" inputs keys: question, context \"\"\"\n        context_text = inputs[\"context\"]\n        tokenized_context = self.word_tokenizer.tokenize(context_text)\n        question_text = inputs[\"question\"].strip().replace(\"\\n\", \"\")\n\n        features = {}\n        features[\"context\"] = self._clean_text(context_text)\n        features[\"question\"] = self._clean_text(question_text)\n\n        helper = {\n            \"text_span\": self._convert_to_spans(context_text, tokenized_context),\n            \"tokenized_context\": tokenized_context,\n            \"token_key\": \"tokenized_context\"  # for 1-example inference latency key\n        }\n        return features, helper\n\n    def _clean_text(self, text):\n        # https://github.com/allenai/document-qa/blob/2f9fa6878b60ed8a8a31bcf03f802cde292fe48b/docqa/data_processing/text_utils.py#L124\n        # be consistent with quotes, and replace \\u2014 and \\u2212 which I have seen being mapped to UNK\n        # by glove word vecs\n        return (\n            text.replace(\"''\", '\"')\n            .replace(\"``\", '\"')\n            .replace(\"\\u2212\", \"-\")\n            .replace(\"\\u2014\", \"\\u2013\")\n        )\n\n    def _find_one_most_common(self, answers):\n        answer_counter = Counter(answers)\n        value = answer_counter.most_common(1)[0][0]\n        return value[0], value[1]\n\n    def _convert_to_spans(self, raw_text, tokenized_text):\n        \"\"\" Convert a tokenized version of `raw_text` into a series character spans referencing the `raw_text` \"\"\"\n        double_quote_re = re.compile(\"\\\"|``|''\")\n\n        curr_idx = 0\n        spans = []\n        for token in tokenized_text:\n            # Tokenizer might transform double quotes, for this case search over several\n            # possible encodings\n            if double_quote_re.match(token):\n                span = double_quote_re.search(raw_text[curr_idx:])\n                temp = curr_idx + span.start()\n                token_length = span.end() - span.start()\n            else:\n                temp = raw_text.find(token, curr_idx)\n                token_length = len(token)\n            if temp < curr_idx:\n                raise ValueError(f\"{raw_text} \\n{tokenized_text} \\n{token}\")\n            curr_idx = temp\n            spans.append((curr_idx, curr_idx + token_length))\n            curr_idx += token_length\n        return spans\n\n    def _get_word_span_idxs(self, spans, start, end):\n        idxs = []\n        for word_ix, (s, e) in enumerate(spans):\n            if e > start:\n                if s < end:\n                    idxs.append(word_ix)\n                else:\n                    break\n        return idxs\n\n    def _is_rebuild(self, char_answer_text, word_answer_text):\n        norm_char_answer_text = normalize_answer(char_answer_text)\n        norm_word_answer_text = normalize_answer(word_answer_text)\n\n        if norm_char_answer_text != norm_word_answer_text:\n            return False\n        else:\n            return True\n"
  },
  {
    "path": "claf/data/reader/wikisql.py",
    "content": "\nimport json\nimport logging\nfrom pathlib import Path\nimport uuid\n\nfrom overrides import overrides\nfrom tqdm import tqdm\n\nfrom claf.data.dataset import WikiSQLDataset\nfrom claf.data.dto import Helper\nfrom claf.data.reader.base import DataReader\nfrom claf.data import utils\nfrom claf.decorator import register\nfrom claf.metric.wikisql_lib.dbengine import DBEngine\nfrom claf.metric.wikisql_lib.query import Query\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"reader:wikisql\")\nclass WikiSQLReader(DataReader):\n    \"\"\"\n    WikiSQL DataReader\n    (http://arxiv.org/abs/1709.00103)\n\n    * Args:\n        file_paths: .json file paths (train and dev)\n        tokenizers: defined tokenizers config (char/word)\n    \"\"\"\n\n    def __init__(self, file_paths, tokenizers, context_max_length=None, is_test=None):\n        super(WikiSQLReader, self).__init__(file_paths, WikiSQLDataset)\n        self.is_test = is_test\n        self.text_columns = [\"column\", \"question\"]\n\n        if \"word\" not in tokenizers:\n            raise ValueError(\"WordTokenizer is required. define English WordTokenizer\")\n        self.word_tokenizer = tokenizers[\"word\"]\n        self.dbengine = None\n\n    @overrides\n    def _read(self, file_path, data_type=None):\n        file_path = self.data_handler.read(file_path, return_path=True)\n        file_path = Path(file_path)\n\n        data_dir = file_path.parent\n        file_name = file_path.stem\n\n        db_path = data_dir / f\"{file_name}.db\"\n        table_path = data_dir / f\"{file_name}.tables.jsonl\"\n\n        self.dbengine = DBEngine(db_path)\n\n        helper = Helper(**{\n            \"file_path\": file_path,\n            \"db_path\": db_path,\n        })\n\n        features, labels = [], []\n\n        sql_datas, table_data = self.load_data(file_path, table_path, data_type=data_type)\n        for sql_data in tqdm(sql_datas, desc=data_type):\n            question = sql_data[\"question\"]\n            table_id = sql_data[\"table_id\"]\n            column_headers = table_data[table_id][\"header\"]\n\n            feature_row = {\"column\": column_headers, \"question\": question}\n\n            data_uid = str(uuid.uuid1())\n            conditions_value_position = self.get_coditions_value_position(\n                sql_data[\"question\"], [x[2] for x in sql_data[\"sql\"][\"conds\"]]\n            )\n\n            sql_query = Query.from_dict(sql_data[\"sql\"], ordered=True)\n            execution_result = self.dbengine.execute_query(table_id, sql_query, lower=True)\n\n            label_row = {\n                \"id\": data_uid,\n                \"table_id\": table_id,\n                \"tokenized_question\": self.word_tokenizer.tokenize(question),\n                \"aggregator_idx\": sql_data[\"sql\"][\"agg\"],\n                \"select_column_idx\": sql_data[\"sql\"][\"sel\"],\n                \"conditions_num\": len(sql_data[\"sql\"][\"conds\"]),\n                \"conditions_column_idx\": [x[0] for x in sql_data[\"sql\"][\"conds\"]],\n                \"conditions_operator_idx\": [x[1] for x in sql_data[\"sql\"][\"conds\"]],\n                \"conditions_value_string\": [str(x[2]) for x in sql_data[\"sql\"][\"conds\"]],\n                \"conditions_value_position\": conditions_value_position,\n                \"sql_query\": sql_query,\n                \"execution_result\": execution_result,\n            }\n\n            features.append(feature_row)\n            labels.append(label_row)\n\n            helper.set_example(data_uid, {\n                \"question\": question,\n                \"sql_query\": sql_query,\n                \"execution_result\": execution_result,\n            })\n\n            if self.is_test and len(labels) == 10:\n                break\n\n        return utils.make_batch(features, labels), helper.to_dict()\n\n    @overrides\n    def read_one_example(self, inputs):\n        \"\"\" inputs keys: question, column, db_path, table_id \"\"\"\n        question_text = inputs[\"question\"]\n        helper = {\"tokenized_question\": self.word_tokenizer.tokenize(question_text)}\n        return inputs, helper\n\n    def load_data(self, sql_path, table_path, data_type=None):\n        sql_data = []\n        table_data = {}\n\n        logger.info(f\"Loading data from {sql_path}\")\n        with open(sql_path) as inf:\n            for line in tqdm(inf, desc=f\"sql_{data_type}\"):\n                sql = json.loads(line.strip())\n                sql_data.append(sql)\n\n        logger.info(f\"Loading data from {table_path}\")\n        with open(table_path) as inf:\n            for line in tqdm(inf, desc=f\"table_{data_type}\"):\n                tab = json.loads(line.strip())\n                table_data[tab[\"id\"]] = tab\n\n        for sql in sql_data:\n            assert sql[\"table_id\"] in table_data\n        return sql_data, table_data\n\n    def get_coditions_value_position(self, question, values):\n        tokenized_question = self.word_tokenizer.tokenize(question.lower())\n        tokenized_values = [self.word_tokenizer.tokenize(str(value).lower()) for value in values]\n\n        START_TOKEN, END_TOKEN = \"<BEG>\", \"<END>\"\n\n        token_to_index = {START_TOKEN: 0}\n        for token in tokenized_question:\n            token_to_index[token] = len(token_to_index)\n        token_to_index[END_TOKEN] = len(token_to_index)\n\n        position_tokens = []\n        for value in tokenized_values:\n            position_token = [token_to_index[START_TOKEN]]\n            for token in value:\n                if token in token_to_index:\n                    position_token.append(token_to_index[token])\n                else:\n                    for i in range(len(tokenized_question)):\n                        q_token = tokenized_question[i]\n                        if token in q_token:\n                            position_token.append(token_to_index[q_token])\n            position_token.append(token_to_index[END_TOKEN])\n\n            assert len(position_token) != 2\n            position_tokens.append(position_token)\n\n        return position_tokens\n"
  },
  {
    "path": "claf/data/utils.py",
    "content": "\nfrom collections import defaultdict\n\nimport numpy as np\nimport torch\n\nfrom claf.data.dto.batch import Batch\n\n\ndef make_batch(features, labels):\n    return Batch(**{\"features\": features, \"labels\": labels})\n\n\ndef make_bert_input(\n    sequence_a,\n    sequence_b,\n    bert_tokenizer,\n    max_seq_length=128,\n    data_type=\"train\",\n    cls_token=\"[CLS]\",\n    sep_token=\"[SEP]\",\n    input_type=\"bert\",\n):\n    sequence_a_tokens = bert_tokenizer.tokenize(sequence_a)\n    bert_input = [cls_token] + sequence_a_tokens + [sep_token]\n\n    if sequence_b:\n        if input_type == \"roberta\":\n            bert_input += [sep_token]\n\n        sequence_b_tokens = bert_tokenizer.tokenize(sequence_b)\n        bert_input += sequence_b_tokens + [sep_token]\n\n    if len(bert_input) > max_seq_length:\n        if data_type == \"train\":\n            return None  # for skip\n        else:\n            return bert_input[:max_seq_length-1] + [sep_token]\n    return bert_input\n\n\ndef make_bert_token_types(bert_inputs, SEP_token=\"[SEP]\"):\n    \"\"\"\n    Bert Inputs segment_ids\n\n    ex) [CLS] hi [SEP] he ##llo [SEP] => 0 0 0 1 1 1\n\n    * Args:\n        bert_inputs: feature dictionary consisting of\n            - text: text from data_reader\n            - token_name: text converted to corresponding token_type\n\n    * Kwargs:\n        SEP_token: SEP special token for BERT\n    \"\"\"\n\n    feature_keys = list(bert_inputs[0].keys())  # TODO: hard-code\n    if \"text\" in feature_keys:\n        feature_keys.remove(\"text\")\n\n    feature_key = feature_keys[0]\n\n    token_types = []\n    for bert_input in bert_inputs:\n        token_type = make_bert_token_type(bert_input[\"text\"], SEP_token=SEP_token)\n        token_types.append({feature_key: token_type})\n    return token_types\n\n\ndef make_bert_token_type(bert_input_text, SEP_token=\"[SEP]\"):\n    SEP_index = bert_input_text.index(SEP_token) + 1\n\n    token_type = [0] * SEP_index\n    token_type += [1] * (len(bert_input_text) - SEP_index)\n\n    assert len(token_type) == len(bert_input_text)\n    return token_type\n\n\ndef padding_tokens(tokens, max_len=None, token_name=None, pad_value=0):\n    \"\"\" Padding tokens according to token's dimension \"\"\"\n\n    def _pad_tokens(seqs, maxlen, pad_id=0):\n        lens = [len(seq) for seq in seqs]\n\n        if pad_id == 0:\n            padded_seqs = torch.zeros(len(seqs), maxlen).long()\n        else:\n            padded_seqs = torch.ones(len(seqs), maxlen).long() * pad_id\n\n        for i, seq in enumerate(seqs):\n            if type(seq[0]) == dict:\n                pass\n            else:\n                seq = [int(s) for s in seq]\n                end = lens[i]\n                padded_seqs[i, :end] = torch.LongTensor(seq)\n        return padded_seqs\n\n    def _pad_char_tokens(seqs, seq_maxlen, char_minlen=10, char_maxlen=None, pad_value=0):\n        if char_maxlen is None:\n            char_maxlen = max([len(chars) for seq in seqs for chars in seq])\n            if char_maxlen < char_minlen:\n                char_maxlen = char_minlen\n\n        padded_chars = torch.zeros(len(seqs), seq_maxlen, char_maxlen).long()\n        for i in range(len(seqs)):\n            char_tokens = _pad_with_value(seqs[i], seq_maxlen, pad_value=[[pad_value]])\n            padded_chars[i] = _pad_tokens(char_tokens, char_maxlen, pad_id=pad_value)\n        return padded_chars\n\n    def _pad_with_value(data, size, pad_value=[0]):\n        if type(pad_value) != list:\n            raise ValueError(\"pad_value data type is list.\")\n\n        return data + pad_value * (size - len(data))\n\n    token_dim = get_token_dim(tokens)\n    if token_dim > 1 and max_len is None:\n        max_len = max(len(token) for token in tokens)\n\n    if token_dim == 2:  # word\n        return _pad_tokens(tokens, max_len, pad_id=pad_value)\n    elif token_dim == 3:  # char\n        if token_name == \"elmo\":\n            return _pad_char_tokens(\n                tokens, max_len, char_maxlen=50, pad_value=261,\n            )  # 260: padding_character, +1 for mask\n        elif token_name == \"char\":\n            return _pad_char_tokens(tokens, max_len, char_minlen=10, pad_value=pad_value)\n        else:\n            return _pad_char_tokens(tokens, max_len, char_minlen=1, pad_value=pad_value)\n    else:\n        return tokens\n\n\ndef get_sequence_a(example):\n    if \"sequence\" in example:\n        return example[\"sequence\"]\n    elif \"sequence_a\" in example:\n        return example[\"sequence_a\"]\n    else:\n        raise ValueError(\"'sequence' or 'sequence_a' key is required.\")\n\n\ndef get_token_dim(tokens, dim=0):\n    if type(tokens) == torch.Tensor:\n        dim = tokens.dim()\n        if tokens.size(-1) > 1:\n            dim += 1\n        return dim\n\n    if type(tokens) == np.ndarray:\n        dim = tokens.ndim\n        if tokens.shape[-1] > 1:\n            dim += 1\n        return dim\n\n    if type(tokens) == list or type(tokens) == tuple:\n        dim = get_token_dim(tokens[0], dim + 1)\n    return dim\n\n\ndef get_token_type(tokens):\n    token = tokens[0]\n    while isinstance(token, np.ndarray) and isinstance(token, list):\n        token = token[0]\n    return type(token)\n\n\ndef is_lazy(tokens):\n    if type(tokens) == list:\n        tokens = tokens[0]\n\n    if callable(tokens):\n        return True\n    else:\n        return False\n\n\ndef transpose(list_of_dict, skip_keys=[]):\n    if type(skip_keys) != list:\n        raise ValueError(f\"skip_keys type must be list. not {type(skip_keys)}\")\n\n    dict_of_list = defaultdict(lambda: [])\n    for dic in list_of_dict:\n        for key, value in dic.items():\n            if key in skip_keys:\n                continue\n            dict_of_list[key].append(value)\n    return dict_of_list\n\n\ndef sanity_check_iob(naive_tokens, tag_texts):\n    \"\"\"\n    Check if the IOB tags are valid.\n\n    * Args:\n        naive_tokens: tokens split by .split()\n        tag_texts: list of tags in IOB format\n    \"\"\"\n    def prefix(tag):\n        if tag == \"O\":\n            return tag\n        return tag.split(\"-\")[0]\n\n    def body(tag):\n        if tag == \"O\":\n            return None\n        return tag.split(\"-\")[1]\n\n    # same number check\n    assert len(naive_tokens) == len(tag_texts), \\\n        f\"\"\"Number of tokens and tags doest not match.\n        original tokens: {naive_tokens}\n        tags: {tag_texts}\"\"\"\n\n    # IOB format check\n    prev_tag = None\n    for tag_text in tag_texts:\n        curr_tag = tag_text\n\n        if prev_tag is None:  # first tag\n            assert prefix(curr_tag) in [\"B\", \"O\"], \\\n                f\"\"\"Wrong tag: first tag starts with I.\n                tag: {curr_tag}\"\"\"\"\"\n\n        else:  # following tags\n            if prefix(prev_tag) in [\"B\", \"I\"]:\n                assert (\n                        (prefix(curr_tag) == \"I\" and body(curr_tag) == body(prev_tag))\n                        or (prefix(curr_tag) == \"B\")\n                        or (prefix(curr_tag) == \"O\")\n                ), f\"\"\"Wrong tag: following tag mismatch.\n                    previous tag: {prev_tag}\n                    current tag: {curr_tag}\"\"\"\n\n            elif prefix(prev_tag) in [\"O\"]:\n                assert prefix(curr_tag) in [\"B\", \"O\"], \\\n                    f\"\"\"Wrong tag: following tag mismatch.\n                    previous tag: {prev_tag}\n                    current tag: {curr_tag}\"\"\"\n            else:\n                raise RuntimeError(f\"Encountered unknown tag: {prev_tag}.\")\n\n        prev_tag = curr_tag\n\ndef get_is_head_of_word(naive_tokens, sequence_tokens):\n    \"\"\"\n    Return a list of flags whether the token is head(prefix) of naively split tokens\n\n    ex) naive_tokens: [\"hello.\", \"how\", \"are\", \"you?\"]\n        sequence_tokens: [\"hello\", \".\", \"how\", \"are\", \"you\", \"?\"]\n\n        => [1, 0, 1, 1, 1, 0]\n\n    * Args:\n        naive_tokens: a list of tokens, naively split by whitespace\n        sequence_tokens: a list of tokens, split by 'word_tokenizer'\n\n    * Returns:\n        is_head_of_word: a list with its length the same as that of 'sequence_tokens'.\n            has 1 if the tokenized word at the position is head(prefix) of a `naive_token`\n            and 0 if otherwise.\n    \"\"\"\n\n    is_head_of_word = []\n    for naive_token in naive_tokens:\n        consumed_chars = 0\n        consumed_words = 0\n        for sequence_token in sequence_tokens:\n            if naive_token[consumed_chars:].startswith(sequence_token):\n                is_head_of_word.append(0 if consumed_chars else 1)\n                consumed_chars += len(sequence_token)\n                consumed_words += 1\n            else:\n                break\n        sequence_tokens = sequence_tokens[consumed_words:]\n    return is_head_of_word\n"
  },
  {
    "path": "claf/decorator/__init__.py",
    "content": "\nfrom claf.decorator.arguments import arguments_required\nfrom claf.decorator.register import register\n\n\n__all__ = [\"arguments_required\", \"register\"]\n"
  },
  {
    "path": "claf/decorator/arguments.py",
    "content": "class arguments_required:\n    \"\"\"\n        Decorator Class\n        check required arguments for predict function\n        (eg. @arguments_required([\"db_path\", \"table_id\"]))\n    \"\"\"\n\n    def __init__(self, required_fields):\n        self.required_fields = required_fields\n\n    def __call__(self, fn):\n        def wrapper(*args, **kwargs):\n            arguments = args[2]\n            for item in self.required_fields:\n                if arguments.get(item, None) is None:\n                    raise ValueError(f\"--{item} is required argument.\")\n            return fn(*args, **kwargs)\n\n        return wrapper\n"
  },
  {
    "path": "claf/decorator/register.py",
    "content": "\nfrom claf.config.registry import Registry\n\n\nclass register:\n    \"\"\"\n        Decorator Class\n        register subclass with decorator.\n        (eg. @register(\"model:bidaf\"), @register(\"reader:squad\") )\n    \"\"\"\n\n    def __init__(self, name):\n        self.name = name\n\n    def __call__(self, obj):\n        registry = Registry()\n        registry.add(self.name, obj)\n        return obj\n"
  },
  {
    "path": "claf/factory/__init__.py",
    "content": "\nfrom claf.factory.data_reader import DataReaderFactory\nfrom claf.factory.data_loader import DataLoaderFactory\nfrom claf.factory.model import ModelFactory\nfrom claf.factory.optimizer import OptimizerFactory\nfrom claf.factory.tokens import TokenMakersFactory\n\n\n__all__ = [\n    \"DataReaderFactory\",\n    \"DataLoaderFactory\",\n    \"ModelFactory\",\n    \"OptimizerFactory\",\n    \"TokenMakersFactory\",\n]\n"
  },
  {
    "path": "claf/factory/base.py",
    "content": "class Factory:\n    \"\"\"\n    Factory Base Class\n\n    Factory method pattern\n\n    In class-based programming, the factory method pattern is a creational pattern that\n    uses factory methods to deal with the problem of creating objects without having to\n    specify the exact class of the object that will be created. This is done by creating\n    objects by calling a factory method—either specified in an interface and implemented\n    by child classes, or implemented in a base class and optionally overridden by derived\n    classes—rather than by calling a constructor.\n    \"\"\"\n\n    def __init__(self):\n        pass\n\n    def create(self):\n        \"\"\" interface \"\"\"\n        raise NotImplementedError\n"
  },
  {
    "path": "claf/factory/data_loader.py",
    "content": "\nfrom overrides import overrides\nfrom torch.utils.data import DataLoader\n\nfrom .base import Factory\n\n\ndef make_data_loader(dataset, batch_size=32, shuffle=True, cuda_device_id=None):\n    is_cpu = cuda_device_id is None\n\n    return DataLoader(\n        dataset,\n        batch_size=batch_size,\n        shuffle=shuffle,\n        collate_fn=dataset.collate_fn(cuda_device_id=cuda_device_id),\n        num_workers=0,\n        pin_memory=is_cpu,  # only CPU memory can be pinned\n    )\n\n\nclass DataLoaderFactory(Factory):\n    \"\"\"\n    DataLoader Factory Class\n\n    * Args:\n        config: data_loader config from argument (config.data_loader)\n    \"\"\"\n\n    def __init__(self):\n        pass\n\n    @overrides\n    def create(self, config, datasets):\n        \"\"\" create train, valid and test iterator \"\"\"\n        cuda_device_id = None\n        if config.cuda_devices:\n            cuda_device_id = config.cuda_devices[0]\n\n        dataset_key = next(iter(datasets))\n        dataset = datasets[dataset_key]\n\n        if getattr(dataset, \"name\", None) is None:\n            raise ValueError(\"unknown dataset.\")\n\n        train_loader = None\n        if \"train\" in datasets:\n            train_loader = make_data_loader(\n                datasets[\"train\"],\n                batch_size=config.batch_size,\n                shuffle=True,\n                cuda_device_id=cuda_device_id,\n            )\n        valid_loader = None\n        if \"valid\" in datasets:\n            valid_loader = make_data_loader(\n                datasets[\"valid\"],\n                batch_size=config.batch_size,\n                shuffle=False,\n                cuda_device_id=cuda_device_id,\n            )\n        test_loader = None\n        if \"test\" in datasets:\n            test_loader = make_data_loader(\n                datasets[\"test\"],\n                batch_size=config.batch_size,\n                shuffle=False,\n                cuda_device_id=cuda_device_id,\n            )\n        return train_loader, valid_loader, test_loader\n"
  },
  {
    "path": "claf/factory/data_reader.py",
    "content": "\nfrom overrides import overrides\n\nfrom claf.config.registry import Registry\n\nfrom .base import Factory\n\n\nclass DataReaderFactory(Factory):\n    \"\"\"\n    DataReader Factory Class\n\n    Create Concrete reader according to config.dataset\n    Get reader from reader registries (eg. @register(\"reader:{reader_name}\"))\n\n    * Args:\n        config: data_reader config from argument (config.data_reader)\n    \"\"\"\n\n    def __init__(self):\n        self.registry = Registry()\n\n    @overrides\n    def create(self, config):\n        dataset_name = config.dataset\n\n        file_paths = {}\n        if getattr(config, \"train_file_path\", None):\n            file_paths[\"train\"] = config.train_file_path\n        if getattr(config, \"valid_file_path\", None):\n            file_paths[\"valid\"] = config.valid_file_path\n\n        reader_config = {\"file_paths\": file_paths}\n        if \"params\" in config and type(config.params) == dict:\n            reader_config.update(config.params)\n        if \"tokenizers\" in config:\n            reader_config[\"tokenizers\"] = config.tokenizers\n\n        dataset_config = getattr(config, config.dataset, None)\n        if dataset_config is not None:\n            dataset_config = vars(dataset_config)\n            reader_config.update(dataset_config)\n\n        reader = self.registry.get(f\"reader:{dataset_name.lower()}\")\n        return reader(**reader_config)\n"
  },
  {
    "path": "claf/factory/model.py",
    "content": "\nfrom overrides import overrides\n\nfrom claf.config.registry import Registry\nfrom claf.model.base import ModelWithTokenEmbedder, ModelWithoutTokenEmbedder\nfrom claf.model.reading_comprehension.mixin import ReadingComprehension\nfrom claf.tokens import token_embedder\n\nfrom .base import Factory\n\n\nclass ModelFactory(Factory):\n    \"\"\"\n    Model Factory Class\n\n    Create Concrete model according to config.model_name\n    Get model from model registries (eg. @register(\"model:{model_name}\"))\n\n    * Args:\n        config: model config from argument (config.model)\n    \"\"\"\n\n    def __init__(self):\n        self.registry = Registry()\n\n    @overrides\n    def create(self, config, token_makers, **params):\n        name = config.name\n        model_config = {}\n        if getattr(config, config.name, None):\n            model_config = vars(getattr(config, config.name))\n\n        model = self.registry.get(f\"model:{name}\")\n\n        if issubclass(model, ModelWithTokenEmbedder):\n            token_embedder = self.create_token_embedder(model, token_makers)\n            model_config[\"token_embedder\"] = token_embedder\n        elif issubclass(model, ModelWithoutTokenEmbedder):\n            model_config[\"token_makers\"] = token_makers\n        else:\n            raise ValueError(\n                \"Model must have inheritance. (ModelWithTokenEmbedder or ModelWithoutTokenEmbedder)\"\n            )\n        return model(**model_config, **params)\n\n    def create_token_embedder(self, model, token_makers):\n        # 1. Specific case\n        # ...\n\n        # 2. Base case\n        if issubclass(model, ReadingComprehension):\n            return token_embedder.RCTokenEmbedder(token_makers)\n        else:\n            return token_embedder.BasicTokenEmbedder(token_makers)\n"
  },
  {
    "path": "claf/factory/optimizer.py",
    "content": "\nfrom overrides import overrides\nimport torch\n\nfrom claf.config.namespace import NestedNamespace\nfrom claf.learn.optimization.learning_rate_scheduler import get_lr_schedulers\nfrom claf.learn.optimization.learning_rate_scheduler import (\n    LearningRateWithoutMetricsWrapper,\n    LearningRateWithMetricsWrapper,\n)\nfrom claf.learn.optimization.optimizer import get_optimizer_by_name\nfrom claf.model.sequence_classification import BertForSeqCls, RobertaForSeqCls\n\nfrom .base import Factory\n\n\nclass OptimizerFactory(Factory):\n    \"\"\"\n    Optimizer Factory Class\n\n    include optimizer, learning_rate_scheduler and exponential_moving_average\n\n    * Args:\n        config: optimizer config from argument (config.optimizer)\n    \"\"\"\n\n    def __init__(self):\n        pass\n\n    @overrides\n    def create(self, config, model):\n\n        if not issubclass(type(model), torch.nn.Module):\n            raise ValueError(\"optimizer model is must be subclass of torch.nn.Module.\")\n\n        # Optimizer\n        op_type = config.op_type\n        optimizer_params = {\"lr\": config.learning_rate}\n\n        op_config = getattr(config, op_type, None)\n        if op_config is not None:\n            op_config = vars(op_config)\n            optimizer_params.update(op_config)\n\n        model_parameters = self.get_model_parameters(model, optimizer_params)\n        optimizer = get_optimizer_by_name(op_type)(model_parameters, **optimizer_params)\n        op_dict = {\"optimizer\": optimizer}\n\n        # LearningRate Scheduler\n        lr_scheduler = self.make_lr_scheduler(config, optimizer)\n        if lr_scheduler is not None:\n            op_dict[\"learning_rate_scheduler\"] = lr_scheduler\n\n        # exponential_moving_average\n        ema_value = getattr(config, \"exponential_moving_average\", None)\n        if ema_value and ema_value > 0:\n            op_dict[\"exponential_moving_average\"] = ema_value\n\n        return op_dict\n\n    def get_model_parameters(self, model, optimizer_params):\n        if getattr(model, \"use_pytorch_transformers\", False):\n            weight_decay = optimizer_params.get(\"weight_decay\", 0)\n            model_parameters = self._group_parameters_for_transformers(model, weight_decay=weight_decay)\n        else:\n            model_parameters = [param for param in model.parameters() if param.requires_grad]\n        return model_parameters\n\n    def _group_parameters_for_transformers(self, model, weight_decay=0):\n        # Prepare optimizer\n        param_optimizer = list(model.named_parameters())\n\n        # hack to remove pooler, which is not used\n        # thus it produce None grad that break apex\n        if not isinstance(model, BertForSeqCls) or not isinstance(model, RobertaForSeqCls):\n            param_optimizer = [n for n in param_optimizer if \"pooler\" not in n[0]]\n\n        no_decay = [\"bias\", \"LayerNorm.weight\"]\n        optimizer_grouped_parameters = [\n            {\n                \"params\": [p for n, p in param_optimizer if not any(nd in n for nd in no_decay)],\n                \"weight_decay\": weight_decay,\n            },\n            {\n                \"params\": [p for n, p in param_optimizer if any(nd in n for nd in no_decay)],\n                \"weight_decay\": 0.0,\n            },\n        ]\n        return optimizer_grouped_parameters\n\n    def make_lr_scheduler(self, config, optimizer):\n        lr_scheduler_type = getattr(config, \"lr_scheduler_type\", None)\n        if lr_scheduler_type is None:\n            return None\n\n        lr_scheduler_config = getattr(config, lr_scheduler_type, {})\n        if type(lr_scheduler_config) == NestedNamespace:\n            lr_scheduler_config = vars(lr_scheduler_config)\n\n        if \"warmup\" in lr_scheduler_type:\n            lr_scheduler_config[\"num_training_steps\"] = config.num_train_steps\n            self.set_warmup_steps(lr_scheduler_config)\n\n        lr_scheduler_config[\"optimizer\"] = optimizer\n        lr_scheduler = get_lr_schedulers()[lr_scheduler_type](**lr_scheduler_config)\n\n        if lr_scheduler_type == \"reduce_on_plateau\":\n            lr_scheduler = LearningRateWithMetricsWrapper(lr_scheduler)\n        else:\n            lr_scheduler = LearningRateWithoutMetricsWrapper(lr_scheduler)\n\n        return lr_scheduler\n\n    def set_warmup_steps(self, lr_scheduler_config):\n        warmup_proportion = lr_scheduler_config.get(\"warmup_proportion\", None)\n        warmup_steps = lr_scheduler_config.get(\"warmup_steps\", None)\n        total_steps = lr_scheduler_config[\"num_training_steps\"]\n\n        if warmup_steps and warmup_proportion:\n            raise ValueError(\"Check 'warmup_steps' and 'warmup_proportion'.\")\n        elif not warmup_steps and warmup_proportion:\n            lr_scheduler_config[\"num_warmup_steps\"] = int(total_steps * warmup_proportion) + 1\n            del lr_scheduler_config[\"warmup_proportion\"]\n        elif warmup_steps and not warmup_proportion:\n            # v2.11.0 change (argument name: warmup_steps -> num_warmup_steps)\n            lr_scheduler_config[\"num_warmup_steps\"] = warmup_steps\n            del lr_scheduler_config[\"warmup_steps\"]\n        else:\n            raise ValueError(\"Check 'warmup_steps' and 'warmup_proportion'.\")\n\n\n"
  },
  {
    "path": "claf/factory/tokens.py",
    "content": "\nfrom overrides import overrides\n\nfrom claf.config.registry import Registry\nfrom claf.config.utils import convert_config2dict\nfrom claf.tokens import tokenizer\n\nfrom .base import Factory\n\n\ndef make_tokenizer(tokenizer_cls, tokenizer_config, parent_tokenizers={}):\n    if tokenizer_config is None or \"name\" not in tokenizer_config:\n        return None\n\n    package_name = tokenizer_config[\"name\"]\n    package_config = tokenizer_config.get(package_name, {})\n    tokenizer_config[\"config\"] = package_config\n    if package_name in tokenizer_config:\n        del tokenizer_config[package_name]\n\n    tokenizer_config.update(parent_tokenizers)\n\n    return tokenizer_cls(**tokenizer_config)\n\n\ndef make_all_tokenizers(all_tokenizer_config):\n    \"\"\" Tokenizer is resource used all token together \"\"\"\n\n    sent_tokenizer = make_tokenizer(\n        tokenizer.SentTokenizer, all_tokenizer_config.get(\"sent\", {\"name\": \"punkt\"})\n    )\n    word_tokenizer = make_tokenizer(\n        tokenizer.WordTokenizer,\n        all_tokenizer_config.get(\"word\", None),\n        parent_tokenizers={\"sent_tokenizer\": sent_tokenizer},\n    )\n    subword_tokenizer = make_tokenizer(\n        tokenizer.SubwordTokenizer,\n        all_tokenizer_config.get(\"subword\", None),\n        parent_tokenizers={\"word_tokenizer\": word_tokenizer},\n    )\n    char_tokenizer = make_tokenizer(\n        tokenizer.CharTokenizer,\n        all_tokenizer_config.get(\"char\", None),\n        parent_tokenizers={\"word_tokenizer\": word_tokenizer},\n    )\n    bpe_tokenizer = make_tokenizer(\n        tokenizer.BPETokenizer,\n        all_tokenizer_config.get(\"bpe\", None),\n    )\n\n    return {\n        \"bpe\": bpe_tokenizer,\n        \"char\": char_tokenizer,\n        \"subword\": subword_tokenizer,\n        \"word\": word_tokenizer,\n        \"sent\": sent_tokenizer,\n    }\n\n\nclass TokenMakersFactory(Factory):\n    \"\"\"\n    TokenMakers Factory Class\n\n    * Args:\n        config: token config from argument (config.token)\n    \"\"\"\n\n    LANGS = [\"eng\", \"kor\"]\n\n    def __init__(self):\n        self.registry = Registry()\n\n    @overrides\n    def create(self, config):\n        if getattr(config, \"tokenizer\", None):\n            tokenizers = make_all_tokenizers(convert_config2dict(config.tokenizer))\n        else:\n            tokenizers = {}\n\n        token_names, token_types = config.names, config.types\n\n        if len(token_names) != len(token_types):\n            raise ValueError(\"token_names and token_types must be same length.\")\n\n        token_makers = {\"tokenizers\": tokenizers}\n        for token_name, token_type in sorted(zip(token_names, token_types)):\n            token_config = getattr(config, token_name, {})\n            if token_config != {}:\n                token_config = convert_config2dict(token_config)\n\n            # Token (tokenizer, indexer, embedding, vocab)\n            token_config = {\n                \"tokenizers\": tokenizers,\n                \"indexer_config\": token_config.get(\"indexer\", {}),\n                \"embedding_config\": token_config.get(\"embedding\", {}),\n                \"vocab_config\": token_config.get(\"vocab\", {}),\n            }\n            token_makers[token_name] = self.registry.get(f\"token:{token_type}\")(**token_config)\n        return token_makers\n"
  },
  {
    "path": "claf/learn/__init__.py",
    "content": ""
  },
  {
    "path": "claf/learn/experiment.py",
    "content": "\nimport atexit\nimport logging\nfrom pathlib import Path\n\nimport torch\n\nfrom claf import nsml\nfrom claf.factory import (\n    DataReaderFactory,\n    DataLoaderFactory,\n    TokenMakersFactory,\n    ModelFactory,\n    OptimizerFactory,\n)\nfrom claf import utils as common_utils\nfrom claf.config.args import NestedNamespace\nfrom claf.config.utils import convert_config2dict, pretty_json_dumps, set_global_seed\nfrom claf.tokens.text_handler import TextHandler\nfrom claf.learn.mode import Mode\nfrom claf.learn.trainer import Trainer\nfrom claf.learn import utils\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass Experiment:\n    \"\"\"\n    Experiment settings with config.\n\n    * Args:\n        mode: Mode (ex. TRAIN, EVAL, INFER_EVAL, PREDICT)\n        config: (NestedNamespace) Argument config according to mode\n    \"\"\"\n\n    def __init__(self, mode, config):\n        common_utils.set_logging_config(mode, config)\n\n        self.argument = (\n            config\n        )  # self.config (experiment overall config) / config (argument according to mode)\n        self.config = config\n        self.mode = mode\n\n        self.common_setting(mode, config)\n        if mode != Mode.TRAIN:  # evaluate and predict\n            self.load_setting()\n\n            # Set evaluation config\n            if mode.endswith(Mode.EVAL):\n                self.config.data_reader.train_file_path = \"\"\n                self.config.data_reader.valid_file_path = self.argument.data_file_path\n                self.config.cuda_devices = self.argument.cuda_devices\n                self.config.iterator.cuda_devices = self.argument.cuda_devices\n\n                if getattr(self.argument, \"inference_latency\", None):\n                    self.config.max_latency = self.argument.inference_latency\n\n        self.predict_settings = None\n\n    def common_setting(self, mode, config):\n        \"\"\" Common Setting - experiment config, use_gpu and cuda_device_ids \"\"\"\n        self.config_dict = convert_config2dict(config)\n\n        cuda_devices = self._get_cuda_devices()\n        self.config.cuda_devices = cuda_devices\n        self.config.slack_url = getattr(self.config, \"slack_url\", False)\n\n    def _get_cuda_devices(self):\n        if getattr(self.config, \"use_gpu\", None) is None:\n            self.config.use_gpu = torch.cuda.is_available() or nsml.IS_ON_NSML\n\n        if self.config.use_gpu:\n            if nsml.IS_ON_NSML:\n                return list(range(self.config.gpu_num))\n            else:\n                return self.config.cuda_devices\n        else:\n            return None\n\n    def load_setting(self):\n        \"\"\" Load Setting - need to load checkpoint case (ex. evaluate and predict) \"\"\"\n        cuda_devices = self.argument.cuda_devices\n        checkpoint_path = self.argument.checkpoint_path\n        prev_cuda_device_id = getattr(self.argument, \"prev_cuda_device_id\", None)\n\n        self.model_checkpoint = self._read_checkpoint(\n            cuda_devices, checkpoint_path, prev_cuda_device_id=prev_cuda_device_id\n        )\n        self._set_saved_config(cuda_devices)\n\n    def _read_checkpoint(self, cuda_devices, checkpoint_path, prev_cuda_device_id=None):\n        if cuda_devices == \"cpu\":\n            return torch.load(checkpoint_path, map_location=\"cpu\")  # use CPU\n\n        if torch.cuda.is_available():\n            checkpoint = torch.load(\n                checkpoint_path,\n                map_location={\n                    f\"cuda:{prev_cuda_device_id}\": f\"cuda:{cuda_devices[0]}\"\n                },  # different cuda_device id case (save/load)\n            )\n        else:\n            checkpoint = torch.load(checkpoint_path, map_location=\"cpu\")  # use CPU\n        return checkpoint\n\n    def _set_saved_config(self, cuda_devices):\n        saved_config_dict = self.model_checkpoint[\"config\"]\n        self.config_dict = saved_config_dict\n\n        logger.info(\"Load saved_config ...\")\n        logger.info(pretty_json_dumps(saved_config_dict))\n\n        saved_config = NestedNamespace()\n        saved_config.load_from_json(saved_config_dict)\n\n        is_use_gpu = self.config.use_gpu\n\n        self.config = saved_config\n        self.config.use_gpu = is_use_gpu\n        self.config.cuda_devices = cuda_devices\n\n    def __call__(self):\n        \"\"\" Run Trainer \"\"\"\n\n        set_global_seed(self.config.seed_num)  # For Reproducible\n\n        if self.mode == Mode.TRAIN:\n            # exit trigger slack notification\n            if self.config.slack_url:\n                atexit.register(utils.send_message_to_slack)\n\n            train_loader, valid_loader, optimizer = self.set_train_mode()\n\n            assert train_loader is not None\n            assert optimizer is not None\n\n            if valid_loader is None:\n                self.trainer.train(train_loader, optimizer)\n            else:\n                self.trainer.train_and_evaluate(train_loader, valid_loader, optimizer)\n            self._summary_experiments()\n\n        elif self.mode == Mode.EVAL:\n            valid_loader = self.set_eval_mode()\n\n            assert valid_loader is not None\n            return self.trainer.evaluate(valid_loader)\n\n        elif self.mode == Mode.INFER_EVAL:\n            raw_examples, raw_to_tensor_fn = self.set_eval_inference_latency_mode()\n\n            assert raw_examples is not None\n            assert raw_to_tensor_fn is not None\n            return self.trainer.evaluate_inference_latency(raw_examples, raw_to_tensor_fn, max_latency=self.config.max_latency)\n\n        elif self.mode.endswith(Mode.PREDICT):\n            raw_features, raw_to_tensor_fn, arguments = self.set_predict_mode()\n\n            assert raw_features is not None\n            assert raw_to_tensor_fn is not None\n            return self.trainer.predict(\n                raw_features,\n                raw_to_tensor_fn,\n                arguments,\n                interactive=arguments.get(\"interactive\", False),\n            )\n        else:\n            raise ValueError(f\"unknown mode: {self.mode}\")\n\n    def set_train_mode(self):\n        \"\"\"\n        Training Mode\n\n        - Pipeline\n          1. read raw_data (DataReader)\n          2. build vocabs (DataReader, Token)\n          3. indexing tokens (DataReader, Token)\n          4. convert to DataSet (DataReader)\n          5. create DataLoader (DataLoader)\n          6. define model and optimizer\n          7. run!\n        \"\"\"\n        logger.info(\"Config. \\n\" + pretty_json_dumps(self.config_dict) + \"\\n\")\n\n        data_reader, token_makers = self._create_data_and_token_makers()\n        datas, helpers = data_reader.read()\n\n        # Token & Vocab\n        text_handler = TextHandler(token_makers, lazy_indexing=True)\n        if text_handler.is_all_vocab_use_pretrained():\n            token_counters = token_makers\n        else:\n            texts = data_reader.filter_texts(datas)\n            token_counters = text_handler.make_token_counters(texts, config=self.config)\n\n        vocabs = text_handler.build_vocabs(token_counters)\n        text_handler.index(datas, data_reader.text_columns)\n\n        # iterator\n        vocab = vocabs[next(iter(vocabs))]\n        datasets = data_reader.convert_to_dataset(datas, vocab, helpers=helpers)  # with name\n\n        self.config.iterator.cuda_devices = self.config.cuda_devices\n        train_loader, valid_loader, test_loader = self._create_by_factory(\n            DataLoaderFactory, self.config.iterator, param={\"datasets\": datasets}\n        )\n\n        # calculate 'num_train_steps'\n        num_train_steps = self._get_num_train_steps(train_loader)\n        self.config.optimizer.num_train_steps = num_train_steps\n\n        checkpoint_dir = Path(self.config.trainer.log_dir) / \"checkpoint\"\n        checkpoints = None\n        if checkpoint_dir.exists():\n            checkpoints = self._load_exist_checkpoints(checkpoint_dir)  # contain model and optimizer\n\n        if checkpoints is None:\n            model = self._create_model(token_makers, helpers=helpers)\n            op_dict = self._create_by_factory(\n                OptimizerFactory, self.config.optimizer, param={\"model\": model}\n            )\n        else:\n            model = self._create_model(token_makers, checkpoint=checkpoints)\n            op_dict = self._create_by_factory(\n                OptimizerFactory, self.config.optimizer, param={\"model\": model}\n            )\n            utils.load_optimizer_checkpoint(op_dict[\"optimizer\"], checkpoints)\n\n        self.set_trainer(model, op_dict=op_dict)\n        return train_loader, valid_loader, op_dict[\"optimizer\"]\n\n    def _create_data_and_token_makers(self):\n        token_makers = self._create_by_factory(TokenMakersFactory, self.config.token)\n        tokenizers = token_makers[\"tokenizers\"]\n        del token_makers[\"tokenizers\"]\n\n        self.config.data_reader.tokenizers = tokenizers\n        data_reader = self._create_by_factory(DataReaderFactory, self.config.data_reader)\n        return data_reader, token_makers\n\n    def _create_by_factory(self, factory_cls, item_config, param={}):\n        factory_obj = factory_cls()\n        return factory_obj.create(item_config, **param)\n\n    def _get_num_train_steps(self, train_loader):\n        train_set_size = len(train_loader.dataset)\n        batch_size = self.config.iterator.batch_size\n        gradient_accumulation_steps = getattr(self.config.optimizer, \"gradient_accumulation_steps\", 1)\n        num_epochs = self.config.trainer.num_epochs\n\n        one_epoch_steps = int(train_set_size / batch_size / gradient_accumulation_steps)\n        if one_epoch_steps == 0:\n            one_epoch_steps = 1\n        num_train_steps = one_epoch_steps * num_epochs\n        return num_train_steps\n\n    def _load_exist_checkpoints(self, checkpoint_dir):  # pragma: no cover\n        checkpoints = utils.get_sorted_path(checkpoint_dir, both_exist=True)\n\n        train_counts = list(checkpoints.keys())\n        if not train_counts:\n            return None\n\n        seperator = \"-\" * 50\n        message = f\"{seperator}\\n !! Find exist checkpoints {train_counts}.\\n If you want to recover, input train_count in list.\\n If you don't want to recover, input 0.\\n{seperator}\"\n        selected_train_count = common_utils.get_user_input(message)\n\n        if selected_train_count == 0:\n            return None\n\n        model_path = checkpoints[selected_train_count][\"model\"]\n        model_checkpoint = self._read_checkpoint(self.config.cuda_devices, model_path)\n\n        optimizer_path = checkpoints[selected_train_count][\"optimizer\"]\n        optimizer_checkpoint = self._read_checkpoint(\"cpu\", optimizer_path)\n\n        checkpoints = {}\n        checkpoints.update(model_checkpoint)\n        checkpoints.update(optimizer_checkpoint)\n        return checkpoints\n\n    def _create_model(self, token_makers, checkpoint=None, helpers=None):\n        if checkpoint is None:\n            assert helpers is not None\n            first_key = next(iter(helpers))\n            helper = helpers[first_key]  # get first helper\n            model_init_params = helper.get(\"model\", {})\n            predict_helper = helper.get(\"predict_helper\", {})\n        else:\n            model_init_params = checkpoint.get(\"init_params\", {})\n            predict_helper = checkpoint.get(\"predict_helper\", {})\n\n        model_params = {\"token_makers\": token_makers}\n        model_params.update(model_init_params)\n\n        model = self._create_by_factory(\n            ModelFactory, self.config.model, param=model_params\n        )\n        # Save params\n        model.init_params = model_init_params\n        model.predict_helper = predict_helper\n\n        if checkpoint is not None:\n            model = utils.load_model_checkpoint(model, checkpoint)\n        model = self._set_gpu_env(model)\n        return model\n\n    def _set_gpu_env(self, model):\n        if self.config.use_gpu:\n            cuda_devices = self._get_cuda_devices()\n            num_gpu = len(cuda_devices)\n\n            use_multi_gpu = num_gpu > 1\n            if use_multi_gpu:\n                model = torch.nn.DataParallel(model, device_ids=cuda_devices)\n            model.cuda()\n        else:\n            num_gpu = 0\n\n        num_gpu_state = str(num_gpu)\n        if num_gpu > 1:\n            num_gpu_state += \" (Multi-GPU)\"\n\n        # TODO: distributed training and 16-bits training (FP16)\n        logger.info(f\"use_gpu: {self.config.use_gpu} num_gpu: {num_gpu_state}, distributed training: False, 16-bits training: False\")\n        return model\n\n    def set_trainer(self, model, op_dict={}, save_params={}):\n        trainer_config = vars(self.config.trainer)\n        trainer_config[\"config\"] = self.config_dict\n        trainer_config[\"model\"] = model\n        trainer_config[\"learning_rate_scheduler\"] = op_dict.get(\"learning_rate_scheduler\", None)\n        trainer_config[\"exponential_moving_average\"] = op_dict.get(\n            \"exponential_moving_average\", None\n        )\n        self.trainer = Trainer(**trainer_config)\n\n        # Set NSML\n        if nsml.IS_ON_NSML:\n            utils.bind_nsml(model, optimizer=op_dict.get(\"optimizer\", None))\n            if getattr(self.config.nsml, \"pause\", None):\n                nsml.paused(scope=locals())\n\n    def _summary_experiments(self):\n        hr_text = \"-\" * 50\n        summary_logs = f\"\\n\\n\\nExperiment Summary. {nsml.SESSION_NAME}\\n{hr_text}\\n\"\n        summary_logs += f\"Config.\\n{pretty_json_dumps(self.config_dict)}\\n{hr_text}\\n\"\n        summary_logs += (\n            f\"Training Logs.\\n{pretty_json_dumps(self.trainer.training_logs)}\\n{hr_text}\\n\"\n        )\n        summary_logs += f\"Metric Logs.\\n{pretty_json_dumps(self.trainer.metric_logs)}\"\n\n        logger.info(summary_logs)\n\n        if self.config.slack_url:  # pragma: no cover\n            simple_summary_title = f\"Session Name: {nsml.SESSION_NAME} \"\n            if getattr(self.config, \"base_config\", None):\n                simple_summary_title += f\"({self.config.base_config})\"\n\n            simple_summary_logs = f\" - Dataset: {self.config.data_reader.dataset} \\n\"\n            simple_summary_logs += f\" - Model: {self.config.model.name}\"\n\n            best_metrics = {\"epoch\": self.trainer.metric_logs[\"best_epoch\"]}\n            best_metrics.update(self.trainer.metric_logs[\"best\"])\n\n            simple_summary_logs += f\" - Best metrics.\\n {pretty_json_dumps(best_metrics)} \"\n\n            utils.send_message_to_slack(self.config.slack_url, title=simple_summary_title, message=simple_summary_logs)\n\n    def set_eval_mode(self):\n        \"\"\"\n        Evaluate Mode\n\n        - Pipeline\n          1. read raw_data (DataReader)\n          2. load vocabs from checkpoint (DataReader, Token)\n          3. indexing tokens (DataReader, Token)\n          4. convert to DataSet (DataReader)\n          5. create DataLoader (DataLoader)\n          6. define and load model\n          7. run!\n        \"\"\"\n\n        data_reader, token_makers = self._create_data_and_token_makers()\n\n        # DataReader\n        datas, helpers = data_reader.read()\n\n        # Token & Vocab\n        vocabs = utils.load_vocabs(self.model_checkpoint)\n        for token_name, token_maker in token_makers.items():\n            token_maker.set_vocab(vocabs[token_name])\n\n        text_handler = TextHandler(token_makers, lazy_indexing=False)\n        text_handler.index(datas, data_reader.text_columns)\n\n        # iterator\n        vocab = vocabs[next(iter(vocabs))]\n        datasets = data_reader.convert_to_dataset(datas, vocab, helpers=helpers)  # with name\n\n        self.config.iterator.cuda_devices = self.config.cuda_devices\n        _, valid_loader, _ = self._create_by_factory(\n            DataLoaderFactory, self.config.iterator, param={\"datasets\": datasets}\n        )\n\n        # Model\n        model = self._create_model(token_makers, checkpoint=self.model_checkpoint)\n        self.set_trainer(model)\n\n        return valid_loader\n\n    def set_eval_inference_latency_mode(self):\n        \"\"\"\n        Evaluate Inference Latency Mode\n\n        - Pipeline\n          1. read raw_data (DataReader)\n          2. load vocabs from checkpoint (DataReader, Token)\n          3. define raw_to_tensor_fn (DataReader, Token)\n          4. define and load model\n          5. run!\n        \"\"\"\n        data_reader, token_makers = self._create_data_and_token_makers()\n\n        # Token & Vocab\n        vocabs = utils.load_vocabs(self.model_checkpoint)\n        for token_name, token_maker in token_makers.items():\n            token_maker.set_vocab(vocabs[token_name])\n\n        text_handler = TextHandler(token_makers, lazy_indexing=False)\n\n        _, helpers = data_reader.read()\n        raw_examples = helpers[\"valid\"][\"examples\"]\n\n        cuda_device = self.config.cuda_devices[0] if self.config.use_gpu else None\n        raw_to_tensor_fn = text_handler.raw_to_tensor_fn(data_reader, cuda_device=cuda_device)\n\n        # Model\n        model = self._create_model(token_makers, checkpoint=self.model_checkpoint)\n        self.set_trainer(model)\n\n        return raw_examples, raw_to_tensor_fn\n\n    def predict(self, raw_features):\n        if self.predict_settings is None:\n            raise ValueError(\n                \"To use 'predict()', you must call 'set_predict_mode()' first, with preload=True parameter\"\n            )\n\n        raw_to_tensor_fn = self.predict_settings[\"raw_to_tensor_fn\"]\n        arguments = self.predict_settings[\"arguments\"]\n        arguments.update(raw_features)\n\n        assert raw_features is not None\n        assert raw_to_tensor_fn is not None\n        return self.trainer.predict(\n            raw_features,\n            raw_to_tensor_fn,\n            arguments,\n            interactive=arguments.get(\"interactive\", False),\n        )\n\n    def set_predict_mode(self, preload=False):\n        \"\"\"\n        Predict Mode\n\n        - Pipeline\n          1. read raw_data (Argument)\n          2. load vocabs from checkpoint (DataReader, Token)\n          3. define raw_to_tensor_fn (DataReader, Token)\n          4. define and load model\n          5. run!\n        \"\"\"\n\n        data_reader, token_makers = self._create_data_and_token_makers()\n\n        # Token & Vocab\n        vocabs = utils.load_vocabs(self.model_checkpoint)\n        for token_name, token_maker in token_makers.items():\n            token_maker.set_vocab(vocabs[token_name])\n\n        text_handler = TextHandler(token_makers, lazy_indexing=False)\n\n        # Set predict config\n        if self.argument.interactive:\n            raw_features = {feature_name: \"\" for feature_name in data_reader.text_columns}\n        else:\n            raw_features = {}\n            for feature_name in data_reader.text_columns:\n                feature = getattr(self.argument, feature_name, None)\n                # if feature is None:\n                # raise ValueError(f\"--{feature_name} argument is required!\")\n                raw_features[feature_name] = feature\n\n        cuda_device = self.config.cuda_devices[0] if self.config.use_gpu else None\n        raw_to_tensor_fn = text_handler.raw_to_tensor_fn(\n            data_reader,\n            cuda_device=cuda_device,\n            helper=self.model_checkpoint.get(\"predict_helper\", {})\n        )\n\n        # Model\n        model = self._create_model(token_makers, checkpoint=self.model_checkpoint)\n        self.set_trainer(model)\n\n        arguments = vars(self.argument)\n\n        if preload:\n            self.predict_settings = {\"raw_to_tensor_fn\": raw_to_tensor_fn, \"arguments\": arguments}\n        else:\n            return raw_features, raw_to_tensor_fn, arguments\n"
  },
  {
    "path": "claf/learn/mode.py",
    "content": "class Mode:\n    \"\"\" Experiment Flag class \"\"\"\n\n    TRAIN = \"train\"\n    EVAL = \"eval\"\n    INFER_EVAL = \"infer_eval\"\n    PREDICT = \"predict\"\n    MACHINE = \"machine\"\n"
  },
  {
    "path": "claf/learn/optimization/__init__.py",
    "content": ""
  },
  {
    "path": "claf/learn/optimization/exponential_moving_avarage.py",
    "content": "class EMA:\n    \"\"\"\n    Exponential Moving Average\n\n    the moving averages of all weights of the model are maintained\n        with the exponential decay rate of {ema}.\n\n    * Args:\n        model: for model's parameters\n        mu: decay rate\n    \"\"\"\n\n    def __init__(self, model, mu):\n        self.mu = mu\n        self.shadow = {}\n\n        for name, param in model.named_parameters():\n            if param.requires_grad:\n                self.register(name, param.data)\n\n    def register(self, name, val):\n        self.shadow[name] = val.clone()\n\n    def __call__(self, name, x):\n        assert name in self.shadow\n        new_average = self.mu * x + (1.0 - self.mu) * self.shadow[name]\n        self.shadow[name] = new_average.clone()\n        return new_average\n"
  },
  {
    "path": "claf/learn/optimization/learning_rate_scheduler.py",
    "content": "\"\"\"\n    https://github.com/allenai/allennlp/blob/master/allennlp/training/learning_rate_schedulers.py\n\"\"\"\n\nfrom overrides import overrides\nfrom transformers import (\n    get_constant_schedule_with_warmup,\n    get_linear_schedule_with_warmup,\n    get_cosine_schedule_with_warmup,\n    get_cosine_with_hard_restarts_schedule_with_warmup,\n)\nimport torch\n\n\n\ndef get_lr_schedulers():\n    return {\n        \"step\": torch.optim.lr_scheduler.StepLR,\n        \"multi_step\": torch.optim.lr_scheduler.MultiStepLR,\n        \"exponential\": torch.optim.lr_scheduler.ExponentialLR,\n        \"reduce_on_plateau\": torch.optim.lr_scheduler.ReduceLROnPlateau,\n        \"cosine\": torch.optim.lr_scheduler.CosineAnnealingLR,\n        \"noam\": NoamLR,\n        \"warmup_constant\": get_constant_schedule_with_warmup,\n        \"warmup_linear\": get_linear_schedule_with_warmup,\n        \"warmup_consine\": get_cosine_schedule_with_warmup,\n        \"warmup_consine_with_hard_restart\": get_cosine_with_hard_restarts_schedule_with_warmup,\n    }\n\n\nclass LearningRateScheduler:\n    def __init__(self, lr_scheduler):\n        self.lr_scheduler = lr_scheduler\n\n    def step(self, metric, epoch=None):\n        raise NotImplementedError\n\n    def step_batch(self, batch_num_total):\n        if batch_num_total is not None:\n            if hasattr(self.lr_scheduler, \"step_batch\"):\n                self.lr_scheduler.step_batch(batch_num_total)\n            return\n\n\nclass LearningRateWithoutMetricsWrapper(LearningRateScheduler):\n    \"\"\"\n    A wrapper around learning rate schedulers that do not require metrics\n    \"\"\"\n\n    def __init__(\n        self, lr_scheduler: torch.optim.lr_scheduler._LRScheduler\n    ) -> None:  # pylint: disable=protected-access\n        super().__init__(lr_scheduler)\n        self.lr_scheduler = lr_scheduler\n\n    @overrides\n    def step(self, metric, epoch=None):\n        self.lr_scheduler.step(epoch)\n\n\nclass LearningRateWithMetricsWrapper(LearningRateScheduler):\n    \"\"\"\n    A wrapper around learning rate schedulers that require metrics,\n    At the moment there is only a single instance of this lrs. It is the ReduceLROnPlateau\n    \"\"\"\n\n    def __init__(self, lr_scheduler: torch.optim.lr_scheduler.ReduceLROnPlateau) -> None:\n        super().__init__(lr_scheduler)\n        self.lr_scheduler = lr_scheduler\n\n    @overrides\n    def step(self, metric, epoch=None):\n        if metric is None:\n            raise ValueError(\n                \"The reduce_on_plateau learning rate scheduler requires \"\n                \"a validation metric to compute the schedule and therefore \"\n                \"must be used with a validation dataset.\"\n            )\n        self.lr_scheduler.step(metric, epoch)\n\n\nclass NoamLR(torch.optim.lr_scheduler._LRScheduler):  # pylint: disable=protected-access\n    \"\"\"\n    Implements the Noam Learning rate schedule. This corresponds to increasing the learning rate\n    linearly for the first ``warmup_steps`` training steps, and decreasing it thereafter proportionally\n    to the inverse square root of the step number, scaled by the inverse square root of the\n    dimensionality of the model. Time will tell if this is just madness or it's actually important.\n    Parameters\n    ----------\n    model_size : ``int``, required.\n        The hidden size parameter which dominates the number of parameters in your model.\n    warmup_steps: ``int``, required.\n        The number of steps to linearly increase the learning rate.\n    factor : ``float``, optional (default = 1.0).\n        The overall scale factor for the learning rate decay.\n    \"\"\"\n\n    def __init__(\n        self,\n        optimizer: torch.optim.Optimizer,\n        model_size: int,\n        warmup_steps: int,\n        factor: float = 1.0,\n        last_epoch: int = -1,\n    ) -> None:\n        self.warmup_steps = warmup_steps\n        self.factor = factor\n        self.model_size = model_size\n        super().__init__(optimizer, last_epoch=last_epoch)\n\n    def step(self, epoch=None):\n        pass\n\n    def step_batch(self, epoch=None):\n        if epoch is None:\n            epoch = self.last_epoch + 1\n        self.last_epoch = epoch\n        for param_group, learning_rate in zip(self.optimizer.param_groups, self.get_lr()):\n            param_group[\"lr\"] = learning_rate\n\n    def get_lr(self):\n        step = max(self.last_epoch, 1)\n        scale = self.factor * (\n            self.model_size ** (-0.5) * min(step ** (-0.5), step * self.warmup_steps ** (-1.5))\n        )\n\n        return [scale for _ in range(len(self.base_lrs))]\n"
  },
  {
    "path": "claf/learn/optimization/optimizer.py",
    "content": "\nfrom transformers import AdamW\nimport torch\n\n\ndef get_optimizer_by_name(name):\n    optimizers = {\n        \"adam\": torch.optim.Adam,\n        \"adamw\": AdamW,\n        \"sparse_adam\": torch.optim.SparseAdam,\n        \"adagrad\": torch.optim.Adagrad,\n        \"adadelta\": torch.optim.Adadelta,\n        \"sgd\": torch.optim.SGD,\n        \"rmsprop\": torch.optim.RMSprop,\n        \"adamax\": torch.optim.Adamax,\n        \"averaged_sgd\": torch.optim.ASGD,\n    }\n\n    if name in optimizers:\n        return optimizers[name]\n    else:\n        raise ValueError(f\"'{name}' is not registered. \\noptimizer list: {list(optimizers.keys())}\")\n"
  },
  {
    "path": "claf/learn/tensorboard.py",
    "content": "\nimport os\n\nfrom tensorboardX import SummaryWriter\n\nfrom claf import nsml\n\n\nclass TensorBoard:\n    \"\"\" TensorBoard Wrapper for Pytorch \"\"\"\n\n    def __init__(self, log_dir):\n        if not os.path.exists(log_dir):\n            os.makedirs(log_dir)\n        self.writer = SummaryWriter(log_dir=log_dir)\n\n    def scalar_summaries(self, step, summary):\n        if nsml.IS_ON_NSML:\n            if type(summary) != dict:\n                raise ValueError(f\"summary type is dict. not {type(summary)}\")\n            kwargs = {\"summary\": True, \"scope\": locals(), \"step\": step}\n            kwargs.update(summary)\n\n            nsml.report(**kwargs)\n        else:\n            for tag, value in summary.items():\n                self.scalar_summary(step, tag, value)\n\n    def scalar_summary(self, step, tag, value):\n        \"\"\"Log a scalar variable.\"\"\"\n        if nsml.IS_ON_NSML:\n            nsml.report(**{\"summary\": True, \"scope\": locals(), \"step\": step, tag: value})\n        else:\n            self.writer.add_scalar(tag, value, step)\n\n    def image_summary(self, tag, images, step):\n        \"\"\"Log a list of images.\"\"\"\n        raise NotImplementedError()\n\n    def embedding_summary(self, features, metadata=None, label_img=None):\n        raise NotImplementedError()\n\n    def histogram_summary(self, tag, values, step, bins=1000):\n        \"\"\"Log a histogram of the tensor of values.\"\"\"\n        raise NotImplementedError()\n\n    def graph_summary(self, model, input_to_model=None):\n        raise NotImplementedError()\n"
  },
  {
    "path": "claf/learn/trainer.py",
    "content": "# -*- coding: utf-8 -*-\n\nimport json\nimport logging\nimport os\nimport time\nimport random\n\nimport torch\nfrom torch.nn.utils import clip_grad_norm_\nfrom tqdm import tqdm\n\nfrom claf import nsml\nfrom claf.config.utils import pretty_json_dumps\nfrom claf.learn.optimization.exponential_moving_avarage import EMA\nfrom claf.learn.tensorboard import TensorBoard\nfrom claf.learn import utils\n\nlogger = logging.getLogger(__name__)\n\n\nclass Trainer:\n    \"\"\"\n    Trainer\n    Run experiment\n\n    - train\n    - train_and_evaluate\n    - evaluate\n    - evaluate_inference_latency\n    - predict\n\n    * Args:\n        config: experiment overall config\n        model: Model based on torch.nn.Module\n\n    * Kwargs:\n        log_dir: path to directory for save model and other options\n        grad_max_norm: Clips gradient norm of an iterable of parameters.\n        learning_rate_scheduler: PyTorch's Learning Rate Scheduler.\n            (https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html)\n        exponential_moving_average: the moving averages of all weights of the model are maintained\n            with the exponential decay rate of {ema}.\n        num_epochs: the number of maximun epochs (Default is 20)\n        early_stopping_threshold: the number of early stopping threshold (Default is 10)\n        max_eval_examples: print evaluation examples\n        metric_key: metric score's control point\n        verbose_step_count: print verbose step count (Default is 100)\n        eval_and_save_step_count: evaluate valid_dataset then save every n step_count (Default is 'epoch')\n    \"\"\"\n\n    def __init__(\n        self,\n        model,\n        config={},\n        log_dir=\"logs/experiment\",\n        grad_max_norm=None,\n        gradient_accumulation_steps=1,\n        learning_rate_scheduler=None,\n        exponential_moving_average=None,\n        num_epochs=20,\n        early_stopping_threshold=10,\n        max_eval_examples=5,\n        metric_key=None,\n        verbose_step_count=100,\n        eval_and_save_step_count=\"epoch\",\n        save_checkpoint=True,\n    ):\n        assert metric_key is not None\n\n        # CUDA\n        self.use_multi_gpu = type(model) == torch.nn.DataParallel\n\n        if getattr(model, \"train_counter\", None):\n            self.train_counter = model.train_counter\n        else:\n            self.train_counter = utils.TrainCounter(display_unit=eval_and_save_step_count)\n\n        self.model = model\n        model_config = config.get(\"model\", {})\n        self.model_name = model_config.get(\"name\", \"model\")\n        self.set_model_base_properties(config, log_dir)\n\n        # Logs\n        os.makedirs(log_dir, exist_ok=True)\n        self.tensorboard = TensorBoard(log_dir)\n        self.metric_logs = {\"best_epoch\": 0, \"best_global_step\": 0, \"best\": None, \"best_score\": 0}\n        self.training_logs = {\"early_stopping_count\": 0}\n\n        # optimization options\n        self.grad_max_norm = grad_max_norm\n\n        if gradient_accumulation_steps is None:\n            gradient_accumulation_steps = 1\n        self.gradient_accumulation_steps = gradient_accumulation_steps\n\n        self.learning_rate_scheduler = learning_rate_scheduler\n        self.exponential_moving_average = exponential_moving_average\n        if exponential_moving_average:\n            self.exponential_moving_average = EMA(model, self.exponential_moving_average)\n\n        # property\n        self.num_epochs = num_epochs\n        self.early_stopping = False\n        self.early_stopping_threshold = early_stopping_threshold\n        self.max_eval_examples = max_eval_examples\n        self.metric_key = metric_key\n        self.verbose_step_count = verbose_step_count\n        self.eval_and_save_step_count = eval_and_save_step_count\n        self.save_checkpoint = save_checkpoint\n        self.log_dir = log_dir\n\n    def set_model_base_properties(self, config, log_dir):\n        model = self.model\n        if self.use_multi_gpu:\n            model = self.model.module\n\n        model.config = config\n        model.log_dir = log_dir\n        model.train_counter = self.train_counter\n        assert model.is_ready() == True\n\n    def train_and_evaluate(self, train_loader, valid_loader, optimizer):\n        \"\"\" Train and Evaluate \"\"\"\n        start_time = time.time()\n\n        for epoch in range(1, self.num_epochs + 1):\n            self.train_counter.epoch = epoch\n\n            # Training with metrics\n            train_metrics = self._run_epoch(\n                train_loader,\n                valid_loader=valid_loader,\n                is_training=True,\n                optimizer=optimizer,\n                verbose_step_count=self.verbose_step_count,\n                eval_and_save_step_count=self.eval_and_save_step_count,\n            )\n\n            valid_metrics = None\n            if self.eval_and_save_step_count == \"epoch\":\n                with torch.no_grad():\n                    valid_metrics = self._run_epoch(valid_loader, is_training=False)\n                self._check_valid_results(valid_metrics, report=False)\n                self.save(optimizer)\n\n            self._report_metrics(train_metrics=train_metrics, valid_metrics=valid_metrics)\n            self._estimate_remainig_time(start_time)\n\n            if self.early_stopping:\n                break\n\n        self._report_trainings(start_time, train_loader=train_loader, valid_loader=valid_loader)\n\n    def train(self, data_loader, optimizer):\n        \"\"\" Train \"\"\"\n        start_time = time.time()\n\n        for epoch in range(1, self.num_epochs + 1):\n            self.train_counter.epoch = epoch\n\n            metrics = self._run_epoch(\n                data_loader,\n                is_training=True,\n                optimizer=optimizer,\n                verbose_step_count=self.verbose_step_count,\n            )\n\n            self._report_metrics(train_metrics=metrics)\n            self._estimate_remainig_time(start_time)\n            self.save(optimizer)\n\n        self._report_trainings(start_time, train_loader=data_loader)\n\n    def evaluate(self, data_loader):\n        \"\"\" Evaluate \"\"\"\n        print(\"evaluate:\", type(data_loader), data_loader)\n        eval_metrics = self._run_epoch(data_loader, is_training=False, disable_prograss_bar=False)\n\n        self._report_metrics(tensorboard=False, valid_metrics=eval_metrics)\n\n    def evaluate_inference_latency(self, raw_examples, raw_to_tensor_fn, token_key=None, max_latency=1000):\n        \"\"\"\n        Evaluate with focusing inferece latency\n        (Note: must use sorted synthetic data)\n\n        * inference_latency: raw_data -> pre-processing -> model -> predict_value\n                                (elapsed_time)               (elapsed_time)\n        \"\"\"\n\n        logger.info(\"\\n# Evaluate Inference Latency Mode.\")\n        self.model.eval()\n\n        total_raw_to_tensor_time = 0\n        tensor_to_predicts = []\n\n        raw_example_items = tqdm(raw_examples.items())\n        for _, raw_example in raw_example_items:\n            # raw_data -> tensor\n            raw_to_tensor_start_time = time.time()\n            feature, helper = raw_to_tensor_fn(raw_example)\n            raw_to_tensor_elapsted_time = time.time() - raw_to_tensor_start_time\n            raw_to_tensor_elapsted_time *= 1000  # unit: sec -> ms\n\n            total_raw_to_tensor_time += raw_to_tensor_elapsted_time\n\n            # tensor to predict\n            tensor_to_predict_start_time = time.time()\n            output_dict = self.model(feature)\n            tensor_to_predict_elapsed_time = time.time() - tensor_to_predict_start_time\n\n            if \"token_key\" not in helper:\n                raise ValueError(\n                    \"helper must have 'token_key' data for 1-example inference latency.\"\n                )\n\n            tensor_to_predict_elapsed_time *= 1000  # unit: sec -> ms\n            tensor_to_predict = {\n                \"elapsed_time\": tensor_to_predict_elapsed_time,\n                \"token_count\": len(helper[helper[\"token_key\"]]),\n            }\n            tensor_to_predicts.append(tensor_to_predict)\n\n            if tensor_to_predict_elapsed_time > max_latency:\n                raw_example_items.close()\n                break\n\n        total_tensor_to_predict = sum(\n            [tensor_to_predict[\"elapsed_time\"] for tensor_to_predict in tensor_to_predicts]\n        )\n\n        max_token_count_per_times = {}\n        max_times = list(range(0, max_latency+1, 100))\n        for t2p in sorted(tensor_to_predicts, key=lambda x: x[\"token_count\"]):\n            elapsed_time = t2p[\"elapsed_time\"]\n            token_count = t2p[\"token_count\"]\n\n            for max_time in max_times:\n                if elapsed_time < max_time:\n                    max_token_count_per_times[max_time] = token_count\n\n        result = {\n            \"average_raw_to_tensor\": total_raw_to_tensor_time / len(raw_examples),\n            \"average_tensor_to_predict\": total_tensor_to_predict / len(raw_examples),\n            \"average_end_to_end\": (total_raw_to_tensor_time + total_tensor_to_predict)\n            / len(raw_examples),\n            \"tensor_to_predicts\": tensor_to_predicts,\n            \"max_token_count_per_time\": max_token_count_per_times\n        }\n\n        env = \"gpu\" if torch.cuda.is_available() else \"cpu\"\n        file_name = f\"{self.model_name}-{env}.json\"\n        with open(file_name, \"w\") as f:\n            json.dump(result, f, indent=4)\n\n        logger.info(f\"saved inference_latency results. {file_name}\")\n\n    def _is_early_stopping(self, metrics):\n        score = metrics[self.metric_key]\n\n        if score > self.metric_logs[\"best_score\"]:\n            self.training_logs[\"early_stopping_count\"] = 0\n        else:\n            self.training_logs[\"early_stopping_count\"] += 1\n\n        if self.training_logs[\"early_stopping_count\"] >= self.early_stopping_threshold:\n            self.training_logs[\"early_stopping\"] = True\n            return True\n        else:\n            return False\n\n    def _report_metrics(self, tensorboard=True, train_metrics=None, valid_metrics=None):\n\n        total_metrics = {}\n\n        def update_metrics(metrics, category=\"\"):\n            if metrics is not None:\n                for k, v in metrics.items():\n                    total_metrics[f\"{category}/{k}\"] = v\n\n        update_metrics(train_metrics, \"train\")\n        update_metrics(valid_metrics, \"valid\")\n\n        # TensorBoard\n        if tensorboard:\n            self.tensorboard.scalar_summaries(self.train_counter.get_display(), total_metrics)\n\n        # Console\n        metric_console = \"\"\n        if train_metrics:\n            metric_console += (\n                f\"\\n# Epoch: [{self.train_counter.epoch}/{self.num_epochs}]: Metrics \\n\"\n            )\n        metric_console += json.dumps(total_metrics, indent=4)\n        logger.info(metric_console)\n\n        if valid_metrics:\n            self._update_metric_logs(total_metrics)\n\n    def _update_metric_logs(self, total_metrics):\n        for k, v in total_metrics.items():\n            if self.metric_logs.get(k, None) is None:\n                self.metric_logs[k] = [v]\n            else:\n                self.metric_logs[k].append(v)\n\n        valid_score = total_metrics.get(f\"valid/{self.metric_key}\", None)\n        if valid_score and valid_score > self.metric_logs[\"best_score\"]:\n            logger.info(f\" * Best validation score so far. ({self.metric_key}) : {valid_score}\")\n            self.metric_logs[\"best_score\"] = valid_score\n            self.metric_logs[\"best\"] = total_metrics\n            self.metric_logs[\"best_epoch\"] = self.train_counter.epoch\n            self.metric_logs[\"best_global_step\"] = self.train_counter.global_step\n        else:\n            logger.info(\n                f\" * Current best validation score. ({self.metric_key}) : {self.metric_logs['best_score']}\"\n            )\n\n    def _estimate_remainig_time(self, start_time):\n        elapsed_time = time.time() - start_time\n        estimated_time_remaining = elapsed_time * (\n            (self.num_epochs - self.train_counter.epoch) / float(self.train_counter.epoch) - 1\n        )\n        formatted_time = time.strftime(\"%H:%M:%S\", time.gmtime(estimated_time_remaining))\n        logger.info(f\"Estimated training time remaining: {formatted_time} \")\n\n    def _report_trainings(self, start_time, train_loader=None, valid_loader=None):\n        elapsed_time = time.time() - start_time\n        self.training_logs[\"elapsed_time\"] = (time.strftime(\"%H:%M:%S\", time.gmtime(elapsed_time)),)\n\n        if train_loader is not None:\n            self.training_logs[\"train_dataset\"] = json.loads(str(train_loader.dataset))\n        if valid_loader is not None:\n            self.training_logs[\"valid_dataset\"] = json.loads(str(valid_loader.dataset))\n\n    def _run_epoch(\n        self,\n        data_loader,\n        valid_loader=None,\n        is_training=True,\n        optimizer=None,\n        disable_prograss_bar=True,\n        verbose_step_count=100,\n        eval_and_save_step_count=None,\n    ):\n        \"\"\"\n        Run Epoch\n\n        1. forward inputs to model\n        2. (training) backpropagation\n        3. update predictions\n        4. make metrics\n        \"\"\"\n\n        if is_training:\n            logger.info(\"# Train Mode.\")\n            self.model.train()\n        else:\n            logger.info(\"# Evaluate Mode.\")\n            self.model.eval()\n\n        # set dataset (train/valid)\n        self._set_dataset_to_model(data_loader.dataset)\n\n        metrics = {}\n        predictions = {}\n\n        epoch_loss = 0\n        epoch_start_time = time.time()\n        step_start_time = time.time()\n\n        eval_example_count = 0\n\n        for step, batch in enumerate(tqdm(data_loader, disable=disable_prograss_bar)):\n            inputs = batch.to_dict()  # for DataParallel\n            output_dict = self.model(**inputs)\n\n            loss = output_dict[\"loss\"]\n            if self.use_multi_gpu:\n                loss = loss.mean()\n            if self.gradient_accumulation_steps > 1:\n                loss = loss / self.gradient_accumulation_steps\n\n            epoch_loss += loss.item()\n\n            if is_training:\n                # Training Verbose\n                if self.train_counter.global_step == 0:\n                    logger.info(f\"  Start - Batch Loss: {loss.item():.5f}\")\n\n                if (\n                    self.train_counter.global_step != 0\n                    and self.train_counter.global_step % verbose_step_count == 0\n                ):\n                    step_elapsed_time = time.time() - step_start_time\n\n                    logger.info(\n                        f\"  Step: {self.train_counter.global_step} Batch Loss: {loss.item():.5f}  {step_elapsed_time:.5f} sec\"\n                    )\n                    self.tensorboard.scalar_summary(\n                        self.train_counter.global_step, \"train/batch_loss\", loss.item()\n                    )\n\n                    step_start_time = time.time()\n\n                loss.backward()\n\n                if self.grad_max_norm:\n                    clip_grad_norm_(self._get_model_parameters(), self.grad_max_norm)\n\n                if (step + 1) % self.gradient_accumulation_steps == 0:\n                    # Backpropagation\n                    if self.learning_rate_scheduler:\n                        self.learning_rate_scheduler.step_batch(self.train_counter.global_step)\n\n                    optimizer.step()\n                    optimizer.zero_grad()\n                    self.train_counter.global_step += 1\n\n                    if self.exponential_moving_average:\n                        for name, param in self.model.named_parameters():\n                            if param.requires_grad:\n                                param.data = self.exponential_moving_average(name, param.data)\n\n                    # Evaluate then Save checkpoint\n                    if (\n                        valid_loader\n                        and type(eval_and_save_step_count) == int\n                        and self.train_counter.global_step % eval_and_save_step_count == 0\n                    ):\n                        with torch.no_grad():\n                            valid_metrics = self._run_epoch(valid_loader, is_training=False)\n                        self._check_valid_results(valid_metrics, report=True)\n                        self.save(optimizer)\n\n                        if is_training:  # roll-back to train mode\n                            self.model.train()\n                            self._set_dataset_to_model(data_loader.dataset)\n            else:\n                if eval_example_count < self.max_eval_examples:\n                    total_step_count = int(len(data_loader) / data_loader.batch_size)\n                    random_num = random.randint(0, total_step_count)\n\n                    if random_num <= self.max_eval_examples:\n                        eval_example_predictions = {}\n                        self._update_predictions(eval_example_predictions, output_dict)\n\n                        random_index = random.randint(0, data_loader.batch_size)\n                        self._print_examples(random_index, inputs, eval_example_predictions)\n                        eval_example_count += 1\n\n            self._update_predictions(predictions, output_dict)\n\n        epoch_loss /= len(data_loader)\n        epoch_elapsed_time = time.time() - epoch_start_time\n\n        logger.info(\"Epoch duration: \" + time.strftime(\"%H:%M:%S\", time.gmtime(epoch_elapsed_time)))\n\n        # Updat metrics\n        metrics[\"loss\"] = epoch_loss\n        metrics[\"epoch_time\"] = epoch_elapsed_time\n        metrics.update(self._make_metrics(predictions))  # model metric\n\n        return metrics\n\n    def _set_dataset_to_model(self, dataset):\n        if self.use_multi_gpu:\n            self.model.module.dataset = dataset\n        else:\n            self.model.dataset = dataset\n\n    def _get_model_parameters(self):\n        if self.use_multi_gpu:\n            return self.model.module.parameters()\n        else:\n            return self.model.parameters()\n\n    def _check_valid_results(self, metrics, report=False):\n        if self.learning_rate_scheduler:\n            # The LRScheduler API is agnostic to whether your schedule requires a validation metric -\n            # if it doesn't, the validation metric passed here is ignored.\n            this_epoch_val_metric = metrics[self.metric_key]\n            self.learning_rate_scheduler.step(this_epoch_val_metric, self.train_counter.global_step)\n\n        if self._is_early_stopping(metrics):\n            self.early_stopping = True\n            logger.info(\" --- Early Stopping. --- \")\n\n        if report:\n            self._report_metrics(valid_metrics=metrics)\n\n    def _make_metrics(self, predictions):\n        model = self.model\n        if self.use_multi_gpu:\n            model = model.module\n\n        model.train_counter = self.train_counter\n        return model.make_metrics(predictions)\n\n    def _update_predictions(self, predictions, output_dict):\n        if self.use_multi_gpu:\n            predictions.update(self.model.module.make_predictions(output_dict))\n        else:\n            predictions.update(self.model.make_predictions(output_dict))\n\n    def _print_examples(self, index, inputs, predictions):\n        try:\n            if self.use_multi_gpu:\n                self.model.module.print_examples(index, inputs, predictions)\n            else:\n                self.model.print_examples(index, inputs, predictions)\n        except IndexError:\n            pass\n\n    def predict(self, raw_feature, raw_to_tensor_fn, arguments, interactive=False):\n        \"\"\" Inference / Predict \"\"\"\n\n        self.model.eval()\n        with torch.no_grad():\n            if interactive:  # pragma: no cover\n                while True:\n                    for k in raw_feature:\n                        raw_feature[k] = utils.get_user_input(k)\n\n                    tensor_feature, helper = raw_to_tensor_fn(raw_feature)\n                    output_dict = self.model(tensor_feature)\n\n                    arguments.update(raw_feature)\n                    predict = self.model.predict(output_dict, arguments, helper)\n                    print(f\"Predict: {pretty_json_dumps(predict)} \\n\")\n            else:\n                tensor_feature, helper = raw_to_tensor_fn(raw_feature)\n                output_dict = self.model(tensor_feature)\n\n                return self.model.predict(output_dict, arguments, helper)\n\n    def save(self, optimizer):\n        if not self.save_checkpoint:\n            return\n\n        # set all config to model\n        model = self.model\n        if self.use_multi_gpu:\n            model = self.model.module\n\n        model.train_counter = self.train_counter\n        model.metrics = self.metric_logs\n\n        if nsml.IS_ON_NSML:\n            nsml.save(self.train_counter.get_display())\n        else:\n            utils.save_checkpoint(self.log_dir, model, optimizer)\n"
  },
  {
    "path": "claf/learn/utils.py",
    "content": "\nfrom collections import OrderedDict\nimport json\nimport logging\nfrom pathlib import Path\nimport os\nimport re\n\nimport torch\nfrom torch.nn import DataParallel\nimport requests\n\nfrom claf import nsml\nfrom claf.tokens.vocabulary import Vocab\n\n\nlogger = logging.getLogger(__name__)\n\n\n\"\"\" Train Counter \"\"\"\n\n\nclass TrainCounter:\n\n    global_step = 0\n    epoch = 0\n\n    def __init__(self, display_unit=\"epoch\"):\n        if type(display_unit) == int:\n            display_unit = f\"every_{display_unit}_global_step\"\n        self.display_unit = display_unit\n\n    def get_display(self):\n        if self.display_unit == \"epoch\":\n            return self.epoch\n        else:\n            return self.global_step\n\n\n\"\"\" Save and Load checkpoint \"\"\"\n\n\ndef load_model_checkpoint(model, checkpoint):\n    model.load_state_dict(checkpoint[\"weights\"])\n    model.config = checkpoint[\"config\"]\n    model.metrics = checkpoint[\"metrics\"]\n    model.init_params = checkpoint[\"init_params\"]\n    model.predict_helper = checkpoint[\"predict_helper\"]\n    model.train_counter = checkpoint[\"train_counter\"]\n    model.vocabs = load_vocabs(checkpoint)\n\n    logger.info(f\"Load model checkpoints...!\")\n    return model\n\n\ndef load_optimizer_checkpoint(optimizer, checkpoint):\n    optimizer.load_state_dict(checkpoint[\"optimizer\"])\n\n    logger.info(f\"Load optimizer checkpoints...!\")\n    return optimizer\n\n\ndef load_vocabs(model_checkpoint):\n    vocabs = {}\n    token_config = model_checkpoint[\"config\"][\"token\"]\n    for token_name in token_config[\"names\"]:\n        token = token_config[token_name]\n        vocab_config = token.get(\"vocab\", {})\n\n        texts = model_checkpoint[\"vocab_texts\"][token_name]\n        vocabs[token_name] = Vocab(token_name, **vocab_config).from_texts(texts)\n    return vocabs\n\n\ndef save_checkpoint(path, model, optimizer, max_to_keep=10):\n    path = Path(path)\n\n    checkpoint_dir = path / \"checkpoint\"\n    checkpoint_dir.mkdir(exist_ok=True)\n\n    # Remove old checkpoints\n    sorted_path = get_sorted_path(checkpoint_dir)\n    if len(sorted_path) > max_to_keep:\n        remove_train_counts = list(sorted_path.keys())[: -(max_to_keep - 1)]\n        for train_count in remove_train_counts:\n            optimizer_path = sorted_path[train_count].get(\"optimizer\", None)\n            if optimizer_path:\n                os.remove(optimizer_path)\n\n            model_path = sorted_path[train_count].get(\"model\", None)\n            if model_path:\n                os.remove(model_path)\n\n    train_counter = model.train_counter\n\n    optimizer_path = checkpoint_dir / f\"optimizer_{train_counter.get_display()}.pkl\"\n    torch.save({\"optimizer\": optimizer.state_dict()}, optimizer_path)\n\n    model_path = checkpoint_dir / f\"model_{train_counter.get_display()}.pkl\"\n    torch.save(\n        {\n            \"config\": model.config,\n            \"init_params\": model.init_params,\n            \"predict_helper\": model.predict_helper,\n            \"metrics\": model.metrics,\n            \"train_counter\": model.train_counter,\n            \"vocab_texts\": {k: v.to_text() for k, v in model.vocabs.items()},\n            \"weights\": model.state_dict(),\n        },\n        model_path,\n    )\n\n    # Write Vocab as text file (Only once)\n    vocab_dir = path / \"vocab\"\n    vocab_dir.mkdir(exist_ok=True)\n\n    for token_name, vocab in model.vocabs.items():\n        vocab_path = vocab_dir / f\"{token_name}.txt\"\n        if not vocab_path.exists():\n            vocab.dump(vocab_path)\n\n    logger.info(f\"Save {train_counter.global_step} global_step checkpoints...!\")\n\n\ndef get_sorted_path(checkpoint_dir, both_exist=False):\n    paths = []\n    for root, dirs, files in os.walk(checkpoint_dir):\n        for f_name in files:\n            if \"model\" in f_name or \"optimizer\" in f_name:\n                paths.append(Path(root) / f_name)\n\n    path_with_train_count = {}\n    for path in paths:\n        train_count = re.findall(\"\\d+\", path.name)[0]\n        train_count = int(train_count)\n        if train_count not in path_with_train_count:\n            path_with_train_count[train_count] = {}\n\n        if \"model\" in path.name:\n            path_with_train_count[train_count][\"model\"] = path\n        if \"optimizer\" in path.name:\n            path_with_train_count[train_count][\"optimizer\"] = path\n\n    if both_exist:\n        remove_keys = []\n        for key, checkpoint in path_with_train_count.items():\n            if not (\"model\" in checkpoint and \"optimizer\" in checkpoint):\n                remove_keys.append(key)\n\n        for key in remove_keys:\n            del path_with_train_count[key]\n\n    return OrderedDict(sorted(path_with_train_count.items()))\n\n\n\"\"\" NSML \"\"\"\n\n\ndef bind_nsml(model, **kwargs):  # pragma: no cover\n    if type(model) == DataParallel:\n        model = model.module\n\n    CHECKPOINT_FNAME = \"checkpoint.bin\"\n\n    def infer(raw_data, **kwargs):\n        print(\"raw_data:\", raw_data)\n\n    def load(dir_path, *args):\n        checkpoint_path = os.path.join(dir_path, CHECKPOINT_FNAME)\n        checkpoint = torch.load(checkpoint_path)\n\n        model.load_state_dict(checkpoint[\"weights\"])\n        model.config = checkpoint[\"config\"]\n        model.metrics = checkpoint[\"metrics\"]\n        model.init_params = checkpoint[\"init_params\"],\n        model.predict_helper = checkpoint[\"predict_helper\"],\n        model.train_counter = checkpoint[\"train_counter\"]\n        model.vocabs = load_vocabs(checkpoint)\n\n        if \"optimizer\" in kwargs:\n            kwargs[\"optimizer\"].load_state_dict(checkpoint[\"optimizer\"])\n        logger.info(f\"Load checkpoints...! {checkpoint_path}\")\n\n    def save(dir_path, *args):\n        # save the model with 'checkpoint' dictionary.\n        checkpoint_path = os.path.join(dir_path, CHECKPOINT_FNAME)\n        checkpoint = {\n            \"config\": model.config,\n            \"init_params\": model.init_params,\n            \"predict_helper\": model.predict_helper,\n            \"metrics\": model.metrics,\n            \"train_counter\": model.train_counter,\n            \"vocab_texts\": {k: v.to_text() for k, v in model.vocabs.items()},\n            \"weights\": model.state_dict(),\n        }\n\n        if \"optimizer\" in kwargs:\n            checkpoint[\"optimizer\"] = kwargs[\"optimizer\"].state_dict()\n\n        torch.save(checkpoint, checkpoint_path)\n\n        train_counter = model.train_counter\n        logger.info(f\"Save {train_counter.global_step} global_step checkpoints...! {checkpoint_path}\")\n\n    # function in function is just used to divide the namespace.\n    nsml.bind(save, load, infer)\n\n\n\"\"\" Notification \"\"\"\n\n\ndef get_session_name():\n    session_name = \"local\"\n    if nsml.IS_ON_NSML:\n        session_name = nsml.SESSION_NAME\n    return session_name\n\n\ndef send_message_to_slack(webhook_url, title=None, message=None):  # pragma: no cover\n    if message is None:\n        data = {\"text\": f\"{get_session_name()} session is exited.\"}\n    else:\n        data = {\"attachments\": [{\"title\": title, \"text\": message, \"color\": \"#438C56\"}]}\n\n    try:\n        if webhook_url == \"\":\n            print(data[\"text\"])\n        else:\n            requests.post(webhook_url, data=json.dumps(data))\n    except Exception as e:\n        print(str(e))\n"
  },
  {
    "path": "claf/machine/__init__.py",
    "content": "\nfrom claf.machine.open_qa import OpenQA\nfrom claf.machine.nlu import NLU\n\n\n# fmt: off\n\n__all__ = [\n    \"OpenQA\",\n    \"NLU\",\n]\n\n\n# fmt: on\n"
  },
  {
    "path": "claf/machine/base.py",
    "content": "\nfrom argparse import Namespace\nimport json\n\nfrom claf.config.namespace import NestedNamespace\nfrom claf.config.registry import Registry\nfrom claf.learn.experiment import Experiment\nfrom claf.learn.mode import Mode\nfrom claf.machine.module import Module\n\n\nclass Machine:\n    \"\"\"\n    Machine: Combine modules then make a NLP Machine\n\n    * Args:\n        config: machine_config\n    \"\"\"\n\n    def __init__(self, config):\n        self.config = config\n        self.registry = Registry()\n\n    def load(self):\n        raise NotImplementedError(\"\")\n\n    @classmethod\n    def load_from_config(cls, config_path):\n        with open(config_path, \"r\", encoding=\"utf-8\") as in_file:\n            machine_config = NestedNamespace()\n            machine_config.load_from_json(json.load(in_file))\n\n        machine_name = machine_config.name\n        config = getattr(machine_config, machine_name, {})\n        return cls(config)\n\n    def __call__(self, text):\n        raise NotImplementedError(\"\")\n\n    def make_module(self, config):\n        \"\"\"\n        Make component or experiment for claf Machine's module\n\n        * Args:\n            - config: module's config (claf.config.namespace.NestedNamespace)\n        \"\"\"\n\n        module_type = config.type\n        if module_type == Module.COMPONENT:\n            name = config.name\n            module_config = getattr(config, name, {})\n            if isinstance(module_config, Namespace):\n                module_config = vars(module_config)\n\n            if getattr(config, \"params\", None):\n                module_config.update(config.params)\n            return self.registry.get(f\"component:{name}\")(**module_config)\n        elif module_type == Module.EXPERIMENT:\n            experiment_config = Namespace()\n            experiment_config.checkpoint_path = config.checkpoint_path\n            experiment_config.cuda_devices = getattr(config, \"cuda_devices\", None)\n            experiment_config.interactive = False\n\n            experiment = Experiment(Mode.PREDICT, experiment_config)\n            experiment.set_predict_mode(preload=True)\n            return experiment\n        else:\n            raise ValueError(\n                f\"module_type is available only [component|experiment]. not '{module_type}'\"\n            )\n"
  },
  {
    "path": "claf/machine/components/__init__.py",
    "content": "\nfrom claf.machine.components.retrieval.tfidf import TFIDF\n\n# fmt: off\n\n__all__ = [\n    \"TFIDF\",  # Retrieval\n]\n\n# fmt: on\n"
  },
  {
    "path": "claf/machine/components/retrieval/__init__.py",
    "content": "\n"
  },
  {
    "path": "claf/machine/components/retrieval/tfidf.py",
    "content": "\nfrom pathlib import Path\n\nfrom gensim.corpora import Dictionary\nfrom gensim.models import TfidfModel\nfrom gensim.similarities import MatrixSimilarity, SparseMatrixSimilarity\n\nfrom tqdm import tqdm\n\nfrom claf.decorator import register\n\n\n@register(\"component:tfidf\")\nclass TFIDF:\n    \"\"\"\n    TF-IDF document retrieval model\n\n    - Term Frequency\n    - Inverse Document Frequency\n    - log(tf + 1) * log((N - Nt + 0.5) / (Nt + 0.5))\n\n    * Kwargs:\n        k: the number of top k results\n    \"\"\"\n\n    VOCAB_FNAME = \"vocab.txt\"\n    TFIDF_FNAME = \"tfidf.model\"\n    INDEX_FNAME = \"similarities.index\"\n\n    def __init__(self, texts, word_tokenizer, k=1):\n        super(TFIDF, self).__init__()\n        self.k = k\n\n        self.texts = texts\n        self.word_tokenizer = word_tokenizer\n\n    def init(self):\n        corpus = [\n            self.word_tokenizer.tokenize(text)\n            for text in tqdm(self.texts, desc=\"make corpus (Tokenize)\")\n        ]\n        self.vocab = Dictionary(corpus)\n        self.init_model()\n\n    def init_model(self):\n        corpus = []\n        for text in tqdm(self.texts, desc=\"make corpus (BoW)\"):\n            corpus.append(self.parse(text))\n\n        self.model = TfidfModel(corpus)\n        self.index = SparseMatrixSimilarity(self.model[corpus], num_features=len(self.vocab))\n\n    def get_closest(self, query):\n        query_tfidf = self.text_to_tfidf(query)\n\n        self.index.num_best = self.k\n        results = self.index[query_tfidf]\n\n        return [\n            (text_index, self.texts[text_index], score)  # return (index, text, score)\n            for (text_index, score) in results\n        ]\n\n    def parse(self, query, ngram=1):\n        query_tokens = self.word_tokenizer.tokenize(query)\n        return self.vocab.doc2bow(query_tokens)\n\n    def text_to_tfidf(self, query):\n        \"\"\"\n        Create a tfidf-weighted word vector from query.\n\n        tfidf = log(tf + 1) * log((N - Nt + 0.5) / (Nt + 0.5))\n        \"\"\"\n\n        query_bow = self.parse(query)\n        return self.model[query_bow]\n\n    def save(self, dir_path):\n        dir_path = Path(dir_path)\n        dir_path.mkdir(parents=True, exist_ok=True)\n\n        vocab_path = str(dir_path / self.VOCAB_FNAME)\n        model_path = str(dir_path / self.TFIDF_FNAME)\n        index_path = str(dir_path / self.INDEX_FNAME)\n\n        self.vocab.save(vocab_path)\n        self.model.save(model_path)\n        self.index.save(index_path)\n\n    def load(self, dir_path):\n        dir_path = Path(dir_path)\n\n        vocab_path = str(dir_path / self.VOCAB_FNAME)\n        model_path = str(dir_path / self.TFIDF_FNAME)\n        index_path = str(dir_path / self.INDEX_FNAME)\n\n        self.vocab = Dictionary.load(vocab_path)\n        self.model = TfidfModel.load(model_path)\n        self.index = SparseMatrixSimilarity.load(index_path)\n"
  },
  {
    "path": "claf/machine/ensemble_topk.py",
    "content": "\nfrom functools import reduce  # Valid in Python 2.6+, required in Python 3\nimport logging\nimport json\nimport operator\n\nfrom overrides import overrides\nfrom tqdm import tqdm\n\nfrom claf.data.data_handler import CachePath, DataHandler\nfrom claf.decorator import register\nfrom claf.machine.base import Machine\nfrom claf.metric.korquad_v1_official import evaluate, metric_max_over_ground_truths, f1_score, normalize_answer\n\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"machine:mrc_ensemble\")\nclass MRCEnsemble(Machine):\n    \"\"\"\n    Machine Reading Comprehension Ensemble\n\n    * Args:\n        config: machine_config\n    \"\"\"\n\n    def __init__(self, config):\n        super(MRCEnsemble, self).__init__(config)\n        self.data_handler = DataHandler(CachePath.MACHINE / \"mrc_ensemble\")\n\n        self.load()\n\n    @overrides\n    def load(self):\n        mrc_config = self.config.reading_comprehension\n\n        # Model 1 - BERT-Kor\n        self.rc_experiment1 = self.make_module(mrc_config.model_1)\n        print(\"BERT-Kor ready ..! \\n\")\n\n        # # Model 2 - BERT-Multilingual\n        # self.rc_experiment2 = self.make_module(mrc_config.model_2)\n        # print(\"BERT-Multilingual ready ..! \\n\")\n\n        # # Model 3 - DocQA\n        # self.rc_experiment3 = self.make_module(mrc_config.model_3)\n        # print(\"DocQA ready ..! \\n\")\n\n        # # Model 4 - DrQA\n        # self.rc_experiment4 = self.make_module(mrc_config.model_4)\n        # print(\"DrQA ready ..! \\n\")\n\n        print(\"All ready ..! \\n\")\n\n    def evaluate(self, file_path, output_path):\n        # KorQuAD dataset...\n\n        # def get_answer_after_clustering(predictions):\n            # categories = {}\n\n            # for l1 in predictions:\n                # l1_text = l1[\"text\"]\n                # l1_text_normalized = normalize_answer(l1_text)\n\n                # categories[l1_text] = {\n                    # \"items\": [],\n                    # \"score\": 0\n                # }\n\n                # for l2 in predictions:\n                    # l2_text = l2[\"text\"]\n                    # l2_text_normalized = normalize_answer(l2_text)\n\n                    # if l1_text_normalized in l2_text_normalized:\n                        # categories[l1_text][\"items\"].append(l2)\n                        # categories[l1_text][\"score\"] += l2[\"score\"]\n\n            # # # count items then score * 1.n\n            # # for k, v in categories.items():\n                # # ratio = 1 + (len(v[\"items\"]) / 10)\n                # # v[\"score\"] *= ratio\n\n            # highest_category = [categories[c] for c in sorted(categories, key=lambda x: categories[x][\"score\"], reverse=True)][0]\n            # answer_text = sorted(highest_category[\"items\"], key=lambda x: x[\"score\"], reverse=True)[0][\"text\"]\n            # return answer_text\n\n        # def get_answer_after_clustering_marginal(predictions):\n            # categories = {}\n\n            # for l1 in predictions:\n                # l1_text = l1[\"text\"]\n                # l1_text_normalized = normalize_answer(l1_text)\n\n                # categories[l1_text] = {\n                    # \"items\": [],\n                    # \"score\": 0\n                # }\n\n                # for l2 in predictions:\n                    # l2_text = l2[\"text\"]\n                    # l2_text_normalized = normalize_answer(l2_text)\n\n                    # if l1_text_normalized in l2_text_normalized:\n                        # categories[l1_text][\"items\"].append(l2)\n                        # categories[l1_text][\"score\"] *= l2[\"score\"]\n                    # else:\n                        # categories[l1_text][\"score\"] *= 0.01  # Default value\n\n            # # count items then score * 1.n\n            # for k, v in categories.items():\n                # ratio = 1 + (len(v[\"items\"]) / 10)\n                # v[\"score\"] *= ratio\n\n            # highest_category = [categories[c] for c in sorted(categories, key=lambda x: categories[x][\"score\"], reverse=True)][0]\n            # answer_text = sorted(highest_category[\"items\"], key=lambda x: x[\"score\"], reverse=True)[0][\"text\"]\n            # return answer_text\n\n        # def post_processing(text):\n            # # detach josa\n            # # josas = ['은', '는', '이', '가', '을', '를', '과', '와', '이다', '다', '으로', '로', '의', '에']\n            # josas = [\"는\", \"를\", \"이다\", \"으로\", \"에\", \"이라고\", \"라고\", \"와의\", \"인데\"]\n\n            # for josa in josas:\n                # if text.endswith(josa):\n                    # text = text[:-len(josa)]\n                    # break\n\n            # # temperature\n            # if text.endswith(\"°\"):\n                # text += \"C\"\n\n            # # etc\n            # special_cases = [\"(\", \",\", \"였\", \".\"]\n            # for s in special_cases:\n                # if text.endswith(s):\n                    # text = text[:-len(s)]\n            # return text\n\n        def _clean_text(text):\n            # https://github.com/allenai/document-qa/blob/2f9fa6878b60ed8a8a31bcf03f802cde292fe48b/docqa/data_processing/text_utils.py#L124\n            # be consistent with quotes, and replace \\u2014 and \\u2212 which I have seen being mapped to UNK\n            # by glove word vecs\n            return (\n                text.replace(\"''\", '\"')\n                .replace(\"``\", '\"')\n                .replace(\"\\u2212\", \"-\")\n                .replace(\"\\u2014\", \"\\u2013\")\n            )\n\n        predictions = {}\n        topk_predictions = {}\n\n        print(\"Read input_data...\")\n        data = self.data_handler.read(file_path)\n        squad = json.loads(data)\n        if \"data\" in squad:\n            squad = squad[\"data\"]\n\n        wrong_count = 0\n\n        print(\"Start predict 1-examples...\")\n        for article in tqdm(squad):\n            for paragraph in article[\"paragraphs\"]:\n                context = paragraph[\"context\"]\n\n                for qa in paragraph[\"qas\"]:\n                    question = qa[\"question\"]\n                    id_ = qa[\"id\"]\n\n                    # Marginal probabilities...\n                    # prediction = self.get_predict_with_marginal(context, question)\n                    prediction = self.get_predict(context, question)\n                    # print(\"prediction count:\", len(prediction))\n\n                    topk_predictions[id_] = prediction\n                    predictions[id_] = prediction[0][\"text\"]\n\n                    # answer_texts = [q[\"text\"] for q in qa[\"answers\"]]\n\n                    # # 1. Highest value\n                    # sorted_prediction = sorted(prediction, key=lambda x: x[\"score\"], reverse=True)\n                    # prediction_text = sorted_prediction[0][\"text\"]\n\n                    # 2. Cluster by text\n                    # prediction_text = get_answer_after_clustering_marginal(prediction)\n                    # prediction_text = post_processing(prediction_text)\n\n                    # predictions[id_] = prediction_text\n                    # if prediction_text not in answer_texts:\n                        # pred_f1_score = metric_max_over_ground_truths(f1_score, prediction_text, answer_texts)\n\n                        # if pred_f1_score <= 0.5:\n                            # sorted_prediction = sorted(prediction, key=lambda x: x[\"score\"], reverse=True)\n                            # print(\"predict:\", json.dumps(sorted_prediction[:5], indent=4, ensure_ascii=False))\n                            # print(\"predict_text:\", prediction_text)\n                            # print(\"answers:\", qa[\"answers\"], \"f1:\", pred_f1_score)\n                            # print(\"-\"*50)\n                        # wrong_count += 1\n\n                    # is_answer = False\n                    # for pred in prediction:\n                        # if pred[\"text\"] in answer_texts:\n                            # predictions[id_] = pred[\"text\"]\n                            # is_answer = True\n                            # break\n\n                    # if not is_answer:\n                        # prediction_text = sorted(prediction, key=lambda x: x[\"score\"], reverse=True)[0][\"text\"]\n                        # predictions[id_] = prediction_text\n\n                        # print(\"predict:\", prediction)\n                        # print(\"predict_text:\", prediction_text)\n                        # print(\"answers:\", qa[\"answers\"])\n                        # print(\"-\"*50)\n                        # wrong_count += 1\n\n        print(\"total_count:\", len(predictions), \"wrong_count:\", wrong_count)\n\n        print(\"Completed...!\")\n        with open(output_path, \"w\") as out_file:\n            out_file.write(json.dumps(topk_predictions, indent=4) + \"\\n\")\n\n        # Evaluate\n        with open(file_path) as dataset_file:\n            dataset_json = json.load(dataset_file)\n            dataset = dataset_json\n            if \"data\" in dataset:\n                dataset = dataset[\"data\"]\n        # with open(output_path) as prediction_file:\n            # predictions = json.load(prediction_file)\n\n        results = evaluate(dataset, predictions)\n        print(json.dumps(results))\n\n    def get_predict(self, context, question):\n        raw_feature = {\"context\": context, \"question\": question}\n        # print(raw_feature)\n\n        # Approach 1. Max Prob\n        models = [\n            (self.rc_experiment1, 0.94),\n            # (self.rc_experiment2, 0.90)\n            # (self.rc_experiment3, 0.85),\n            # (self.rc_experiment4, 0.84),\n        ]\n        # models = [self.rc_experiment3, self.rc_experiment4]\n\n        model = models[0][0]\n        return sorted(model.predict(raw_feature), key=lambda x: x[\"score\"], reverse=True)\n"
  },
  {
    "path": "claf/machine/knowlege_base/__init__.py",
    "content": ""
  },
  {
    "path": "claf/machine/knowlege_base/docs.py",
    "content": "\nimport json\nimport logging\nimport os\n\nfrom tqdm import tqdm\n\n\nlogger = logging.getLogger(__name__)\n\n\ndef read_wiki_articles(dir_path):\n    \"\"\"\n    WikiExtractor's output like below:\n    (https://github.com/attardi/wikiextractor)\n\n    wiki_path/\n      - AA\n        - wiki_00\n        - wiki_01\n        ...\n      - AB\n        ...\n    \"\"\"\n    dir_paths = get_subdir_paths(dir_path)\n\n    all_file_path = []\n    for path in dir_paths:\n        all_file_path += get_file_paths(path)\n\n    articles = []\n    for path in tqdm(all_file_path, desc=\"Read Wiki Articles\"):\n        articles += read_wiki_article(path)\n    return articles\n\n\ndef get_subdir_paths(dir_path):\n    dir_paths = []\n\n    for path, subdirs, __ in os.walk(dir_path):\n        for dir_name in subdirs:\n            dir_paths.append(os.path.join(path, dir_name))\n    return dir_paths\n\n\ndef get_file_paths(dir_path):\n    file_paths = []\n\n    for path, _, files in os.walk(dir_path):\n        for file_name in files:\n            file_paths.append(os.path.join(path, file_name))\n    return file_paths\n\n\ndef read_wiki_article(file_path):\n    \"\"\"\n    Wiki articles format (WikiExtractor)\n    => {\"id\": \"\", \"revid\": \"\", \"url\":\"\", \"title\": \"\", \"text\": \"...\"}\n    \"\"\"\n\n    articles = []\n    with open(file_path, \"r\", encoding=\"utf-8\") as in_file:\n        for line in in_file.readlines():\n            article = json.loads(line)\n            articles.append(article)\n\n    return [WikiArticle(**article) for article in articles]\n\n\nclass WikiArticle:  # pragma: no cover\n    def __init__(self, id=None, url=None, title=None, text=None):\n        self._id = id\n        self._url = url\n        self._title = title\n        self._text = text\n\n    @property\n    def id(self):\n        return self._id\n\n    @id.setter\n    def id(self, id):\n        self._id = id\n\n    @property\n    def url(self):\n        return self._url\n\n    @url.setter\n    def url(self, url):\n        self._url = url\n\n    @property\n    def title(self):\n        return self._title\n\n    @title.setter\n    def title(self, title):\n        self._title = title\n\n    @property\n    def text(self):\n        return self._text\n\n    @text.setter\n    def text(self, text):\n        self._text = text\n"
  },
  {
    "path": "claf/machine/module.py",
    "content": "class Module:\n    \"\"\" Machine Flag class \"\"\"\n\n    KNOWLEDGE_BASE = \"knowledge_base\"\n    COMPONENT = \"component\"\n    EXPERIMENT = \"experiment\"\n"
  },
  {
    "path": "claf/machine/nlu.py",
    "content": "\nimport logging\n\nfrom overrides import overrides\n\nfrom claf.data.data_handler import CachePath, DataHandler\nfrom claf.decorator import register\n\nfrom claf.machine.base import Machine\n\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"machine:nlu\")\nclass NLU(Machine):\n    \"\"\"\n    Natural Language Understanding Machine\n\n    * Args:\n        config: machine_config\n    \"\"\"\n\n    def __init__(self, config):\n        super(NLU, self).__init__(config)\n        self.data_handler = DataHandler(CachePath.MACHINE / \"nlu\")\n\n        self.load()\n\n    @overrides\n    def load(self):\n        # NLU\n        # - Intent Classification Experiment\n        # - Slot Filling Experiment\n\n        nlu_config = self.config.nlu\n\n        self.ic_experiment = self.make_module(nlu_config.intent)\n        self.sf_experiment = self.make_module(nlu_config.slots)\n        print(\"Ready ..! \\n\")\n\n    @overrides\n    def __call__(self, utterance):\n\n        nlu_result = dict()\n\n        intent_info = self.intent_classification(utterance)\n        nlu_result.update({\"intent\": intent_info[\"class_text\"]})\n\n        slots_info = self.slot_filling(utterance)\n        nlu_result.update({\"slots\": slots_info[\"tag_dict\"]})\n\n        return nlu_result\n\n    def intent_classification(self, utterance):\n        raw_feature = {\"sequence\": utterance}\n        return self.ic_experiment.predict(raw_feature)\n\n    def slot_filling(self, utterance):\n        raw_feature = {\"sequence\": utterance}\n        return self.sf_experiment.predict(raw_feature)\n"
  },
  {
    "path": "claf/machine/open_qa.py",
    "content": "\nimport logging\nimport os\n\nfrom overrides import overrides\n\nfrom claf.config.utils import convert_config2dict\nfrom claf.data.data_handler import CachePath, DataHandler\nfrom claf.decorator import register\nfrom claf.factory.tokens import make_all_tokenizers\n\nfrom claf.machine.base import Machine\nfrom claf.machine.knowlege_base.docs import read_wiki_articles\n\n\nlogger = logging.getLogger(__name__)\n\n\n@register(\"machine:open_qa\")\nclass OpenQA(Machine):\n    \"\"\"\n    Open-Domain Question Answer Machine (DrQA)\n\n    DrQA is a system for reading comprehension applied to open-domain question answering.\n\n    * Args:\n        config: machine_config\n    \"\"\"\n\n    def __init__(self, config):\n        super(OpenQA, self).__init__(config)\n        self.data_handler = DataHandler(CachePath.MACHINE / \"open_qa\")\n\n        self.load()\n\n    @overrides\n    def load(self):\n        # Tokenizers\n        tokenizers_config = convert_config2dict(self.config.tokenizers)\n        tokenizers = make_all_tokenizers(tokenizers_config)\n\n        # Knowledge Base\n        # - Wiki\n        knowledge_base_config = self.config.knowledge_base\n        self.docs, doc_name = self._load_knowledge_base(knowledge_base_config)\n\n        # Reasoning\n        # - Document Retrieval\n        # - Reading Comprehension Experiment\n        reasoning_config = self.config.reasoning\n\n        self.document_retrieval = self._load_document_retrieval(\n            reasoning_config.document_retrieval, tokenizers[\"word\"], basename=doc_name\n        )\n        self.rc_experiment = self.make_module(reasoning_config.reading_comprehension)\n        print(\"Ready ..! \\n\")\n\n    def _load_knowledge_base(self, config):\n        docs = read_wiki_articles(config.wiki)  # TODO: fix read whole wiki\n        doc_name = f\"{os.path.basename(config.wiki)}-{len(docs)}-articles\"\n        return docs, doc_name\n\n    def _load_document_retrieval(self, config, word_tokenizer, basename=\"docs\"):\n        dir_path = f\"doc-{config.type}-{config.name}-{word_tokenizer.cache_name}\"\n        doc_retrieval_path = os.path.join(dir_path, basename)\n\n        config.params = {\n            \"texts\": [doc.title for doc in self.docs],\n            \"word_tokenizer\": word_tokenizer,\n        }\n        document_retrieval = self.make_module(config)\n\n        doc_retrieval_path = self.data_handler.convert_cache_path(doc_retrieval_path)\n        if doc_retrieval_path.exists():\n            document_retrieval.load(doc_retrieval_path)\n        else:\n            print(\"Start Document Retrieval Indexing ...\")\n            document_retrieval.init()\n            document_retrieval.save(doc_retrieval_path)  # Save Cache\n        print(\"Completed!\")\n        return document_retrieval\n\n    @overrides\n    def __call__(self, question):\n        result_docs = self.search_documents(question)\n        print(\"-\" * 50)\n        print(\"Doc Scores:\")\n        for doc in result_docs:\n            print(f\" - {doc[1]} : {doc[2]}\")\n        print(\"-\" * 50)\n\n        passages = []\n        for result_doc in result_docs:\n            doc_index = result_doc[0]\n            doc = self.docs[doc_index]\n            passages.append(doc.text)\n\n        answers = []\n        for passage in passages:\n            answer_text = self.machine_reading(passage, question)\n            answers.append(answer_text)\n\n        ranked_answers = sorted(answers, key=lambda x: x[\"score\"], reverse=True)\n        return ranked_answers\n\n    def search_documents(self, question):\n        return self.document_retrieval.get_closest(question)\n\n    def machine_reading(self, context, question):\n        raw_feature = {\"context\": context, \"question\": question}\n        return self.rc_experiment.predict(raw_feature)\n"
  },
  {
    "path": "claf/metric/__init__.py",
    "content": ""
  },
  {
    "path": "claf/metric/classification.py",
    "content": "\ndef recall(pycm_obj):\n    return {key: pycm_obj.TPR[key] if pycm_obj.TPR[key] != \"None\" else 0. for key in pycm_obj.TPR}\n\n\ndef precision(pycm_obj):\n    return {key: pycm_obj.PPV[key] if pycm_obj.PPV[key] != \"None\" else 0. for key in pycm_obj.PPV}\n\n\ndef f1(pycm_obj):\n    return {key: pycm_obj.F1[key] if pycm_obj.F1[key] != \"None\" else 0. for key in pycm_obj.F1}\n\n\ndef macro_recall(pycm_obj):\n    return sum(recall(pycm_obj).values()) / len(pycm_obj.classes)\n\n\ndef macro_precision(pycm_obj):\n    return sum(precision(pycm_obj).values()) / len(pycm_obj.classes)\n\n\ndef macro_f1(pycm_obj):\n    return sum(f1(pycm_obj).values()) / len(pycm_obj.classes)\n"
  },
  {
    "path": "claf/metric/glue.py",
    "content": "\nimport numpy as np\nfrom scipy.stats import pearsonr, spearmanr\nfrom sklearn.metrics import matthews_corrcoef, f1_score\n\n\ndef simple_accuracy(preds, labels):\n    preds = np.array(preds)\n    labels = np.array(labels)\n    return (preds == labels).mean()\n\n\ndef f1(preds, labels):\n    return {\n        \"f1\": f1_score(y_true=labels, y_pred=preds)\n    }\n\n\ndef matthews_corr(preds, labels):\n    return {\n        \"matthews_corr\": matthews_corrcoef(labels, preds),\n    }\n\n\ndef pearson_and_spearman(preds, labels):\n    pearson_corr = pearsonr(preds, labels)[0]\n    spearman_corr = spearmanr(preds, labels)[0]\n\n    if pearson_corr == \"\":\n        pearson_corr = 0\n    if spearman_corr == \"\":\n        spearman_corr = 0\n\n    return {\n        \"pearson\": pearson_corr,\n        \"spearmanr\": spearman_corr,\n        \"pearson_spearman_corr\": (pearson_corr + spearman_corr) / 2,\n    }\n"
  },
  {
    "path": "claf/metric/korquad_v1_official.py",
    "content": "from __future__ import print_function\nfrom collections import Counter\nimport string\nimport re\nimport argparse\nimport json\nimport sys\n\n'''KorQuAD v1.0에 대한 공식 평가 스크립트 '''\n'''본 스크립트는 SQuAD v1.1 평가 스크립트 https://rajpurkar.github.io/SQuAD-explorer/ 를 바탕으로 작성됨.'''\n\ndef normalize_answer(s):\n    def remove_(text):\n        ''' 불필요한 기호 제거 '''\n        text = re.sub(\"'\", \" \", text)\n        text = re.sub('\"', \" \", text)\n        text = re.sub('《', \" \", text)\n        text = re.sub('》', \" \", text)\n        text = re.sub('<', \" \", text)\n        text = re.sub('>', \" \", text)\n        text = re.sub('〈', \" \", text)\n        text = re.sub('〉', \" \", text)\n        text = re.sub(\"\\(\", \" \", text)\n        text = re.sub(\"\\)\", \" \", text)\n        text = re.sub(\"‘\", \" \", text)\n        text = re.sub(\"’\", \" \", text)\n        return text\n\n    def white_space_fix(text):\n        return ' '.join(text.split())\n\n    def remove_punc(text):\n        exclude = set(string.punctuation)\n        return ''.join(ch for ch in text if ch not in exclude)\n\n    def lower(text):\n        return text.lower()\n\n    return white_space_fix(remove_punc(lower(remove_(s))))\n\n\ndef f1_score(prediction, ground_truth):\n    prediction_tokens = normalize_answer(prediction).split()\n    ground_truth_tokens = normalize_answer(ground_truth).split()\n\n    #F1 by character\n    prediction_Char = []\n    for tok in prediction_tokens:\n        now = [a for a in tok]\n        prediction_Char.extend(now)\n\n    ground_truth_Char = []\n    for tok in ground_truth_tokens:\n        now = [a for a in tok]\n        ground_truth_Char.extend(now)\n\n    common = Counter(prediction_Char) & Counter(ground_truth_Char)\n    num_same = sum(common.values())\n    if num_same == 0:\n        return 0\n\n    precision = 1.0 * num_same / len(prediction_Char)\n    recall = 1.0 * num_same / len(ground_truth_Char)\n    f1 = (2 * precision * recall) / (precision + recall)\n\n    return f1\n\n\ndef exact_match_score(prediction, ground_truth):\n    return (normalize_answer(prediction) == normalize_answer(ground_truth))\n\n\ndef metric_max_over_ground_truths(metric_fn, prediction, ground_truths):\n    scores_for_ground_truths = []\n    for ground_truth in ground_truths:\n        score = metric_fn(prediction, ground_truth)\n        scores_for_ground_truths.append(score)\n    return max(scores_for_ground_truths)\n\n\ndef evaluate(dataset, predictions):\n    f1 = exact_match = total = 0\n    for article in dataset:\n        for paragraph in article['paragraphs']:\n            for qa in paragraph['qas']:\n                total += 1\n                if qa['id'] not in predictions:\n                    message = 'Unanswered question ' + qa['id'] + \\\n                              ' will receive score 0.'\n                    print(message, file=sys.stderr)\n                    continue\n                ground_truths = list(map(lambda x: x['text'], qa['answers']))\n                prediction = predictions[qa['id']]\n                exact_match += metric_max_over_ground_truths(\n                    exact_match_score, prediction, ground_truths)\n                f1 += metric_max_over_ground_truths(\n                    f1_score, prediction, ground_truths)\n\n    exact_match = 100.0 * exact_match / total\n    f1 = 100.0 * f1 / total\n    return {'em': exact_match, 'f1': f1}\n\n\nif __name__ == '__main__':\n    expected_version = 'KorQuAD_v1.0'\n    parser = argparse.ArgumentParser(\n        description='Evaluation for KorQuAD ' + expected_version)\n    parser.add_argument('dataset_file', help='Dataset file')\n    parser.add_argument('prediction_file', help='Prediction File')\n    args = parser.parse_args()\n    with open(args.dataset_file) as dataset_file:\n        dataset_json = json.load(dataset_file)\n        read_version = \"_\".join(dataset_json['version'].split(\"_\")[:-1])\n        if (read_version != expected_version):\n            print('Evaluation expects ' + expected_version +\n                  ', but got dataset with ' + read_version,\n                  file=sys.stderr)\n        dataset = dataset_json['data']\n    with open(args.prediction_file) as prediction_file:\n        predictions = json.load(prediction_file)\n    print(json.dumps(evaluate(dataset, predictions)))\n\n"
  },
  {
    "path": "claf/metric/regression.py",
    "content": "\nimport numpy as np\n\n\ndef mse(outputs, labels):\n    if type(outputs) == list:\n        outputs = np.array(outputs)\n    if type(labels) == list:\n        labels = np.array(labels)\n\n    # read prediction and compute result\n    if outputs.ndim != 1:\n        outputs = outputs.reshape(-1)\n    if labels.ndim != 1:\n        labels = labels.reshape(-1)\n\n    return np.square(labels.astype(np.float32) - outputs).sum()\n"
  },
  {
    "path": "claf/metric/squad_v1_official.py",
    "content": "\"\"\" Official evaluation script for v1.1 of the SQuAD dataset. \"\"\"\nfrom __future__ import print_function\nfrom collections import Counter\nimport string\nimport re\nimport argparse\nimport json\nimport sys\n\n\ndef normalize_answer(s):  # pragma: no cover\n    \"\"\"Lower text and remove punctuation, articles and extra whitespace.\"\"\"\n\n    def remove_articles(text):\n        return re.sub(r\"\\b(a|an|the)\\b\", \" \", text)\n\n    def white_space_fix(text):\n        return \" \".join(text.split())\n\n    def remove_punc(text):\n        exclude = set(string.punctuation)\n        return \"\".join(ch for ch in text if ch not in exclude)\n\n    def lower(text):\n        return text.lower()\n\n    return white_space_fix(remove_articles(remove_punc(lower(s))))\n\n\ndef f1_score(prediction, ground_truth):  # pragma: no cover\n    prediction_tokens = normalize_answer(prediction).split()\n    ground_truth_tokens = normalize_answer(ground_truth).split()\n    common = Counter(prediction_tokens) & Counter(ground_truth_tokens)\n    num_same = sum(common.values())\n    if num_same == 0:\n        return 0\n    precision = 1.0 * num_same / len(prediction_tokens)\n    recall = 1.0 * num_same / len(ground_truth_tokens)\n    f1 = (2 * precision * recall) / (precision + recall)\n    return f1\n\n\ndef exact_match_score(prediction, ground_truth):  # pragma: no cover\n    return normalize_answer(prediction) == normalize_answer(ground_truth)\n\n\ndef metric_max_over_ground_truths(metric_fn, prediction, ground_truths):  # pragma: no cover\n    scores_for_ground_truths = []\n    for ground_truth in ground_truths:\n        score = metric_fn(prediction, ground_truth)\n        scores_for_ground_truths.append(score)\n    return max(scores_for_ground_truths)\n\n\ndef evaluate(dataset, predictions):\n    f1 = exact_match = total = 0\n    for article in dataset:\n        for paragraph in article[\"paragraphs\"]:\n            for qa in paragraph[\"qas\"]:\n                total += 1\n                if qa[\"id\"] not in predictions:\n                    message = \"Unanswered question \" + qa[\"id\"] + \" will receive score 0.\"\n                    print(message, file=sys.stderr)\n                    continue\n                ground_truths = list(map(lambda x: x[\"text\"], qa[\"answers\"]))\n                prediction = predictions[qa[\"id\"]]\n                exact_match += metric_max_over_ground_truths(\n                    exact_match_score, prediction, ground_truths\n                )\n                f1 += metric_max_over_ground_truths(f1_score, prediction, ground_truths)\n\n    exact_match = 100.0 * exact_match / total\n    f1 = 100.0 * f1 / total\n\n    return {\"em\": exact_match, \"f1\": f1}\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    expected_version = \"1.1\"\n    parser = argparse.ArgumentParser(description=\"Evaluation for SQuAD \" + expected_version)\n    parser.add_argument(\"dataset_file\", help=\"Dataset file\")\n    parser.add_argument(\"prediction_file\", help=\"Prediction File\")\n    args = parser.parse_args()\n    with open(args.dataset_file) as dataset_file:\n        dataset_json = json.load(dataset_file)\n        if dataset_json[\"version\"] != expected_version:\n            print(\n                \"Evaluation expects v-\"\n                + expected_version\n                + \", but got dataset with v-\"\n                + dataset_json[\"version\"],\n                file=sys.stderr,\n            )\n        dataset = dataset_json[\"data\"]\n    with open(args.prediction_file) as prediction_file:\n        predictions = json.load(prediction_file)\n    print(json.dumps(evaluate(dataset, predictions)))\n"
  },
  {
    "path": "claf/metric/squad_v2_official.py",
    "content": "\"\"\"Official evaluation script for SQuAD version 2.0.\n\nIn addition to basic functionality, we also compute additional statistics and\nplot precision-recall curves if an additional na_prob.json file is provided.\nThis file is expected to map question ID's to the model's predicted probability\nthat a question is unanswerable.\n\"\"\"\nimport argparse\nimport collections\nimport json\nimport numpy as np\nimport os\nimport re\nimport string\nimport sys\n\nOPTS = None\n\n\ndef parse_args():  # pragma: no cover\n    parser = argparse.ArgumentParser(\"Official evaluation script for SQuAD version 2.0.\")\n    parser.add_argument(\"data_file\", metavar=\"data.json\", help=\"Input data JSON file.\")\n    parser.add_argument(\"pred_file\", metavar=\"pred.json\", help=\"Model predictions.\")\n    parser.add_argument(\n        \"--out-file\",\n        \"-o\",\n        metavar=\"eval.json\",\n        help=\"Write accuracy metrics to file (default is stdout).\",\n    )\n    parser.add_argument(\n        \"--na-prob-file\",\n        \"-n\",\n        metavar=\"na_prob.json\",\n        help=\"Model estimates of probability of no answer.\",\n    )\n    parser.add_argument(\n        \"--na-prob-thresh\",\n        \"-t\",\n        type=float,\n        default=1.0,\n        help='Predict \"\" if no-answer probability exceeds this (default = 1.0).',\n    )\n    parser.add_argument(\n        \"--out-image-dir\",\n        \"-p\",\n        metavar=\"out_images\",\n        default=None,\n        help=\"Save precision-recall curves to directory.\",\n    )\n    parser.add_argument(\"--verbose\", \"-v\", action=\"store_true\")\n    if len(sys.argv) == 1:\n        parser.print_help()\n        sys.exit(1)\n    return parser.parse_args()\n\n\ndef make_qid_to_has_ans(dataset):  # pragma: no cover\n    qid_to_has_ans = {}\n    for article in dataset:\n        for p in article[\"paragraphs\"]:\n            for qa in p[\"qas\"]:\n                qid_to_has_ans[qa[\"id\"]] = bool(qa[\"answers\"])\n    return qid_to_has_ans\n\n\ndef normalize_answer(s):  # pragma: no cover\n    \"\"\"Lower text and remove punctuation, articles and extra whitespace.\"\"\"\n\n    def remove_articles(text):\n        regex = re.compile(r\"\\b(a|an|the)\\b\", re.UNICODE)\n        return re.sub(regex, \" \", text)\n\n    def white_space_fix(text):\n        return \" \".join(text.split())\n\n    def remove_punc(text):\n        exclude = set(string.punctuation)\n        return \"\".join(ch for ch in text if ch not in exclude)\n\n    def lower(text):\n        return text.lower()\n\n    return white_space_fix(remove_articles(remove_punc(lower(s))))\n\n\ndef get_tokens(s):  # pragma: no cover\n    if not s:\n        return []\n    return normalize_answer(s).split()\n\n\ndef compute_exact(a_gold, a_pred):  # pragma: no cover\n    return int(normalize_answer(a_gold) == normalize_answer(a_pred))\n\n\ndef compute_f1(a_gold, a_pred):  # pragma: no cover\n    gold_toks = get_tokens(a_gold)\n    pred_toks = get_tokens(a_pred)\n    common = collections.Counter(gold_toks) & collections.Counter(pred_toks)\n    num_same = sum(common.values())\n    if len(gold_toks) == 0 or len(pred_toks) == 0:\n        # If either is no-answer, then F1 is 1 if they agree, 0 otherwise\n        return int(gold_toks == pred_toks)\n    if num_same == 0:\n        return 0\n    precision = 1.0 * num_same / len(pred_toks)\n    recall = 1.0 * num_same / len(gold_toks)\n    f1 = (2 * precision * recall) / (precision + recall)\n    return f1\n\n\ndef get_raw_scores(dataset, preds):  # pragma: no cover\n    exact_scores = {}\n    f1_scores = {}\n    for article in dataset:\n        for p in article[\"paragraphs\"]:\n            for qa in p[\"qas\"]:\n                qid = qa[\"id\"]\n                gold_answers = [a[\"text\"] for a in qa[\"answers\"] if normalize_answer(a[\"text\"])]\n                if not gold_answers:\n                    # For unanswerable questions, only correct answer is empty\n                    # string\n                    gold_answers = [\"\"]\n                if qid not in preds:\n                    # print('Missing prediction for %s' % qid)\n                    continue\n                a_pred = preds[qid]\n                # Take max over all gold answers\n                exact_scores[qid] = max(compute_exact(a, a_pred) for a in gold_answers)\n                f1_scores[qid] = max(compute_f1(a, a_pred) for a in gold_answers)\n    return exact_scores, f1_scores\n\n\ndef apply_no_ans_threshold(scores, na_probs, qid_to_has_ans, na_prob_thresh):  # pragma: no cover\n    new_scores = {}\n    for qid, s in scores.items():\n        pred_na = na_probs[qid] > na_prob_thresh\n        if pred_na:\n            new_scores[qid] = float(not qid_to_has_ans[qid])\n        else:\n            new_scores[qid] = s\n    return new_scores\n\n\ndef make_eval_dict(exact_scores, f1_scores, qid_list=None):  # pragma: no cover\n    if not qid_list:\n        total = len(exact_scores)\n        return collections.OrderedDict(\n            [\n                (\"exact\", 100.0 * sum(exact_scores.values()) / total),\n                (\"f1\", 100.0 * sum(f1_scores.values()) / total),\n                (\"total\", total),\n            ]\n        )\n    else:\n        total = len(qid_list)\n        return collections.OrderedDict(\n            [\n                (\"exact\", 100.0 * sum(exact_scores[k] for k in qid_list) / total),\n                (\"f1\", 100.0 * sum(f1_scores[k] for k in qid_list) / total),\n                (\"total\", total),\n            ]\n        )\n\n\ndef merge_eval(main_eval, new_eval, prefix):  # pragma: no cover\n    for k in new_eval:\n        main_eval[\"%s_%s\" % (prefix, k)] = new_eval[k]\n\n\ndef plot_pr_curve(precisions, recalls, out_image, title):  # pragma: no cover\n    plt.step(recalls, precisions, color=\"b\", alpha=0.2, where=\"post\")\n    plt.fill_between(recalls, precisions, step=\"post\", alpha=0.2, color=\"b\")\n    plt.xlabel(\"Recall\")\n    plt.ylabel(\"Precision\")\n    plt.xlim([0.0, 1.05])\n    plt.ylim([0.0, 1.05])\n    plt.title(title)\n    plt.savefig(out_image)\n    plt.clf()\n\n\ndef make_precision_recall_eval(\n    scores, na_probs, num_true_pos, qid_to_has_ans, out_image=None, title=None\n):  # pragma: no cover\n    qid_list = sorted(na_probs, key=lambda k: na_probs[k])\n    true_pos = 0.0\n    cur_p = 1.0\n    cur_r = 0.0\n    precisions = [1.0]\n    recalls = [0.0]\n    avg_prec = 0.0\n    for i, qid in enumerate(qid_list):\n        if qid_to_has_ans[qid]:\n            true_pos += scores[qid]\n        cur_p = true_pos / float(i + 1)\n        cur_r = true_pos / float(num_true_pos)\n        if i == len(qid_list) - 1 or na_probs[qid] != na_probs[qid_list[i + 1]]:\n            # i.e., if we can put a threshold after this point\n            avg_prec += cur_p * (cur_r - recalls[-1])\n            precisions.append(cur_p)\n            recalls.append(cur_r)\n    if out_image:\n        plot_pr_curve(precisions, recalls, out_image, title)\n    return {\"ap\": 100.0 * avg_prec}\n\n\ndef run_precision_recall_analysis(\n    main_eval, exact_raw, f1_raw, na_probs, qid_to_has_ans, out_image_dir\n):  # pragma: no cover\n    if out_image_dir and not os.path.exists(out_image_dir):\n        os.makedirs(out_image_dir)\n    num_true_pos = sum(1 for v in qid_to_has_ans.values() if v)\n    if num_true_pos == 0:\n        return\n    pr_exact = make_precision_recall_eval(\n        exact_raw,\n        na_probs,\n        num_true_pos,\n        qid_to_has_ans,\n        out_image=os.path.join(out_image_dir, \"pr_exact.png\"),\n        title=\"Precision-Recall curve for Exact Match score\",\n    )\n    pr_f1 = make_precision_recall_eval(\n        f1_raw,\n        na_probs,\n        num_true_pos,\n        qid_to_has_ans,\n        out_image=os.path.join(out_image_dir, \"pr_f1.png\"),\n        title=\"Precision-Recall curve for F1 score\",\n    )\n    oracle_scores = {k: float(v) for k, v in qid_to_has_ans.items()}\n    pr_oracle = make_precision_recall_eval(\n        oracle_scores,\n        na_probs,\n        num_true_pos,\n        qid_to_has_ans,\n        out_image=os.path.join(out_image_dir, \"pr_oracle.png\"),\n        title=\"Oracle Precision-Recall curve (binary task of HasAns vs. NoAns)\",\n    )\n    merge_eval(main_eval, pr_exact, \"pr_exact\")\n    merge_eval(main_eval, pr_f1, \"pr_f1\")\n    merge_eval(main_eval, pr_oracle, \"pr_oracle\")\n\n\ndef histogram_na_prob(na_probs, qid_list, image_dir, name):  # pragma: no cover\n    if not qid_list:\n        return\n    x = [na_probs[k] for k in qid_list]\n    weights = np.ones_like(x) / float(len(x))\n    plt.hist(x, weights=weights, bins=20, range=(0.0, 1.0))\n    plt.xlabel(\"Model probability of no-answer\")\n    plt.ylabel(\"Proportion of dataset\")\n    plt.title(\"Histogram of no-answer probability: %s\" % name)\n    plt.savefig(os.path.join(image_dir, \"na_prob_hist_%s.png\" % name))\n    plt.clf()\n\n\ndef find_best_thresh(preds, scores, na_probs, qid_to_has_ans):  # pragma: no cover\n    num_no_ans = sum(1 for k in qid_to_has_ans if not qid_to_has_ans[k])\n    cur_score = num_no_ans\n    best_score = cur_score\n    best_thresh = 0.0\n    qid_list = sorted(na_probs, key=lambda k: na_probs[k])\n    for i, qid in enumerate(qid_list):\n        if qid not in scores:\n            continue\n        if qid_to_has_ans[qid]:\n            diff = scores[qid]\n        else:\n            if preds[qid]:\n                diff = -1\n            else:\n                diff = 0\n        cur_score += diff\n        if cur_score > best_score:\n            best_score = cur_score\n            best_thresh = na_probs[qid]\n    return 100.0 * best_score / len(scores), best_thresh\n\n\ndef find_all_best_thresh(\n    main_eval, preds, exact_raw, f1_raw, na_probs, qid_to_has_ans\n):  # pragma: no cover\n    best_exact, exact_thresh = find_best_thresh(preds, exact_raw, na_probs, qid_to_has_ans)\n    best_f1, f1_thresh = find_best_thresh(preds, f1_raw, na_probs, qid_to_has_ans)\n    main_eval[\"best_exact\"] = best_exact\n    main_eval[\"best_exact_thresh\"] = exact_thresh\n    main_eval[\"best_f1\"] = best_f1\n    main_eval[\"best_f1_thresh\"] = f1_thresh\n\n\ndef evaluate(dataset, na_probs, preds, na_prob_thresh=1.0):\n    qid_to_has_ans = make_qid_to_has_ans(dataset)  # maps qid to True/False\n    has_ans_qids = [k for k, v in qid_to_has_ans.items() if v]\n    no_ans_qids = [k for k, v in qid_to_has_ans.items() if not v]\n\n    exact_raw, f1_raw = get_raw_scores(dataset, preds)\n\n    exact_thresh = apply_no_ans_threshold(exact_raw, na_probs, qid_to_has_ans, na_prob_thresh)\n    f1_thresh = apply_no_ans_threshold(f1_raw, na_probs, qid_to_has_ans, na_prob_thresh)\n\n    out_eval = make_eval_dict(exact_thresh, f1_thresh)\n    if has_ans_qids:\n        has_ans_eval = make_eval_dict(exact_thresh, f1_thresh, qid_list=has_ans_qids)\n        merge_eval(out_eval, has_ans_eval, \"HasAns\")\n    if no_ans_qids:\n        no_ans_eval = make_eval_dict(exact_thresh, f1_thresh, qid_list=no_ans_qids)\n        merge_eval(out_eval, no_ans_eval, \"NoAns\")\n\n    find_all_best_thresh(out_eval, preds, exact_raw, f1_raw, na_probs, qid_to_has_ans)\n\n    return out_eval\n\n\ndef main():  # pragma: no cover\n    with open(OPTS.data_file) as f:\n        dataset_json = json.load(f)\n        dataset = dataset_json[\"data\"]\n    with open(OPTS.pred_file) as f:\n        preds = json.load(f)\n    if OPTS.na_prob_file:\n        with open(OPTS.na_prob_file) as f:\n            na_probs = json.load(f)\n    else:\n        na_probs = {k: 0.0 for k in preds}\n    qid_to_has_ans = make_qid_to_has_ans(dataset)  # maps qid to True/False\n    has_ans_qids = [k for k, v in qid_to_has_ans.items() if v]\n    no_ans_qids = [k for k, v in qid_to_has_ans.items() if not v]\n    exact_raw, f1_raw = get_raw_scores(dataset, preds)\n    exact_thresh = apply_no_ans_threshold(exact_raw, na_probs, qid_to_has_ans, OPTS.na_prob_thresh)\n    f1_thresh = apply_no_ans_threshold(f1_raw, na_probs, qid_to_has_ans, OPTS.na_prob_thresh)\n    out_eval = make_eval_dict(exact_thresh, f1_thresh)\n    if has_ans_qids:\n        has_ans_eval = make_eval_dict(exact_thresh, f1_thresh, qid_list=has_ans_qids)\n        merge_eval(out_eval, has_ans_eval, \"HasAns\")\n    if no_ans_qids:\n        no_ans_eval = make_eval_dict(exact_thresh, f1_thresh, qid_list=no_ans_qids)\n        merge_eval(out_eval, no_ans_eval, \"NoAns\")\n    if OPTS.na_prob_file:\n        find_all_best_thresh(out_eval, preds, exact_raw, f1_raw, na_probs, qid_to_has_ans)\n    if OPTS.na_prob_file and OPTS.out_image_dir:\n        run_precision_recall_analysis(\n            out_eval, exact_raw, f1_raw, na_probs, qid_to_has_ans, OPTS.out_image_dir\n        )\n        histogram_na_prob(na_probs, has_ans_qids, OPTS.out_image_dir, \"hasAns\")\n        histogram_na_prob(na_probs, no_ans_qids, OPTS.out_image_dir, \"noAns\")\n    if OPTS.out_file:\n        with open(OPTS.out_file, \"w\") as f:\n            json.dump(out_eval, f)\n    else:\n        print(json.dumps(out_eval, indent=2))\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    OPTS = parse_args()\n    if OPTS.out_image_dir:\n        import matplotlib\n\n        matplotlib.use(\"Agg\")\n        import matplotlib.pyplot as plt\n    main()\n"
  },
  {
    "path": "claf/metric/wikisql_lib/__init__.py",
    "content": ""
  },
  {
    "path": "claf/metric/wikisql_lib/dbengine.py",
    "content": "import records\nimport re\nfrom babel.numbers import parse_decimal, NumberFormatError\n\nfrom claf.metric.wikisql_lib.query import Query\n\n\nschema_re = re.compile(r'\\((.+)\\)')\nnum_re = re.compile(r'[-+]?\\d*\\.\\d+|\\d+')\n\n\nclass DBEngine:  # pragma: no cover\n\n    def __init__(self, fdb):\n        self.db = records.Database('sqlite:///{}'.format(fdb))\n        self.conn = self.db.get_connection()\n\n    def execute_query(self, table_id, query, *args, **kwargs):\n        return self.execute(table_id, query.sel_index, query.agg_index, query.conditions, *args, **kwargs)\n\n    def execute(self, table_id, select_index, aggregation_index, conditions, lower=True):\n        if not table_id.startswith('table'):\n            table_id = 'table_{}'.format(table_id.replace('-', '_'))\n        table_info = self.conn.query('SELECT sql from sqlite_master WHERE tbl_name = :name', name=table_id).all()[0].sql\n        schema_str = schema_re.findall(table_info)[0]\n        schema = {}\n        for tup in schema_str.split(', '):\n            c, t = tup.split()\n            schema[c] = t\n        select = 'col{}'.format(select_index)\n        agg = Query.agg_ops[aggregation_index]\n        if agg:\n            select = '{}({})'.format(agg, select)\n        where_clause = []\n        where_map = {}\n        for col_index, op, val in conditions:\n            if lower and isinstance(val, str):\n                val = val.lower()\n            if schema['col{}'.format(col_index)] == 'real' and not isinstance(val, (int, float)):\n                try:\n                    val = float(parse_decimal(val))\n                except NumberFormatError as e:\n                    val = float(num_re.findall(val)[0])\n            where_clause.append('col{} {} :col{}'.format(col_index, Query.cond_ops[op], col_index))\n            where_map['col{}'.format(col_index)] = val\n        where_str = ''\n        if where_clause:\n            where_str = 'WHERE ' + ' AND '.join(where_clause)\n        query = 'SELECT {} AS result FROM {} {}'.format(select, table_id, where_str)\n        out = self.conn.query(query, **where_map)\n        return [o.result for o in out]\n"
  },
  {
    "path": "claf/metric/wikisql_lib/query.py",
    "content": "from collections import defaultdict\nfrom copy import deepcopy\nimport re\n\n\nre_whitespace = re.compile(r\"\\s+\", flags=re.UNICODE)\n\n\ndef detokenize(tokens):  # pragma: no cover\n    ret = \"\"\n    for g, a in zip(tokens[\"gloss\"], tokens[\"after\"]):\n        ret += g + a\n    return ret.strip()\n\n\nclass Query:  # pragma: no cover\n\n    agg_ops = [\"\", \"MAX\", \"MIN\", \"COUNT\", \"SUM\", \"AVG\"]\n    cond_ops = [\"=\", \">\", \"<\", \"OP\"]\n    syms = [\n        \"SELECT\",\n        \"WHERE\",\n        \"AND\",\n        \"COL\",\n        \"TABLE\",\n        \"CAPTION\",\n        \"PAGE\",\n        \"SECTION\",\n        \"OP\",\n        \"COND\",\n        \"QUESTION\",\n        \"AGG\",\n        \"AGGOPS\",\n        \"CONDOPS\",\n    ]\n\n    def __init__(self, sel_index, agg_index, conditions=tuple(), ordered=False):\n        self.sel_index = sel_index\n        self.agg_index = agg_index\n        self.conditions = list(conditions)\n        self.ordered = ordered\n\n    def __eq__(self, other):\n        if isinstance(other, self.__class__):\n            indices = self.sel_index == other.sel_index and self.agg_index == other.agg_index\n            if other.ordered:\n                conds = [(col, op, str(cond).lower()) for col, op, cond in self.conditions] == [\n                    (col, op, str(cond).lower()) for col, op, cond in other.conditions\n                ]\n            else:\n                conds = set(\n                    [(col, op, str(cond).lower()) for col, op, cond in self.conditions]\n                ) == set([(col, op, str(cond).lower()) for col, op, cond in other.conditions])\n\n            return indices and conds\n        return NotImplemented\n\n    def __ne__(self, other):\n        if isinstance(other, self.__class__):\n            return not self.__eq__(other)\n        return NotImplemented\n\n    def __hash__(self):\n        return hash(tuple(sorted(self.__dict__.items())))\n\n    def __repr__(self):\n        rep = \"SELECT {agg} {sel} FROM table\".format(\n            agg=self.agg_ops[self.agg_index], sel=\"col{}\".format(self.sel_index)\n        )\n        if self.conditions:\n            rep += \" WHERE \" + \" AND \".join(\n                [\n                    \"{} {} {}\".format(\"col{}\".format(i), self.cond_ops[o], v)\n                    for i, o, v in self.conditions\n                ]\n            )\n        return rep\n\n    def to_dict(self):\n        return {\"sel\": self.sel_index, \"agg\": self.agg_index, \"conds\": self.conditions}\n\n    def lower(self):\n        conds = []\n        for col, op, cond in self.conditions:\n            conds.append([col, op, cond.lower()])\n        return self.__class__(self.sel_index, self.agg_index, conds)\n\n    @classmethod\n    def from_dict(cls, d, ordered=False):\n        return cls(sel_index=d[\"sel\"], agg_index=d[\"agg\"], conditions=d[\"conds\"], ordered=ordered)\n\n    @classmethod\n    def from_tokenized_dict(cls, d):\n        conds = []\n        for col, op, val in d[\"conds\"]:\n            conds.append([col, op, detokenize(val)])\n        return cls(d[\"sel\"], d[\"agg\"], conds)\n\n    @classmethod\n    def from_generated_dict(cls, d):\n        conds = []\n        for col, op, val in d[\"conds\"]:\n            end = len(val[\"words\"])\n            conds.append([col, op, detokenize(val)])\n        return cls(d[\"sel\"], d[\"agg\"], conds)\n\n    @classmethod\n    def from_sequence(cls, sequence, table, lowercase=True):\n        sequence = deepcopy(sequence)\n        if \"symend\" in sequence[\"words\"]:\n            end = sequence[\"words\"].index(\"symend\")\n            for k, v in sequence.items():\n                sequence[k] = v[:end]\n        terms = [\n            {\"gloss\": g, \"word\": w, \"after\": a}\n            for g, w, a in zip(sequence[\"gloss\"], sequence[\"words\"], sequence[\"after\"])\n        ]\n        headers = [detokenize(h) for h in table[\"header\"]]\n\n        # lowercase everything and truncate sequence\n        if lowercase:\n            headers = [h.lower() for h in headers]\n            for i, t in enumerate(terms):\n                for k, v in t.items():\n                    t[k] = v.lower()\n        headers_no_whitespcae = [re.sub(re_whitespace, \"\", h) for h in headers]\n\n        # get select\n        if \"symselect\" != terms.pop(0)[\"word\"]:\n            raise Exception(\"Missing symselect operator\")\n\n        # get aggregation\n        if \"symagg\" != terms.pop(0)[\"word\"]:\n            raise Exception(\"Missing symagg operator\")\n        agg_op = terms.pop(0)[\"word\"]\n\n        if agg_op == \"symcol\":\n            agg_op = \"\"\n        else:\n            if \"symcol\" != terms.pop(0)[\"word\"]:\n                raise Exception(\"Missing aggregation column\")\n        try:\n            agg_op = cls.agg_ops.index(agg_op.upper())\n        except Exception as e:\n            raise Exception(\"Invalid agg op {}\".format(agg_op))\n\n        def find_column(name):\n            return headers_no_whitespcae.index(re.sub(re_whitespace, \"\", name))\n\n        def flatten(tokens):\n            ret = {\"words\": [], \"after\": [], \"gloss\": []}\n            for t in tokens:\n                ret[\"words\"].append(t[\"word\"])\n                ret[\"after\"].append(t[\"after\"])\n                ret[\"gloss\"].append(t[\"gloss\"])\n            return ret\n\n        where_index = [i for i, t in enumerate(terms) if t[\"word\"] == \"symwhere\"]\n        where_index = where_index[0] if where_index else len(terms)\n        flat = flatten(terms[:where_index])\n        try:\n            agg_col = find_column(detokenize(flat))\n        except Exception as e:\n            raise Exception(\"Cannot find aggregation column {}\".format(flat[\"words\"]))\n        where_terms = terms[where_index + 1 :]\n\n        # get conditions\n        conditions = []\n        while where_terms:\n            t = where_terms.pop(0)\n            flat = flatten(where_terms)\n            if t[\"word\"] != \"symcol\":\n                raise Exception(\"Missing conditional column {}\".format(flat[\"words\"]))\n            try:\n                op_index = flat[\"words\"].index(\"symop\")\n                col_tokens = flatten(where_terms[:op_index])\n            except Exception as e:\n                raise Exception(\"Missing conditional operator {}\".format(flat[\"words\"]))\n            cond_op = where_terms[op_index + 1][\"word\"]\n            try:\n                cond_op = cls.cond_ops.index(cond_op.upper())\n            except Exception as e:\n                raise Exception(\"Invalid cond op {}\".format(cond_op))\n            try:\n                cond_col = find_column(detokenize(col_tokens))\n            except Exception as e:\n                raise Exception(\"Cannot find conditional column {}\".format(col_tokens[\"words\"]))\n            try:\n                val_index = flat[\"words\"].index(\"symcond\")\n            except Exception as e:\n                raise Exception(\"Cannot find conditional value {}\".format(flat[\"words\"]))\n\n            where_terms = where_terms[val_index + 1 :]\n            flat = flatten(where_terms)\n            val_end_index = (\n                flat[\"words\"].index(\"symand\") if \"symand\" in flat[\"words\"] else len(where_terms)\n            )\n            cond_val = detokenize(flatten(where_terms[:val_end_index]))\n            conditions.append([cond_col, cond_op, cond_val])\n            where_terms = where_terms[val_end_index + 1 :]\n        q = cls(agg_col, agg_op, conditions)\n        return q\n\n    @classmethod\n    def from_partial_sequence(cls, agg_col, agg_op, sequence, table, lowercase=True):\n        sequence = deepcopy(sequence)\n        if \"symend\" in sequence[\"words\"]:\n            end = sequence[\"words\"].index(\"symend\")\n            for k, v in sequence.items():\n                sequence[k] = v[:end]\n        terms = [\n            {\"gloss\": g, \"word\": w, \"after\": a}\n            for g, w, a in zip(sequence[\"gloss\"], sequence[\"words\"], sequence[\"after\"])\n        ]\n        headers = [detokenize(h) for h in table[\"header\"]]\n\n        # lowercase everything and truncate sequence\n        if lowercase:\n            headers = [h.lower() for h in headers]\n            for i, t in enumerate(terms):\n                for k, v in t.items():\n                    t[k] = v.lower()\n        headers_no_whitespcae = [re.sub(re_whitespace, \"\", h) for h in headers]\n\n        def find_column(name):\n            return headers_no_whitespcae.index(re.sub(re_whitespace, \"\", name))\n\n        def flatten(tokens):\n            ret = {\"words\": [], \"after\": [], \"gloss\": []}\n            for t in tokens:\n                ret[\"words\"].append(t[\"word\"])\n                ret[\"after\"].append(t[\"after\"])\n                ret[\"gloss\"].append(t[\"gloss\"])\n            return ret\n\n        where_index = [i for i, t in enumerate(terms) if t[\"word\"] == \"symwhere\"]\n        where_index = where_index[0] if where_index else len(terms)\n        where_terms = terms[where_index + 1 :]\n\n        # get conditions\n        conditions = []\n        while where_terms:\n            t = where_terms.pop(0)\n            flat = flatten(where_terms)\n            if t[\"word\"] != \"symcol\":\n                raise Exception(\"Missing conditional column {}\".format(flat[\"words\"]))\n            try:\n                op_index = flat[\"words\"].index(\"symop\")\n                col_tokens = flatten(where_terms[:op_index])\n            except Exception as e:\n                raise Exception(\"Missing conditional operator {}\".format(flat[\"words\"]))\n            cond_op = where_terms[op_index + 1][\"word\"]\n            try:\n                cond_op = cls.cond_ops.index(cond_op.upper())\n            except Exception as e:\n                raise Exception(\"Invalid cond op {}\".format(cond_op))\n            try:\n                cond_col = find_column(detokenize(col_tokens))\n            except Exception as e:\n                raise Exception(\"Cannot find conditional column {}\".format(col_tokens[\"words\"]))\n            try:\n                val_index = flat[\"words\"].index(\"symcond\")\n            except Exception as e:\n                raise Exception(\"Cannot find conditional value {}\".format(flat[\"words\"]))\n\n            where_terms = where_terms[val_index + 1 :]\n            flat = flatten(where_terms)\n            val_end_index = (\n                flat[\"words\"].index(\"symand\") if \"symand\" in flat[\"words\"] else len(where_terms)\n            )\n            cond_val = detokenize(flatten(where_terms[:val_end_index]))\n            conditions.append([cond_col, cond_op, cond_val])\n            where_terms = where_terms[val_end_index + 1 :]\n        q = cls(agg_col, agg_op, conditions)\n        return q\n"
  },
  {
    "path": "claf/metric/wikisql_official.py",
    "content": "\"\"\" Official evaluation script for WikiSQL dataset. \"\"\"\n\nimport json\nfrom argparse import ArgumentParser\nfrom tqdm import tqdm\nfrom claf.metric.wikisql_lib.dbengine import DBEngine\nfrom claf.metric.wikisql_lib.query import Query\n\n\ndef count_lines(fname):  # pragma: no cover\n    with open(fname) as f:\n        return sum(1 for line in f)\n\n\ndef evaluate(labels, predictions, db_path, ordered=True):  # pragma: no cover\n    \"\"\" labels and predictions: dictionary {data_uid: sql_data, ...} \"\"\"\n    engine = DBEngine(db_path)\n\n    exact_match, grades = [], []\n    for idx, data_uid in enumerate(predictions):\n        eg = labels[data_uid]\n        ep = predictions[data_uid]\n\n        qg = eg[\"sql_query\"]\n        gold = eg[\"execution_result\"]\n\n        pred = ep.get(\"error\", None)\n        qp = None\n        if not ep.get(\"error\", None):\n            try:\n                qp = Query.from_dict(ep[\"query\"], ordered=ordered)\n                pred = engine.execute_query(ep[\"table_id\"], qp, lower=True)\n            except Exception as e:\n                pred = repr(e)\n\n        correct = pred == gold\n        match = qp == qg\n        grades.append(correct)\n        exact_match.append(match)\n\n    return {\n        \"ex_accuracy\": sum(grades) / len(grades) * 100.0,\n        \"lf_accuracy\": sum(exact_match) / len(exact_match) * 100.0,\n    }\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    parser = ArgumentParser()\n    parser.add_argument(\"source_file\", help=\"source file for the prediction\")\n    parser.add_argument(\"db_file\", help=\"source database for the prediction\")\n    parser.add_argument(\"pred_file\", help=\"predictions by the model\")\n    parser.add_argument(\n        \"--ordered\",\n        action=\"store_true\",\n        help=\"whether the exact match should consider the order of conditions\",\n    )\n    args = parser.parse_args()\n\n    engine = DBEngine(args.db_file)\n    exact_match = []\n    with open(args.source_file) as fs, open(args.pred_file) as fp:\n        grades = []\n        for ls, lp in tqdm(zip(fs, fp), total=count_lines(args.source_file)):\n            eg = json.loads(ls)\n            ep = json.loads(lp)\n            qg = Query.from_dict(eg[\"sql\"], ordered=args.ordered)\n            gold = engine.execute_query(eg[\"table_id\"], qg, lower=True)\n            pred = ep.get(\"error\", None)\n            qp = None\n            if not ep.get(\"error\", None):\n                try:\n                    qp = Query.from_dict(ep[\"query\"], ordered=args.ordered)\n                    pred = engine.execute_query(eg[\"table_id\"], qp, lower=True)\n                except Exception as e:\n                    pred = repr(e)\n            correct = pred == gold\n            match = qp == qg\n            grades.append(correct)\n            exact_match.append(match)\n        print(\n            json.dumps(\n                {\n                    \"ex_accuracy\": sum(grades) / len(grades),\n                    \"lf_accuracy\": sum(exact_match) / len(exact_match),\n                },\n                indent=2,\n            )\n        )\n"
  },
  {
    "path": "claf/model/__init__.py",
    "content": "\nfrom claf.model.multi_task import *\nfrom claf.model.reading_comprehension import *\nfrom claf.model.regression import *\nfrom claf.model.semantic_parsing import *\nfrom claf.model.sequence_classification import *\nfrom claf.model.token_classification import *\n"
  },
  {
    "path": "claf/model/base.py",
    "content": "\nimport json\nfrom pathlib import Path\n\nimport torch.nn as nn\n\n\nclass ModelBase(nn.Module):\n    \"\"\"\n    Model Base Class\n\n    Args:\n        token_embedder: (claf.tokens.token_embedder.base) TokenEmbedder\n    \"\"\"\n\n    def __init__(self):\n        super(ModelBase, self).__init__()\n\n    def forward(self, inputs):\n        raise NotImplementedError\n\n    def make_metrics(self, predictions):\n\n        raise NotImplementedError\n\n    def make_predictions(self, features):\n        \"\"\"\n        for Metrics\n        \"\"\"\n\n        raise NotImplementedError\n\n    def predict(self, features):\n        \"\"\"\n        Inference\n        \"\"\"\n\n        raise NotImplementedError\n\n    def print_examples(self, params):\n        \"\"\"\n        Print evaluation examples\n        \"\"\"\n\n        raise NotImplementedError\n\n    def write_predictions(self, predictions, file_path=None, is_dict=True):\n        data_type = \"train\" if self.training else \"valid\"\n\n        pred_dir = Path(self._log_dir) / \"predictions\"\n        pred_dir.mkdir(exist_ok=True)\n\n        if file_path is None:\n            file_path = f\"predictions-{data_type}-{self._train_counter.get_display()}.json\"\n\n        pred_path = pred_dir / file_path\n        with open(pred_path, \"w\") as out_file:\n            if is_dict:\n                out_file.write(json.dumps(predictions, indent=4))\n            else:\n                out_file.write(predictions)\n\n    def is_ready(self):\n        properties = [\n            self._config,\n            self._log_dir,\n            # self._dataset,  It's set at _run_epoch()\n            # self._metrics,  It's set at save()\n            self._train_counter,\n            self._vocabs\n        ]\n\n        return all([p is not None for p in properties])\n\n    @property\n    def config(self):\n        return self._config\n\n    @config.setter\n    def config(self, config):\n        self._config = config\n\n    @property\n    def log_dir(self):\n        return self._log_dir\n\n    @log_dir.setter\n    def log_dir(self, log_dir):\n        self._log_dir = log_dir\n\n    @property\n    def dataset(self):\n        return self._dataset\n\n    @dataset.setter\n    def dataset(self, dataset):\n        self._dataset = dataset\n\n    @property\n    def metrics(self):\n        return self._metrics\n\n    @metrics.setter\n    def metrics(self, metrics):\n        self._metrics = metrics\n\n    @property\n    def train_counter(self):\n        return self._train_counter\n\n    @train_counter.setter\n    def train_counter(self, train_counter):\n        self._train_counter = train_counter\n\n    @property\n    def vocabs(self):\n        return self._vocabs\n\n    @vocabs.setter\n    def vocabs(self, vocabs):\n        self._vocabs = vocabs\n\n\nclass ModelWithTokenEmbedder(ModelBase):\n    def __init__(self, token_embedder):\n        super(ModelWithTokenEmbedder, self).__init__()\n\n        self.token_embedder = token_embedder\n        if token_embedder is not None:\n            self._vocabs = token_embedder.vocabs\n\n\nclass ModelWithoutTokenEmbedder(ModelBase):\n    def __init__(self, token_makers):\n        super(ModelWithoutTokenEmbedder, self).__init__()\n\n        self.token_makers = token_makers\n        self._vocabs = {\n            token_name: token_maker.vocab for token_name, token_maker in token_makers.items()\n        }\n"
  },
  {
    "path": "claf/model/cls_utils.py",
    "content": "import csv\nfrom collections import defaultdict\n\nfrom seqeval.metrics.sequence_labeling import get_entities\n\n\n# pycm\ndef write_confusion_matrix_to_csv(file_path, pycm_obj):\n    with open(file_path + \".csv\", \"w\") as f:\n        indicator = \"target/predict\"\n\n        fieldnames = [indicator] + pycm_obj.classes + [\"FN\"]\n        writer = csv.DictWriter(f, fieldnames=fieldnames)\n        writer.writeheader()\n\n        data = dict(pycm_obj.matrix)\n        FN = dict(pycm_obj.FN)\n\n        for row_idx in fieldnames[1:-1]:  # remove indicator and FN\n            row = {indicator: row_idx}\n            row.update(\n                {\n                    col_idx: data[row_idx][col_idx]\n                    for col_idx in data[row_idx]\n                    if col_idx in fieldnames\n                }\n            )\n            row.update({\"FN\": FN[row_idx]})\n            writer.writerow(row)\n\n        row = {indicator: \"FP\"}\n        row.update(dict(pycm_obj.FP))\n        writer.writerow(row)\n\n\n# seqeval\ndef get_tag_dict(sequence, tag_texts):\n    words = sequence.split()\n    entities = get_entities(tag_texts)\n\n    slots = defaultdict(list)\n    for slot, start_idx, end_idx in entities:\n        slots[slot].append(\" \".join(words[start_idx : end_idx + 1]))\n    return dict(slots)\n"
  },
  {
    "path": "claf/model/multi_task/__init__.py",
    "content": "\nfrom claf.model.multi_task.bert import BertForMultiTask\n\n\n# fmt: off\n\n__all__ = [\n    \"BertForMultiTask\"\n]\n\n# fmt: on\n"
  },
  {
    "path": "claf/model/multi_task/bert.py",
    "content": "\nfrom overrides import overrides\nimport torch.nn as nn\nfrom transformers import BertModel\n\nfrom claf.data.data_handler import CachePath\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithoutTokenEmbedder\nfrom claf.model.multi_task.category import TaskCategory\nfrom claf.model.multi_task.mixin import MultiTask\nfrom claf.model.reading_comprehension.mixin import ReadingComprehension\n\n\n@register(\"model:bert_for_multi\")\nclass BertForMultiTask(MultiTask, ModelWithoutTokenEmbedder):\n    \"\"\"\n    Implementation of Sentence Classification model presented in\n    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n    (https://arxiv.org/abs/1810.04805)\n\n    * Args:\n        token_embedder: used to embed the sequence\n        num_classes: number of classified classes\n\n    * Kwargs:\n        pretrained_model_name: the name of a pre-trained model\n        dropout: classification layer dropout\n    \"\"\"\n\n    def __init__(self, token_makers, tasks, pretrained_model_name=None, dropouts=None):\n        super(BertForMultiTask, self).__init__(token_makers)\n\n        self.use_transformers = True  # for optimizer's model parameters\n        self.tasks = tasks\n\n        assert len(tasks) == len(dropouts)\n\n        self.curr_task_category = None\n        self.curr_dataset = None\n\n        self.shared_layers = BertModel.from_pretrained(\n            pretrained_model_name, cache_dir=str(CachePath.ROOT)\n        )\n        self._init_task_layers(tasks, dropouts)\n        self._init_criterions(tasks)\n\n    def _init_criterions(self, tasks):\n        self.criterions = {}\n        for task_index, task in enumerate(tasks):\n            task_category = task[\"category\"]\n\n            criterion = None\n            if task_category == TaskCategory.SEQUENCE_CLASSIFICATION or task_category == TaskCategory.READING_COMPREHENSION:\n                criterion = nn.CrossEntropyLoss()\n            elif task_category == TaskCategory.TOKEN_CLASSIFICATION:\n                ignore_tag_idx = task.get(\"ignore_tag_idx\", 0)\n                criterion = nn.CrossEntropyLoss(ignore_index=ignore_tag_idx)\n            elif task_category == TaskCategory.REGRESSION:\n                criterion = nn.MSELoss()\n            else:\n                raise ValueError(\"Check task_category.\")\n\n            self.criterions[task_index] = criterion\n\n    def _init_task_layers(self, tasks, dropouts):\n        self.task_specific_layers = nn.ModuleList()\n        for task, dropout in zip(tasks, dropouts):\n            task_category = task[\"category\"]\n\n            if task_category == TaskCategory.SEQUENCE_CLASSIFICATION \\\n                    or task_category == TaskCategory.REGRESSION:\n                task_layer = nn.Sequential(\n                    nn.Dropout(dropout),\n                    nn.Linear(self.shared_layers.config.hidden_size, task[\"num_label\"])\n                )\n            elif task_category == TaskCategory.READING_COMPREHENSION:\n                task_layer = nn.Linear(\n                    self.shared_layers.config.hidden_size,\n                    self.shared_layers.config.num_labels,\n                )\n            elif task_category == TaskCategory.TOKEN_CLASSIFICATION:\n                raise NotImplementedError()\n            else:\n                raise ValueError(\"Check task_category.\")\n\n            self.task_specific_layers.append(task_layer)\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n            {\n                \"bert_input\": {\n                    \"feature\": [\n                        [3, 4, 1, 0, 0, 0, ...],\n                        ...,\n                    ]\n                },\n                \"token_type\": {\n                    \"feature\": [\n                        [0, 0, 0, 0, 0, 0, ...],\n                        ...,\n                    ],\n                }\n            }\n\n        * Kwargs:\n            label: label dictionary like below.\n            {\n                \"class_idx\": [2, 1, 0, 4, 5, ...]\n                \"data_idx\": [2, 4, 5, 7, 2, 1, ...]\n            }\n            Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - sequence_embed: embedding vector of the sequence\n            - logits: representing unnormalized log probabilities\n\n            - class_idx: target class idx\n            - data_idx: data idx\n            - loss: a scalar loss to be optimized\n        \"\"\"\n\n        task_index = features[\"task_index\"]\n\n        self.curr_task_category = self.tasks[task_index][\"category\"]\n        self.curr_dataset = self._dataset.task_datasets[task_index]\n\n        bert_inputs = features[\"bert_input\"][\"feature\"]\n        token_type_ids = features[\"token_type\"][\"feature\"]\n        attention_mask = (bert_inputs > 0).long()\n\n        shared_outputs = self.shared_layers(\n            bert_inputs, token_type_ids=token_type_ids, attention_mask=attention_mask\n        )\n        output_dict = self._task_forward(task_index, shared_outputs)\n\n        if labels:\n            loss = self._task_calculate_loss(task_index, output_dict, labels)\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n\n    def _task_forward(self, task_index, shared_outputs):\n        sequence_output = shared_outputs[0]\n        pooled_output = shared_outputs[1]\n\n        task_specific_layer = self.task_specific_layers[task_index]\n\n        task_category = self.curr_task_category\n        if task_category == TaskCategory.SEQUENCE_CLASSIFICATION \\\n                or task_category == TaskCategory.REGRESSION:\n            logits = task_specific_layer(pooled_output)\n\n            output_dict = {\n                \"sequence_embed\": pooled_output,\n                \"logits\": logits,\n            }\n        elif task_category == TaskCategory.READING_COMPREHENSION:\n            logits = task_specific_layer(sequence_output)\n            start_logits, end_logits = logits.split(1, dim=-1)\n            span_start_logits = start_logits.squeeze(-1)\n            span_end_logits = end_logits.squeeze(-1)\n\n            output_dict = {\n                \"start_logits\": span_start_logits,\n                \"end_logits\": span_end_logits,\n                \"best_span\": ReadingComprehension().get_best_span(\n                    span_start_logits, span_end_logits, answer_maxlen=30,\n                ),\n            }\n        elif task_category == TaskCategory.TOKEN_CLASSIFICATION:\n            raise NotImplementedError()\n        else:\n            raise ValueError(f\"Check {self.curr_task_category}.\")\n\n        output_dict[\"task_index\"] = task_index\n        return output_dict\n\n    def _task_calculate_loss(self, task_index, output_dict, labels):\n        # Loss\n        num_label = self.tasks[task_index][\"num_label\"]\n        criterion = self.criterions[task_index.item()]\n\n        task_category = self.curr_task_category\n        if task_category == TaskCategory.SEQUENCE_CLASSIFICATION \\\n                or task_category == TaskCategory.REGRESSION:\n            label_key = None\n            if task_category == TaskCategory.SEQUENCE_CLASSIFICATION:\n                label_key = \"class_idx\"\n            elif task_category == TaskCategory.REGRESSION:\n                label_key = \"score\"\n\n            label_value = labels[label_key]\n            data_idx = labels[\"data_idx\"]\n\n            output_dict[label_key] = label_value\n            output_dict[\"data_idx\"] = data_idx\n\n            logits = output_dict[\"logits\"]\n            logits = logits.view(-1, num_label)\n            if num_label == 1:\n                label_value = label_value.view(-1, 1)\n\n            loss = criterion(logits, label_value)\n\n        elif task_category == TaskCategory.READING_COMPREHENSION:\n            data_idx = labels[\"data_idx\"]\n            answer_start_idx = labels[\"answer_start_idx\"]\n            answer_end_idx = labels[\"answer_end_idx\"]\n\n            output_dict[\"data_idx\"] = data_idx\n\n            # If we are on multi-GPU, split add a dimension\n            if len(answer_start_idx.size()) > 1:\n                answer_start_idx = answer_start_idx.squeeze(-1)\n            if len(answer_end_idx.size()) > 1:\n                answer_end_idx = answer_end_idx.squeeze(-1)\n            # sometimes the start/end positions are outside our model inputs, we ignore these terms\n            ignored_index = output_dict[\"start_logits\"].size(1)\n\n            answer_start_idx.clamp_(0, ignored_index)\n            answer_end_idx.clamp_(0, ignored_index)\n\n            # Loss\n            criterion = nn.CrossEntropyLoss(ignore_index=ignored_index)\n            loss = criterion(output_dict[\"start_logits\"], answer_start_idx)\n            loss += criterion(output_dict[\"end_logits\"], answer_end_idx)\n            loss /= 2  # (start + end)\n\n        elif task_category == TaskCategory.TOKEN_CLASSIFICATION:\n            raise NotImplementedError()\n        else:\n            raise ValueError(f\"Check {self.curr_task_category}.\")\n\n        return loss\n\n    @overrides\n    def print_examples(self, index, inputs, predictions):\n        \"\"\"\n        Print evaluation examples\n\n        * Args:\n            index: data index\n            inputs: mini-batch inputs\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n\n        * Returns:\n            print(Sequence, Sequence Tokens, Target Class, Predicted Class)\n        \"\"\"\n\n        task_index = inputs[\"features\"][\"task_index\"]\n        task_dataset = self._dataset.task_datasets[task_index]\n        task_category = self.tasks[task_index][\"category\"]\n\n        data_idx = inputs[\"labels\"][\"data_idx\"][index].item()\n        data_id = task_dataset.get_id(data_idx)\n\n        helper = task_dataset.helper\n\n        if task_category == TaskCategory.SEQUENCE_CLASSIFICATION \\\n                or task_category == TaskCategory.REGRESSION:\n\n            sequence_a = helper[\"examples\"][data_id][\"sequence_a\"]\n            sequence_a_tokens = helper[\"examples\"][data_id][\"sequence_a_tokens\"]\n            sequence_b = helper[\"examples\"][data_id][\"sequence_b\"]\n            sequence_b_tokens = helper[\"examples\"][data_id][\"sequence_b_tokens\"]\n\n            print()\n            print(\"Task(Dataset) name:\", self.tasks[task_index][\"name\"])\n            print()\n            print(\"- Sequence a:\", sequence_a)\n            print(\"- Sequence a Tokens:\", sequence_a_tokens)\n            if sequence_b:\n                print(\"- Sequence b:\", sequence_b)\n                print(\"- Sequence b Tokens:\", sequence_b_tokens)\n\n            if task_category == TaskCategory.SEQUENCE_CLASSIFICATION:\n                target_class_text = helper[\"examples\"][data_id][\"class_text\"]\n\n                pred_class_idx = predictions[data_id][\"class_idx\"]\n                pred_class_text = task_dataset.get_class_text_with_idx(pred_class_idx)\n\n                print(\"- Target:\")\n                print(\"    Class:\", target_class_text)\n                print(\"- Predict:\")\n                print(\"    Class:\", pred_class_text)\n            elif task_category == TaskCategory.REGRESSION:\n                target_score = helper[\"examples\"][data_id][\"score\"]\n                pred_score = predictions[data_id][\"score\"]\n\n                print(\"- Target:\")\n                print(\"    Score:\", target_score)\n                print(\"- Predict:\")\n                print(\"    Score:\", pred_score)\n        elif task_category == TaskCategory.READING_COMPREHENSION:\n            context = helper[\"examples\"][data_id][\"context\"]\n            question = helper[\"examples\"][data_id][\"question\"]\n            answers = helper[\"examples\"][data_id][\"answers\"]\n\n            predict_text = predictions[data_idx][\"predict_text\"]\n\n            print()\n            print(\"- Context:\", context)\n            print(\"- Question:\", question)\n            print(\"- Answers:\", answers)\n            print(\"- Predict:\", predict_text)\n\n        print()\n\n"
  },
  {
    "path": "claf/model/multi_task/category.py",
    "content": "\nclass TaskCategory:\n    \"\"\" TaskCategory Flag class \"\"\"\n\n    SEQUENCE_CLASSIFICATION = \"sequence_classification\"\n    REGRESSION = \"regression\"\n    READING_COMPREHENSION = \"reading_comprehension\"\n    TOKEN_CLASSIFICATION = \"token_classification\"\n"
  },
  {
    "path": "claf/model/multi_task/mixin.py",
    "content": "\nimport logging\n\nfrom claf.model.multi_task.category import TaskCategory\nfrom claf.model.sequence_classification.mixin import SequenceClassification\nfrom claf.model.reading_comprehension.mixin import SQuADv1ForBert\nfrom claf.model.regression.mixin import Regression\nfrom claf.model.token_classification.mixin import TokenClassification\n\nlogger = logging.getLogger(__name__)\n\n\nclass MultiTask:\n    \"\"\" MultiTask Mixin Class \"\"\"\n\n    def make_predictions(self, output_dict):\n        task_index = output_dict[\"task_index\"].item()\n        mixin_obj = self._make_task_mixin_obj(task_index)\n\n        predictions = mixin_obj.make_predictions(output_dict)\n        for k, v in predictions.items():\n            predictions[k][\"task_index\"] = task_index\n        return predictions\n\n    def predict(self, output_dict, arguments, helper):\n        task_index = output_dict[\"task_index\"].item()\n        mixin_obj = self._make_task_mixin_obj(task_index)\n        return mixin_obj.predict(output_dict, arguments, helper)\n\n    def make_metrics(self, predictions):\n        task_predictions = self._split_predictions_by_task_index(predictions)\n\n        # Must match task_predictions data_sizes and dataset's\n        assert [len(task_preds) for task_preds in task_predictions] == [len(dataset) for dataset in self._dataset.task_datasets]\n\n        all_metrics = {\"average\": 0}\n        for task_index, predictions in enumerate(task_predictions):\n            mixin_obj = self._make_task_mixin_obj(task_index)\n            mixin_obj.write_predictions(predictions)\n\n            task_metrics = mixin_obj.make_metrics(predictions)\n            for k, v in task_metrics.items():\n                task_name = self.tasks[task_index][\"name\"].replace(\"_bert\", \"\")  # hard_code\n                all_metrics[f\"{task_name}/{k}\"] = v\n\n                task_metric_key = self.tasks[task_index][\"metric_key\"]\n                if k == task_metric_key:\n                    if v > 1:  # SQuAD case\n                        v /= 100\n                    all_metrics[\"average\"] += v\n\n        all_metrics[\"average\"] /= len(task_predictions)\n        return all_metrics\n\n    def _split_predictions_by_task_index(self, predictions):\n        \"\"\" split predictions by task_index -> each task make_metrics then add task_index as prefix \"\"\"\n        task_predictions = [{} for _ in range(len(self.tasks))]  # init predictions\n        for k, v in predictions.items():\n            task_index = v[\"task_index\"]\n            task_predictions[task_index][k] = v\n        return task_predictions\n\n    def _make_task_mixin_obj(self, task_index):\n        mixin_obj = None\n        task_category = self.tasks[task_index][\"category\"]\n        if task_category == TaskCategory.SEQUENCE_CLASSIFICATION:\n            mixin_obj = SequenceClassification()\n        elif task_category == TaskCategory.READING_COMPREHENSION:\n            mixin_obj = SQuADv1ForBert()\n        elif task_category == TaskCategory.REGRESSION:\n            mixin_obj = Regression()\n        elif task_category == TaskCategory.TOKEN_CLASSIFICATION:\n            mixin_obj = TokenClassification()\n        else:\n            raise ValueError(\"task category error.\")\n\n        self._set_model_properties(mixin_obj, task_index=task_index)\n        return mixin_obj\n\n    def _set_model_properties(self, mixin_obj, task_index=None):\n        mixin_obj._config = self.config\n        mixin_obj._log_dir = self.log_dir\n        if task_index is None:\n            mixin_obj._dataset = self.curr_dataset\n        else:\n            mixin_obj._dataset = self._dataset.task_datasets[task_index]\n        mixin_obj._train_counter = self.train_counter\n        mixin_obj.training = self.training\n        mixin_obj._vocabs = self.vocabs\n\n        # Helper's model_parameters\n        task = self.tasks[task_index]\n        for k, v in task[\"model_params\"].items():\n            setattr(mixin_obj, k, v)\n"
  },
  {
    "path": "claf/model/reading_comprehension/__init__.py",
    "content": "\nfrom claf.model.reading_comprehension.bert import BertForQA\nfrom claf.model.reading_comprehension.bidaf import BiDAF\nfrom claf.model.reading_comprehension.bidaf_no_answer import BiDAF_No_Answer\nfrom claf.model.reading_comprehension.docqa import DocQA\nfrom claf.model.reading_comprehension.docqa_no_answer import DocQA_No_Answer\nfrom claf.model.reading_comprehension.drqa import DrQA\nfrom claf.model.reading_comprehension.qanet import QANet\nfrom claf.model.reading_comprehension.roberta import RoBertaForQA\n\n\n# fmt: off\n\n__all__ = [\n    \"BertForQA\", \"BiDAF\", \"QANet\", \"DocQA\", \"DrQA\", \"RoBertaForQA\",  # SQuAD v1\n    \"BiDAF_No_Answer\", \"DocQA_No_Answer\",  # SQuAD v2\n\n]\n\n# fmt: on\n"
  },
  {
    "path": "claf/model/reading_comprehension/bert.py",
    "content": "\n\nfrom overrides import overrides\nimport torch.nn as nn\nfrom transformers import BertForQuestionAnswering\n\nfrom claf.data.data_handler import CachePath\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithoutTokenEmbedder\nfrom claf.model.reading_comprehension.mixin import SQuADv1ForBert\n\n\n@register(\"model:bert_for_qa\")\nclass BertForQA(SQuADv1ForBert, ModelWithoutTokenEmbedder):\n    \"\"\"\n    Document Reader Model. `Span Detector`\n\n    Implementation of model presented in\n    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n    (https://arxiv.org/abs/1810.04805)\n\n    * Args:\n        token_embedder: 'QATokenEmbedder', Used to embed the 'context' and 'question'.\n\n    * Kwargs:\n        lang_code: Dataset language code [en|ko]\n        pretrained_model_name: the name of a pre-trained model\n        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\n    \"\"\"\n\n    def __init__(self, token_makers, lang_code=\"en\", pretrained_model_name=None, answer_maxlen=30):\n        super(BertForQA, self).__init__(token_makers)\n\n        self.lang_code = lang_code\n        self.use_transformers = True  # for optimizer's model parameters\n        self.answer_maxlen = answer_maxlen\n\n        self.model = BertForQuestionAnswering.from_pretrained(\n            pretrained_model_name, cache_dir=str(CachePath.ROOT)\n        )\n        self.criterion = nn.CrossEntropyLoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n                {\"feature_name1\": {\n                     \"token_name1\": tensor,\n                     \"toekn_name2\": tensor},\n                 \"feature_name2\": ...}\n\n        * Kwargs:\n            label: label dictionary like below.\n                {\"label_name1\": tensor,\n                 \"label_name2\": tensor}\n                 Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - start_logits: representing unnormalized log probabilities of the span start position.\n            - end_logits: representing unnormalized log probabilities of the span end position.\n            - best_span: the string from the original passage that the model thinks is the best answer to the question.\n            - data_idx: the question id, mapping with answer\n            - loss: A scalar loss to be optimised.\n        \"\"\"\n\n        bert_inputs = features[\"bert_input\"][\"feature\"]\n        token_type_ids = features[\"token_type\"][\"feature\"]\n        attention_mask = (bert_inputs > 0).long()\n\n        span_start_logits, span_end_logits = self.model(\n            bert_inputs, token_type_ids=token_type_ids, attention_mask=attention_mask\n        )\n\n        output_dict = {\n            \"start_logits\": span_start_logits,\n            \"end_logits\": span_end_logits,\n            \"best_span\": self.get_best_span(\n                span_start_logits, span_end_logits, answer_maxlen=self.answer_maxlen\n            ),\n        }\n\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            answer_start_idx = labels[\"answer_start_idx\"]\n            answer_end_idx = labels[\"answer_end_idx\"]\n\n            output_dict[\"data_idx\"] = data_idx\n\n            # If we are on multi-GPU, split add a dimension\n            if len(answer_start_idx.size()) > 1:\n                answer_start_idx = answer_start_idx.squeeze(-1)\n            if len(answer_end_idx.size()) > 1:\n                answer_end_idx = answer_end_idx.squeeze(-1)\n            # sometimes the start/end positions are outside our model inputs, we ignore these terms\n            ignored_index = span_start_logits.size(1)\n\n            answer_start_idx.clamp_(0, ignored_index)\n            answer_end_idx.clamp_(0, ignored_index)\n\n            # Loss\n            criterion = nn.CrossEntropyLoss(ignore_index=ignored_index)\n            loss = criterion(span_start_logits, answer_start_idx)\n            loss += criterion(span_end_logits, answer_end_idx)\n            loss /= 2  # (start + end)\n            output_dict[\"loss\"] = loss\n\n        return output_dict\n"
  },
  {
    "path": "claf/model/reading_comprehension/bidaf.py",
    "content": "\nfrom overrides import overrides\nimport torch\nimport torch.nn as nn\n\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithTokenEmbedder\nfrom claf.model.reading_comprehension.mixin import SQuADv1\nimport claf.modules.functional as f\nimport claf.modules.attention as attention\nimport claf.modules.layer as layer\n\n\n@register(\"model:bidaf\")\nclass BiDAF(SQuADv1, ModelWithTokenEmbedder):\n    \"\"\"\n    Document Reader Model. `Span Detector`\n\n    Implementation of model presented in\n    BiDAF: Bidirectional Attention Flow for Machine Comprehension\n    (https://arxiv.org/abs/1611.01603)\n\n    - Embedding (Word + Char -> Contextual)\n    - Attention Flow\n    - Modeling (RNN)\n    - Output\n\n    * Args:\n        token_embedder: 'QATokenEmbedder', Used to embed the 'context' and 'question'.\n\n    * Kwargs:\n        lang_code: Dataset language code [en|ko]\n        aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij\n            captures the similarity between pi and each question words q_j.\n            these features add soft alignments between similar but non-identical words (e.g., car and vehicle)\n            it only apply to 'context_embed'.\n        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\n        model_dim: the number of model dimension\n        contextual_rnn_num_layer: the number of recurrent layers (contextual)\n        modeling_rnn_num_layer: the number of recurrent layers (modeling)\n        predict_rnn_num_layer: the number of recurrent layers (predict)\n        dropout: the dropout probability\n    \"\"\"\n\n    def __init__(\n        self,\n        token_embedder,\n        lang_code=\"en\",\n        aligned_query_embedding=False,\n        answer_maxlen=None,\n        model_dim=100,\n        contextual_rnn_num_layer=1,\n        modeling_rnn_num_layer=2,\n        predict_rnn_num_layer=1,\n        dropout=0.2,\n    ):\n        super(BiDAF, self).__init__(token_embedder)\n\n        self.lang_code = lang_code\n        self.aligned_query_embedding = aligned_query_embedding\n        self.answer_maxlen = answer_maxlen\n        self.token_embedder = token_embedder\n        self.dropout = nn.Dropout(p=dropout)\n\n        context_embed_dim, query_embed_dim = token_embedder.get_embed_dim()\n        if self.aligned_query_embedding:\n            context_embed_dim += query_embed_dim\n\n        if context_embed_dim != query_embed_dim:\n            self.context_highway = layer.Highway(context_embed_dim)\n            self.context_contextual_rnn = nn.LSTM(\n                input_size=context_embed_dim,\n                hidden_size=model_dim,\n                bidirectional=True,\n                num_layers=contextual_rnn_num_layer,\n                batch_first=True,\n            )\n\n            self.query_highway = layer.Highway(query_embed_dim)\n            self.query_contextual_rnn = nn.LSTM(\n                input_size=query_embed_dim,\n                hidden_size=model_dim,\n                bidirectional=True,\n                num_layers=contextual_rnn_num_layer,\n                batch_first=True,\n            )\n        else:\n            highway = layer.Highway(query_embed_dim)\n\n            self.context_highway = highway\n            self.query_highway = highway\n\n            contextual_rnn = nn.LSTM(\n                input_size=context_embed_dim,\n                hidden_size=model_dim,\n                bidirectional=True,\n                num_layers=contextual_rnn_num_layer,\n                batch_first=True,\n            )\n\n            self.context_contextual_rnn = contextual_rnn\n            self.query_contextual_rnn = contextual_rnn\n\n        self.attention = attention.BiAttention(model_dim)\n        self.modeling_rnn = nn.LSTM(\n            input_size=8 * model_dim,\n            hidden_size=model_dim,\n            num_layers=modeling_rnn_num_layer,\n            bidirectional=True,\n            dropout=dropout,\n            batch_first=True,\n        )\n        self.output_end_rnn = nn.LSTM(\n            input_size=14 * model_dim,\n            hidden_size=model_dim,\n            bidirectional=True,\n            num_layers=predict_rnn_num_layer,\n            batch_first=True,\n        )\n\n        self.span_start_linear = nn.Linear(10 * model_dim, 1)\n        self.span_end_linear = nn.Linear(10 * model_dim, 1)\n\n        self.criterion = nn.CrossEntropyLoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n                {\"feature_name1\": {\n                     \"token_name1\": tensor,\n                     \"toekn_name2\": tensor},\n                 \"feature_name2\": ...}\n\n        * Kwargs:\n            label: label dictionary like below.\n                {\"label_name1\": tensor,\n                 \"label_name2\": tensor}\n                 Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - start_logits: representing unnormalized log probabilities of the span start position.\n            - end_logits: representing unnormalized log probabilities of the span end position.\n            - best_span: the string from the original passage that the model thinks is the best answer to the question.\n            - data_idx: the question id, mapping with answer\n            - loss: A scalar loss to be optimised.\n        \"\"\"\n\n        context = features[\"context\"]\n        question = features[\"question\"]\n\n        # Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward\n        context_seq_config = f.get_sorted_seq_config(context)\n        query_seq_config = f.get_sorted_seq_config(question)\n\n        # Embedding Layer (Char + Word -> Contextual)\n        query_params = {\"frequent_word\": {\"frequent_tuning\": True}}\n        context_embed, query_embed = self.token_embedder(\n            context, question, query_params=query_params, query_align=self.aligned_query_embedding\n        )\n\n        context_mask = f.get_mask_from_tokens(context).float()\n        query_mask = f.get_mask_from_tokens(question).float()\n\n        B, C_L = context_embed.size(0), context_embed.size(1)\n\n        context_embed = self.context_highway(context_embed)\n        query_embed = self.query_highway(query_embed)\n\n        context_encoded = f.forward_rnn_with_pack(\n            self.context_contextual_rnn, context_embed, context_seq_config\n        )\n        context_encoded = self.dropout(context_encoded)\n\n        query_encoded = f.forward_rnn_with_pack(\n            self.query_contextual_rnn, query_embed, query_seq_config\n        )\n        query_encoded = self.dropout(query_encoded)\n\n        # Attention Flow Layer\n        attention_context_query = self.attention(\n            context_encoded, context_mask, query_encoded, query_mask\n        )\n\n        # Modeling Layer\n        modeled_context = f.forward_rnn_with_pack(\n            self.modeling_rnn, attention_context_query, context_seq_config\n        )\n        modeled_context = self.dropout(modeled_context)\n\n        M_D = modeled_context.size(-1)\n\n        # Output Layer\n        span_start_input = self.dropout(\n            torch.cat([attention_context_query, modeled_context], dim=-1)\n        )  # (B, C_L, 10d)\n        span_start_logits = self.span_start_linear(span_start_input).squeeze(-1)  # (B, C_L)\n        span_start_probs = f.masked_softmax(span_start_logits, context_mask)\n\n        span_start_representation = f.weighted_sum(\n            attention=span_start_probs, matrix=modeled_context\n        )\n        tiled_span_start_representation = span_start_representation.unsqueeze(1).expand(B, C_L, M_D)\n\n        span_end_representation = torch.cat(\n            [\n                attention_context_query,\n                modeled_context,\n                tiled_span_start_representation,\n                modeled_context * tiled_span_start_representation,\n            ],\n            dim=-1,\n        )\n        encoded_span_end = f.forward_rnn_with_pack(\n            self.output_end_rnn, span_end_representation, context_seq_config\n        )\n        encoded_span_end = self.dropout(encoded_span_end)\n\n        span_end_input = self.dropout(\n            torch.cat([attention_context_query, encoded_span_end], dim=-1)\n        )\n        span_end_logits = self.span_end_linear(span_end_input).squeeze(-1)\n\n        # Masked Value\n        span_start_logits = f.add_masked_value(span_start_logits, context_mask, value=-1e7)\n        span_end_logits = f.add_masked_value(span_end_logits, context_mask, value=-1e7)\n\n        output_dict = {\n            \"start_logits\": span_start_logits,\n            \"end_logits\": span_end_logits,\n            \"best_span\": self.get_best_span(\n                span_start_logits, span_end_logits, answer_maxlen=self.answer_maxlen\n            ),\n        }\n\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            answer_start_idx = labels[\"answer_start_idx\"]\n            answer_end_idx = labels[\"answer_end_idx\"]\n\n            output_dict[\"data_idx\"] = data_idx\n\n            # Loss\n            loss = self.criterion(span_start_logits, answer_start_idx)\n            loss += self.criterion(span_end_logits, answer_end_idx)\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n"
  },
  {
    "path": "claf/model/reading_comprehension/bidaf_no_answer.py",
    "content": "\nfrom overrides import overrides\nimport torch\nimport torch.nn as nn\n\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithTokenEmbedder\nfrom claf.model.reading_comprehension.mixin import SQuADv2\nimport claf.modules.functional as f\nimport claf.modules.attention as attention\nimport claf.modules.layer as layer\n\n\n@register(\"model:bidaf_no_answer\")\nclass BiDAF_No_Answer(SQuADv2, ModelWithTokenEmbedder):\n    \"\"\"\n    Question Answering Model. `Span Detector`, `No Answer`\n\n    Bidirectional Attention Flow for Machine Comprehension + Bias (No_Answer)\n\n    - Embedding (Word + Char -> Contextual)\n    - Attention Flow\n    - Modeling (RNN)\n    - Output\n\n    * Args:\n        token_embedder: 'QATokenEmbedder', Used to embed the 'context' and 'question'.\n\n    * Kwargs:\n        lang_code: Dataset language code [en|ko]\n        aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij\n            captures the similarity between pi and each question words q_j.\n            these features add soft alignments between similar but non-identical words (e.g., car and vehicle)\n            it only apply to 'context_embed'.\n        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\n        model_dim: the number of model dimension\n        dropout: the dropout probability\n    \"\"\"\n\n    def __init__(\n        self,\n        token_embedder,\n        lang_code=\"en\",\n        aligned_query_embedding=False,\n        answer_maxlen=None,\n        model_dim=100,\n        contextual_rnn_num_layer=1,\n        modeling_rnn_num_layer=2,\n        predict_rnn_num_layer=1,\n        dropout=0.2,\n    ):\n        super(BiDAF_No_Answer, self).__init__(token_embedder)\n\n        self.lang_code = lang_code\n        self.aligned_query_embedding = aligned_query_embedding\n        self.answer_maxlen = answer_maxlen\n        self.token_embedder = token_embedder\n        self.dropout = nn.Dropout(p=dropout)\n\n        context_embed_dim, query_embed_dim = token_embedder.get_embed_dim()\n        if self.aligned_query_embedding:\n            context_embed_dim += query_embed_dim\n\n        if context_embed_dim != query_embed_dim:\n            self.context_highway = layer.Highway(context_embed_dim)\n            self.context_contextual_rnn = nn.LSTM(\n                input_size=context_embed_dim,\n                hidden_size=model_dim,\n                bidirectional=True,\n                num_layers=contextual_rnn_num_layer,\n                batch_first=True,\n            )\n\n            self.query_highway = layer.Highway(query_embed_dim)\n            self.query_contextual_rnn = nn.LSTM(\n                input_size=query_embed_dim,\n                hidden_size=model_dim,\n                bidirectional=True,\n                num_layers=contextual_rnn_num_layer,\n                batch_first=True,\n            )\n        else:\n            highway = layer.Highway(query_embed_dim)\n\n            self.context_highway = highway\n            self.query_highway = highway\n\n            contextual_rnn = nn.LSTM(\n                input_size=context_embed_dim,\n                hidden_size=model_dim,\n                bidirectional=True,\n                num_layers=contextual_rnn_num_layer,\n                batch_first=True,\n            )\n\n            self.context_contextual_rnn = contextual_rnn\n            self.query_contextual_rnn = contextual_rnn\n\n        self.attention = attention.BiAttention(model_dim)\n        self.modeling_rnn = nn.LSTM(\n            input_size=8 * model_dim,\n            hidden_size=model_dim,\n            num_layers=modeling_rnn_num_layer,\n            bidirectional=True,\n            dropout=dropout,\n            batch_first=True,\n        )\n        self.output_end_rnn = nn.LSTM(\n            input_size=14 * model_dim,\n            hidden_size=model_dim,\n            bidirectional=True,\n            num_layers=predict_rnn_num_layer,\n            batch_first=True,\n        )\n\n        self.span_start_linear = nn.Linear(10 * model_dim, 1)\n        self.span_end_linear = nn.Linear(10 * model_dim, 1)\n\n        self.bias = nn.Parameter(torch.randn(1, 1))\n\n        self.criterion = nn.CrossEntropyLoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n                {\"feature_name1\": {\n                     \"token_name1\": tensor,\n                     \"toekn_name2\": tensor},\n                 \"feature_name2\": ...}\n\n        * Kwargs:\n            label: label dictionary like below.\n                {\"label_name1\": tensor,\n                 \"label_name2\": tensor}\n                 Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - start_logits: representing unnormalized log probabilities of the span start position.\n            - end_logits: representing unnormalized log probabilities of the span end position.\n            - best_span: the string from the original passage that the model thinks is the best answer to the question.\n            - data_idx: the question id, mapping with answer\n            - loss: A scalar loss to be optimised.\n        \"\"\"\n\n        context = features[\"context\"]\n        question = features[\"question\"]\n\n        # Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward\n        context_seq_config = f.get_sorted_seq_config(context)\n        query_seq_config = f.get_sorted_seq_config(question)\n\n        # Embedding Layer (Char + Word -> Contextual)\n        query_params = {\"frequent_word\": {\"frequent_tuning\": True}}\n        context_embed, query_embed = self.token_embedder(\n            context, question, query_params=query_params, query_align=self.aligned_query_embedding\n        )\n\n        context_mask = f.get_mask_from_tokens(context).float()\n        query_mask = f.get_mask_from_tokens(question).float()\n\n        B, C_L = context_embed.size(0), context_embed.size(1)\n\n        context_embed = self.context_highway(context_embed)\n        query_embed = self.query_highway(query_embed)\n\n        context_encoded = f.forward_rnn_with_pack(\n            self.context_contextual_rnn, context_embed, context_seq_config\n        )\n        context_encoded = self.dropout(context_encoded)\n\n        query_encoded = f.forward_rnn_with_pack(\n            self.query_contextual_rnn, query_embed, query_seq_config\n        )\n        query_encoded = self.dropout(query_encoded)\n\n        # Attention Flow Layer\n        attention_context_query = self.attention(\n            context_encoded, context_mask, query_encoded, query_mask\n        )\n\n        # Modeling Layer\n        modeled_context = f.forward_rnn_with_pack(\n            self.modeling_rnn, attention_context_query, context_seq_config\n        )\n        modeled_context = self.dropout(modeled_context)\n\n        M_D = modeled_context.size(-1)\n\n        # Output Layer\n        span_start_input = self.dropout(\n            torch.cat([attention_context_query, modeled_context], dim=-1)\n        )  # (B, C_L, 10d)\n        span_start_logits = self.span_start_linear(span_start_input).squeeze(-1)  # (B, C_L)\n        span_start_probs = f.masked_softmax(span_start_logits, context_mask)\n\n        span_start_representation = f.weighted_sum(\n            attention=span_start_probs, matrix=modeled_context\n        )\n        tiled_span_start_representation = span_start_representation.unsqueeze(1).expand(B, C_L, M_D)\n\n        span_end_representation = torch.cat(\n            [\n                attention_context_query,\n                modeled_context,\n                tiled_span_start_representation,\n                modeled_context * tiled_span_start_representation,\n            ],\n            dim=-1,\n        )\n        encoded_span_end = f.forward_rnn_with_pack(\n            self.output_end_rnn, span_end_representation, context_seq_config\n        )\n        encoded_span_end = self.dropout(encoded_span_end)\n\n        span_end_input = self.dropout(\n            torch.cat([attention_context_query, encoded_span_end], dim=-1)\n        )\n        span_end_logits = self.span_end_linear(span_end_input).squeeze(-1)\n\n        # Masked Value\n        span_start_logits = f.add_masked_value(span_start_logits, context_mask, value=-1e7)\n        span_end_logits = f.add_masked_value(span_end_logits, context_mask, value=-1e7)\n\n        # No_Answer Bias\n        bias = self.bias.expand(B, 1)\n        span_start_logits = torch.cat([span_start_logits, bias], dim=-1)\n        span_end_logits = torch.cat([span_end_logits, bias], dim=-1)\n\n        output_dict = {\n            \"start_logits\": span_start_logits,\n            \"end_logits\": span_end_logits,\n            \"best_span\": self.get_best_span(\n                span_start_logits[:, :-1],\n                span_end_logits[:, :-1],\n                answer_maxlen=self.answer_maxlen,  # except no_answer bias\n            ),\n        }\n\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            answer_start_idx = labels[\"answer_start_idx\"]\n            answer_end_idx = labels[\"answer_end_idx\"]\n            answerable = labels[\"answerable\"]\n\n            # No_Asnwer Case\n            C_L = context_mask.size(1)\n            answer_start_idx = answer_start_idx.masked_fill(answerable.eq(0), C_L)\n            answer_end_idx = answer_end_idx.masked_fill(answerable.eq(0), C_L)\n\n            output_dict[\"data_idx\"] = data_idx\n\n            # Loss\n            loss = self.criterion(span_start_logits, answer_start_idx)\n            loss += self.criterion(span_end_logits, answer_end_idx)\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n"
  },
  {
    "path": "claf/model/reading_comprehension/docqa.py",
    "content": "from overrides import overrides\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithTokenEmbedder\nfrom claf.model.reading_comprehension.mixin import SQuADv1\nfrom claf.modules import attention, initializer\nfrom claf.modules import functional as f\n\n\n@register(\"model:docqa\")\nclass DocQA(SQuADv1, ModelWithTokenEmbedder):\n    \"\"\"\n    Document Reader Model. `Span Detector`\n\n    Implementation of model presented in\n    Simple and Effective Multi-Paragraph Reading Comprehension\n    (https://arxiv.org/abs/1710.10723)\n\n    - Embedding (Word + Char -> Contextual)\n    - Attention\n    - Residual self-attention\n    - Output\n\n    * Args:\n        token_embedder: 'QATokenEmbedder', Used to embed the 'context' and 'question'.\n\n    * Kwargs:\n        lang_code: Dataset language code [en|ko]\n        aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij\n            captures the similarity between pi and each question words q_j.\n            these features add soft alignments between similar but non-identical words (e.g., car and vehicle)\n            it only apply to 'context_embed'.\n        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\n        rnn_dim: the number of RNN cell dimension\n        linear_dim: the number of attention linear dimension\n        preprocess_rnn_num_layer: the number of recurrent layers (preprocess)\n        modeling_rnn_num_layer: the number of recurrent layers (modeling)\n        predict_rnn_num_layer: the number of recurrent layers (predict)\n        dropout: the dropout probability\n    \"\"\"\n\n    def __init__(\n        self,\n        token_embedder,\n        lang_code=\"en\",\n        aligned_query_embedding=False,\n        answer_maxlen=17,\n        rnn_dim=100,\n        linear_dim=200,\n        preprocess_rnn_num_layer=1,\n        modeling_rnn_num_layer=2,\n        predict_rnn_num_layer=1,\n        dropout=0.2,\n        weight_init=True,\n    ):\n        super(DocQA, self).__init__(token_embedder)\n\n        self.lang_code = lang_code\n        self.aligned_query_embedding = aligned_query_embedding\n        self.answer_maxlen = answer_maxlen\n        self.token_embedder = token_embedder\n        self.dropout = nn.Dropout(p=dropout)\n\n        context_embed_dim, query_embed_dim = token_embedder.get_embed_dim()\n        if self.aligned_query_embedding:\n            context_embed_dim += query_embed_dim\n\n        if context_embed_dim != query_embed_dim:\n            self.context_preprocess_rnn = nn.GRU(\n                input_size=context_embed_dim,\n                hidden_size=rnn_dim,\n                bidirectional=True,\n                num_layers=preprocess_rnn_num_layer,\n                batch_first=True,\n            )\n            self.query_preprocess_rnn = nn.GRU(\n                input_size=query_embed_dim,\n                hidden_size=rnn_dim,\n                bidirectional=True,\n                num_layers=preprocess_rnn_num_layer,\n                batch_first=True,\n            )\n        else:\n            preprocess_rnn = nn.GRU(\n                input_size=context_embed_dim,\n                hidden_size=rnn_dim,\n                bidirectional=True,\n                num_layers=preprocess_rnn_num_layer,\n                batch_first=True,\n            )\n\n            self.context_preprocess_rnn = preprocess_rnn\n            self.query_preprocess_rnn = preprocess_rnn\n\n        self.bi_attention = attention.DocQAAttention(rnn_dim, linear_dim)\n        self.attn_linear = nn.Linear(rnn_dim * 8, linear_dim)\n\n        self.modeling_rnn = nn.GRU(\n            input_size=linear_dim,\n            hidden_size=rnn_dim,\n            num_layers=modeling_rnn_num_layer,\n            bidirectional=True,\n            batch_first=True,\n        )\n        self.self_attention = SelfAttention(rnn_dim, linear_dim, weight_init=weight_init)\n\n        self.span_start_rnn = nn.GRU(\n            input_size=linear_dim,\n            hidden_size=rnn_dim,\n            bidirectional=True,\n            num_layers=predict_rnn_num_layer,\n            batch_first=True,\n        )\n        self.span_start_linear = nn.Linear(rnn_dim * 2, 1)\n\n        self.span_end_rnn = nn.GRU(\n            input_size=linear_dim + rnn_dim * 2,\n            hidden_size=rnn_dim,\n            bidirectional=True,\n            num_layers=predict_rnn_num_layer,\n            batch_first=True,\n        )\n        self.span_end_linear = nn.Linear(rnn_dim * 2, 1)\n\n        self.activation_fn = F.relu\n        self.criterion = nn.CrossEntropyLoss()\n\n        if weight_init:\n            modules = [\n                self.context_preprocess_rnn,\n                self.query_preprocess_rnn,\n                self.modeling_rnn,\n                self.attn_linear,\n                self.span_start_rnn,\n                self.span_start_linear,\n                self.span_end_rnn,\n                self.span_end_linear,\n            ]\n            initializer.weight(modules)\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n                {\"feature_name1\": {\n                     \"token_name1\": tensor,\n                     \"toekn_name2\": tensor},\n                 \"feature_name2\": ...}\n\n        * Kwargs:\n            label: label dictionary like below.\n                {\"label_name1\": tensor,\n                 \"label_name2\": tensor}\n                 Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - start_logits: representing unnormalized log probabilities of the span start position.\n            - end_logits: representing unnormalized log probabilities of the span end position.\n            - best_span: the string from the original passage that the model thinks is the best answer to the question.\n            - data_idx: the question id, mapping with answer\n            - loss: A scalar loss to be optimised.\n        \"\"\"\n\n        context = features[\"context\"]\n        question = features[\"question\"]\n\n        # Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward\n        context_seq_config = f.get_sorted_seq_config(context)\n        query_seq_config = f.get_sorted_seq_config(question)\n\n        # Embedding\n        query_params = {\"frequent_word\": {\"frequent_tuning\": True}}\n        context_embed, query_embed = self.token_embedder(\n            context, question, query_params=query_params, query_align=self.aligned_query_embedding\n        )\n\n        context_mask = f.get_mask_from_tokens(context).float()  # B X 1 X C_L\n        query_mask = f.get_mask_from_tokens(question).float()  # B X 1 X Q_L\n\n        # Pre-process\n        context_embed = self.dropout(context_embed)\n        context_encoded = f.forward_rnn_with_pack(\n            self.context_preprocess_rnn, context_embed, context_seq_config\n        )\n        context_encoded = self.dropout(context_encoded)\n\n        query_embed = self.dropout(query_embed)\n        query_encoded = f.forward_rnn_with_pack(\n            self.query_preprocess_rnn, query_embed, query_seq_config\n        )\n        query_encoded = self.dropout(query_encoded)\n\n        # Attention -> Projection\n        context_attnded = self.bi_attention(\n            context_encoded, context_mask, query_encoded, query_mask\n        )\n        context_attnded = self.activation_fn(self.attn_linear(context_attnded))  # B X C_L X dim*2\n\n        # Residual Self-Attention\n        context_attnded = self.dropout(context_attnded)\n        context_encoded = f.forward_rnn_with_pack(\n            self.modeling_rnn, context_attnded, context_seq_config\n        )\n        context_encoded = self.dropout(context_encoded)\n\n        context_self_attnded = self.self_attention(context_encoded, context_mask)  # B X C_L X dim*2\n        context_final = self.dropout(context_attnded + context_self_attnded)  # B X C_L X dim*2\n\n        # Prediction\n        span_start_input = f.forward_rnn_with_pack(\n            self.span_start_rnn, context_final, context_seq_config\n        )  # B X C_L X dim*2\n        span_start_input = self.dropout(span_start_input)\n        span_start_logits = self.span_start_linear(span_start_input).squeeze(-1)  # B X C_L\n\n        span_end_input = torch.cat([span_start_input, context_final], dim=-1)  # B X C_L X dim*4\n        span_end_input = f.forward_rnn_with_pack(\n            self.span_end_rnn, span_end_input, context_seq_config\n        )  # B X C_L X dim*2\n        span_end_input = self.dropout(span_end_input)\n        span_end_logits = self.span_end_linear(span_end_input).squeeze(-1)  # B X C_L\n\n        # Masked Value\n        span_start_logits = f.add_masked_value(span_start_logits, context_mask, value=-1e7)\n        span_end_logits = f.add_masked_value(span_end_logits, context_mask, value=-1e7)\n\n        output_dict = {\n            \"start_logits\": span_start_logits,\n            \"end_logits\": span_end_logits,\n            \"best_span\": self.get_best_span(\n                span_start_logits, span_end_logits, answer_maxlen=self.answer_maxlen\n            ),\n        }\n\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            answer_start_idx = labels[\"answer_start_idx\"]\n            answer_end_idx = labels[\"answer_end_idx\"]\n\n            output_dict[\"data_idx\"] = data_idx\n\n            # Loss\n            loss = self.criterion(span_start_logits, answer_start_idx)\n            loss += self.criterion(span_end_logits, answer_end_idx)\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n\n\nclass SelfAttention(nn.Module):\n    \"\"\"\n        Same bi-attention mechanism, only now between the passage and itself.\n    \"\"\"\n\n    def __init__(self, rnn_dim, linear_dim, dropout=0.2, weight_init=True):\n        super(SelfAttention, self).__init__()\n\n        self.self_attention = attention.DocQAAttention(\n            rnn_dim, linear_dim, self_attn=True, weight_init=weight_init\n        )\n        self.self_attn_Linear = nn.Linear(rnn_dim * 6, linear_dim)\n        self.dropout = nn.Dropout(p=dropout)\n        self.activation_fn = F.relu\n\n        if weight_init:\n            initializer.weight(self.self_attn_Linear)\n\n    def forward(self, context, context_mask):\n        context_self_attnded = self.self_attention(context, context_mask, context, context_mask)\n        return self.activation_fn(self.self_attn_Linear(context_self_attnded))\n"
  },
  {
    "path": "claf/model/reading_comprehension/docqa_no_answer.py",
    "content": "from overrides import overrides\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithTokenEmbedder\nfrom claf.model.reading_comprehension.mixin import SQuADv2\nfrom claf.modules import attention, initializer\nfrom claf.modules import functional as f\n\n\n@register(\"model:docqa_no_answer\")\nclass DocQA_No_Answer(SQuADv2, ModelWithTokenEmbedder):\n    \"\"\"\n    Question Answering Model. `Span Detector`, `No Answer`\n\n    Implementation of model presented in\n    Simple and Effective Multi-Paragraph Reading Comprehension + No_Asnwer\n    (https://arxiv.org/abs/1710.10723)\n\n    - Embedding (Word + Char -> Contextual)\n    - Attention\n    - Residual self-attention\n    - Output\n\n    * Args:\n        token_embedder: 'QATokenEmbedder', Used to embed the 'context' and 'question'.\n\n    * Kwargs:\n        lang_code: Dataset language code [en|ko]\n        aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij\n            captures the similarity between pi and each question words q_j.\n            these features add soft alignments between similar but non-identical words (e.g., car and vehicle)\n            it only apply to 'context_embed'.\n        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\n        rnn_dim: the number of RNN cell dimension\n        linear_dim: the number of attention linear dimension\n        preprocess_rnn_num_layer: the number of recurrent layers (preprocess)\n        modeling_rnn_num_layer: the number of recurrent layers (modeling)\n        predict_rnn_num_layer: the number of recurrent layers (predict)\n        dropout: the dropout probability\n    \"\"\"\n\n    def __init__(\n        self,\n        token_embedder,\n        lang_code=\"en\",\n        aligned_query_embedding=False,\n        answer_maxlen=17,\n        rnn_dim=100,\n        linear_dim=200,\n        preprocess_rnn_num_layer=1,\n        modeling_rnn_num_layer=2,\n        predict_rnn_num_layer=1,\n        dropout=0.2,\n        weight_init=True,\n    ):\n        super(DocQA_No_Answer, self).__init__(token_embedder)\n\n        self.lang_code = lang_code\n        self.aligned_query_embedding = aligned_query_embedding\n        self.answer_maxlen = answer_maxlen\n        self.token_embedder = token_embedder\n        self.dropout = nn.Dropout(p=dropout)\n\n        context_embed_dim, query_embed_dim = token_embedder.get_embed_dim()\n        if self.aligned_query_embedding:\n            context_embed_dim += query_embed_dim\n\n        if context_embed_dim != query_embed_dim:\n            self.context_preprocess_rnn = nn.GRU(\n                input_size=context_embed_dim,\n                hidden_size=rnn_dim,\n                bidirectional=True,\n                num_layers=preprocess_rnn_num_layer,\n                batch_first=True,\n            )\n            self.query_preprocess_rnn = nn.GRU(\n                input_size=query_embed_dim,\n                hidden_size=rnn_dim,\n                bidirectional=True,\n                num_layers=preprocess_rnn_num_layer,\n                batch_first=True,\n            )\n        else:\n            preprocess_rnn = nn.GRU(\n                input_size=context_embed_dim,\n                hidden_size=rnn_dim,\n                bidirectional=True,\n                num_layers=preprocess_rnn_num_layer,\n                batch_first=True,\n            )\n\n            self.context_preprocess_rnn = preprocess_rnn\n            self.query_preprocess_rnn = preprocess_rnn\n\n        self.bi_attention = attention.DocQAAttention(rnn_dim, linear_dim)\n        self.attn_linear = nn.Linear(rnn_dim * 8, linear_dim)\n\n        self.modeling_rnn = nn.GRU(\n            input_size=linear_dim,\n            hidden_size=rnn_dim,\n            num_layers=modeling_rnn_num_layer,\n            bidirectional=True,\n            batch_first=True,\n        )\n        self.self_attention = SelfAttention(rnn_dim, linear_dim, weight_init=weight_init)\n\n        self.span_start_rnn = nn.GRU(\n            input_size=linear_dim,\n            hidden_size=rnn_dim,\n            bidirectional=True,\n            num_layers=predict_rnn_num_layer,\n            batch_first=True,\n        )\n        self.span_start_linear = nn.Linear(rnn_dim * 2, 1)\n\n        self.span_end_rnn = nn.GRU(\n            input_size=linear_dim + rnn_dim * 2,\n            hidden_size=rnn_dim,\n            bidirectional=True,\n            num_layers=predict_rnn_num_layer,\n            batch_first=True,\n        )\n        self.span_end_linear = nn.Linear(rnn_dim * 2, 1)\n\n        self.no_answer_op = NoAnswer(context_embed_dim, 80)\n\n        self.activation_fn = F.relu\n        self.criterion = nn.CrossEntropyLoss()\n\n        if weight_init:\n            modules = [\n                self.context_preprocess_rnn,\n                self.query_preprocess_rnn,\n                self.modeling_rnn,\n                self.attn_linear,\n                self.span_start_rnn,\n                self.span_start_linear,\n                self.span_end_rnn,\n                self.span_end_linear,\n            ]\n            initializer.weight(modules)\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n                {\"feature_name1\": {\n                     \"token_name1\": tensor,\n                     \"toekn_name2\": tensor},\n                 \"feature_name2\": ...}\n\n        * Kwargs:\n            label: label dictionary like below.\n                {\"label_name1\": tensor,\n                 \"label_name2\": tensor}\n                 Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - start_logits: representing unnormalized log probabilities of the span start position.\n            - end_logits: representing unnormalized log probabilities of the span end position.\n            - best_span: the string from the original passage that the model thinks is the best answer to the question.\n            - data_idx: the question id, mapping with answer\n            - loss: A scalar loss to be optimised.\n        \"\"\"\n\n        context = features[\"context\"]\n        question = features[\"question\"]\n\n        # Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward\n        context_seq_config = f.get_sorted_seq_config(context)\n        query_seq_config = f.get_sorted_seq_config(question)\n\n        # Embedding\n        query_params = {\"frequent_word\": {\"frequent_tuning\": True}}\n        context_embed, query_embed = self.token_embedder(\n            context, question, query_params=query_params, query_align=self.aligned_query_embedding\n        )\n\n        context_mask = f.get_mask_from_tokens(context).float()  # B X C_L\n        query_mask = f.get_mask_from_tokens(question).float()  # B X Q_L\n\n        # Pre-process\n        context_embed = self.dropout(context_embed)\n        context_encoded = f.forward_rnn_with_pack(\n            self.context_preprocess_rnn, context_embed, context_seq_config\n        )\n        context_encoded = self.dropout(context_encoded)\n\n        query_embed = self.dropout(query_embed)\n        query_encoded = f.forward_rnn_with_pack(\n            self.query_preprocess_rnn, query_embed, query_seq_config\n        )\n        query_encoded = self.dropout(query_encoded)\n\n        # Attention -> Projection\n        context_attnded = self.bi_attention(\n            context_encoded, context_mask, query_encoded, query_mask\n        )\n        context_attnded = self.activation_fn(self.attn_linear(context_attnded))  # B X C_L X dim*2\n\n        # Residual Self-Attention\n        context_attnded = self.dropout(context_attnded)\n        context_encoded = f.forward_rnn_with_pack(\n            self.modeling_rnn, context_attnded, context_seq_config\n        )\n        context_encoded = self.dropout(context_encoded)\n\n        context_self_attnded = self.self_attention(context_encoded, context_mask)  # B X C_L X dim*2\n        context_final = self.dropout(context_attnded + context_self_attnded)  # B X C_L X dim*2\n\n        # Prediction\n        span_start_input = f.forward_rnn_with_pack(\n            self.span_start_rnn, context_final, context_seq_config\n        )  # B X C_L X dim*2\n        span_start_input = self.dropout(span_start_input)\n        span_start_logits = self.span_start_linear(span_start_input).squeeze(-1)  # B X C_L\n\n        span_end_input = torch.cat([span_start_input, context_final], dim=-1)  # B X C_L X dim*4\n        span_end_input = f.forward_rnn_with_pack(\n            self.span_end_rnn, span_end_input, context_seq_config\n        )  # B X C_L X dim*2\n        span_end_input = self.dropout(span_end_input)\n        span_end_logits = self.span_end_linear(span_end_input).squeeze(-1)  # B X C_L\n\n        # Masked Value\n        span_start_logits = f.add_masked_value(span_start_logits, context_mask, value=-1e7)\n        span_end_logits = f.add_masked_value(span_end_logits, context_mask, value=-1e7)\n\n        # No_Asnwer Option\n        bias = self.no_answer_op(context_embed, span_start_logits, span_end_logits)\n\n        span_start_logits = torch.cat([span_start_logits, bias], dim=-1)\n        span_end_logits = torch.cat([span_end_logits, bias], dim=-1)\n\n        output_dict = {\n            \"start_logits\": span_start_logits,\n            \"end_logits\": span_end_logits,\n            \"best_span\": self.get_best_span(\n                span_start_logits[:, :-1],\n                span_end_logits[:, :-1],\n                answer_maxlen=self.answer_maxlen,  # except no_answer bias\n            ),\n        }\n\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            answer_start_idx = labels[\"answer_start_idx\"]\n            answer_end_idx = labels[\"answer_end_idx\"]\n            answerable = labels[\"answerable\"]\n\n            # No_Asnwer Case\n            C_L = context_mask.size(1)\n            answer_start_idx = answer_start_idx.masked_fill(answerable.eq(0), C_L)\n            answer_end_idx = answer_end_idx.masked_fill(answerable.eq(0), C_L)\n\n            output_dict[\"data_idx\"] = data_idx\n\n            # Loss\n            loss = self.criterion(span_start_logits, answer_start_idx)\n            loss += self.criterion(span_end_logits, answer_end_idx)\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n\n\nclass SelfAttention(nn.Module):\n    \"\"\"\n        Same bi-attention mechanism, only now between the passage and itself.\n    \"\"\"\n\n    def __init__(self, rnn_dim, linear_dim, dropout=0.2, weight_init=True):\n        super(SelfAttention, self).__init__()\n\n        self.self_attention = attention.DocQAAttention(\n            rnn_dim, linear_dim, self_attn=True, weight_init=weight_init\n        )\n        self.self_attn_Linear = nn.Linear(rnn_dim * 6, linear_dim)\n        self.dropout = nn.Dropout(p=dropout)\n        self.activation_fn = F.relu\n\n        if weight_init:\n            initializer.weight(self.self_attn_Linear)\n\n    def forward(self, context, context_mask):\n        context_self_attnded = self.self_attention(context, context_mask, context, context_mask)\n        context_self_attnded = self.activation_fn(self.self_attn_Linear(context_self_attnded))\n\n        return context_self_attnded\n\n\nclass NoAnswer(nn.Module):\n    \"\"\"\n        No-Answer Option\n\n        * Args:\n            embed_dim: the number of passage embedding dimension\n            bias_hidden_dim: bias use two layer mlp, the number of hidden_size\n    \"\"\"\n\n    def __init__(self, embed_dim, bias_hidden_dim):\n        super(NoAnswer, self).__init__()\n\n        self.self_attn = nn.Linear(embed_dim, 1)\n        self.bias_mlp = nn.Sequential(\n            nn.Linear(embed_dim * 3, bias_hidden_dim), nn.ReLU(), nn.Linear(bias_hidden_dim, 1)\n        )\n\n    def forward(self, context_embed, span_start_logits, span_end_logits):\n        p_1_h = F.softmax(span_start_logits, -1).unsqueeze(1)  # B,1,T\n        p_2_h = F.softmax(span_end_logits, -1).unsqueeze(1)  # B,1,T\n        p_3_h = self.self_attn(context_embed).transpose(1, 2)  # B,1,T\n\n        v_1 = torch.matmul(p_1_h, context_embed)  # B,1,D\n        v_2 = torch.matmul(p_2_h, context_embed)  # B,1,D\n        v_3 = torch.matmul(p_3_h, context_embed)  # B,1,D\n\n        return self.bias_mlp(torch.cat([v_1, v_2, v_3], -1)).squeeze(-1)\n"
  },
  {
    "path": "claf/model/reading_comprehension/drqa.py",
    "content": "from overrides import overrides\n\nimport torch.nn as nn\n\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithTokenEmbedder\nfrom claf.model.reading_comprehension.mixin import SQuADv1\nimport claf.modules.functional as f\nimport claf.modules.attention as attention\n\n\n@register(\"model:drqa\")\nclass DrQA(SQuADv1, ModelWithTokenEmbedder):\n    \"\"\"\n    Document Reader Model. `Span Detector`\n\n    Implementation of model presented in\n    Reading Wikipedia to Answer Open-Domain Questions\n    (https://arxiv.org/abs/1704.00051)\n\n    - Embedding + features\n    - Align question embedding\n\n    * Args:\n        token_embedder: 'QATokenEmbedder', Used to embed the 'context' and 'question'.\n\n    * Kwargs:\n        lang_code: Dataset language code [en|ko]\n        aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij\n            captures the similarity between pi and each question words q_j.\n            these features add soft alignments between similar but non-identical words (e.g., car and vehicle)\n            it only apply to 'context_embed'.\n        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\n        model_dim: the number of model dimension\n        dropout: the dropout probability\n    \"\"\"\n\n    def __init__(\n        self,\n        token_embedder,\n        lang_code=\"en\",\n        aligned_query_embedding=False,\n        answer_maxlen=None,\n        model_dim=128,\n        dropout=0.3,\n    ):\n        super(DrQA, self).__init__(token_embedder)\n\n        self.lang_code = lang_code\n        self.aligned_query_embedding = aligned_query_embedding\n        self.answer_maxlen = answer_maxlen\n        self.token_embedder = token_embedder\n        self.dropout = nn.Dropout(p=dropout)\n\n        context_embed_dim, query_embed_dim = token_embedder.get_embed_dim()\n        if self.aligned_query_embedding:\n            context_embed_dim += query_embed_dim\n\n        self.paragraph_rnn = nn.LSTM(\n            input_size=context_embed_dim,\n            hidden_size=model_dim,\n            num_layers=3,\n            dropout=dropout,\n            bidirectional=True,\n            batch_first=True,\n        )\n\n        self.query_rnn = nn.LSTM(\n            input_size=query_embed_dim,\n            hidden_size=model_dim,\n            num_layers=3,\n            dropout=dropout,\n            bidirectional=True,\n            batch_first=True,\n        )\n\n        self.query_att = attention.LinearSeqAttn(model_dim * 2)\n\n        self.start_attn = attention.BilinearSeqAttn(model_dim * 2, model_dim * 2)\n        self.end_attn = attention.BilinearSeqAttn(model_dim * 2, model_dim * 2)\n\n        self.criterion = nn.CrossEntropyLoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n                {\"feature_name1\": {\n                     \"token_name1\": tensor,\n                     \"toekn_name2\": tensor},\n                 \"feature_name2\": ...}\n\n        * Kwargs:\n            label: label dictionary like below.\n                {\"label_name1\": tensor,\n                 \"label_name2\": tensor}\n                 Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - start_logits: representing unnormalized log probabilities of the span start position.\n            - end_logits: representing unnormalized log probabilities of the span end position.\n            - best_span: the string from the original passage that the model thinks is the best answer to the question.\n            - data_idx: the question id, mapping with answer\n            - loss: A scalar loss to be optimised.\n        \"\"\"\n\n        context = features[\"context\"]  # aka paragraph\n        question = features[\"question\"]\n\n        # Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward\n        context_seq_config = f.get_sorted_seq_config(context)\n        query_seq_config = f.get_sorted_seq_config(question)\n\n        # Embedding\n        query_params = {\"frequent_word\": {\"frequent_tuning\": True}}\n        context_embed, query_embed = self.token_embedder(\n            context, question, query_params=query_params, query_align=self.aligned_query_embedding\n        )\n\n        context_mask = f.get_mask_from_tokens(context).float()\n        query_mask = f.get_mask_from_tokens(question).float()\n\n        context_embed = self.dropout(context_embed)\n        query_embed = self.dropout(query_embed)\n\n        # RNN (LSTM)\n        context_encoded = f.forward_rnn_with_pack(\n            self.paragraph_rnn, context_embed, context_seq_config\n        )\n        context_encoded = self.dropout(context_encoded)\n\n        query_encoded = f.forward_rnn_with_pack(\n            self.query_rnn, query_embed, query_seq_config\n        )  # (B, Q_L, H*2)\n        query_encoded = self.dropout(query_encoded)\n\n        query_attention = self.query_att(query_encoded, query_mask)  # (B, Q_L)\n        query_att_sum = f.weighted_sum(query_attention, query_encoded)  # (B, H*2)\n\n        span_start_logits = self.start_attn(context_encoded, query_att_sum, context_mask)\n        span_end_logits = self.end_attn(context_encoded, query_att_sum, context_mask)\n\n        # Masked Value\n        span_start_logits = f.add_masked_value(span_start_logits, context_mask, value=-1e7)\n        span_end_logits = f.add_masked_value(span_end_logits, context_mask, value=-1e7)\n\n        output_dict = {\n            \"start_logits\": span_start_logits,\n            \"end_logits\": span_end_logits,\n            \"best_span\": self.get_best_span(\n                span_start_logits, span_end_logits, answer_maxlen=self.answer_maxlen\n            ),\n        }\n\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            answer_start_idx = labels[\"answer_start_idx\"]\n            answer_end_idx = labels[\"answer_end_idx\"]\n\n            output_dict[\"data_idx\"] = data_idx\n\n            loss = self.criterion(span_start_logits, answer_start_idx)\n            loss += self.criterion(span_end_logits, answer_end_idx)\n            output_dict[\"loss\"] = loss.unsqueeze(0)\n\n        return output_dict\n"
  },
  {
    "path": "claf/model/reading_comprehension/mixin.py",
    "content": "\nfrom collections import OrderedDict\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\n\nfrom claf.decorator import arguments_required\nfrom claf.metric import korquad_v1_official, squad_v1_official, squad_v2_official\nfrom claf.model.base import ModelBase\n\n\nclass ReadingComprehension:\n    \"\"\"\n    Reading Comprehension Mixin Class\n\n    * Args:\n        token_embedder: 'RCTokenEmbedder', Used to embed the 'context' and 'question'.\n\n    \"\"\"\n\n    def get_best_span(self, span_start_logits, span_end_logits, answer_maxlen=None):\n        \"\"\"\n        Take argmax of constrained score_s * score_e.\n\n        * Args:\n            span_start_logits: independent start logits\n            span_end_logits: independent end logits\n\n        * Kwargs:\n            answer_maxlen: max span length to consider (default is None -> All)\n        \"\"\"\n\n        B = span_start_logits.size(0)\n        best_word_span = span_start_logits.new_zeros((B, 2), dtype=torch.long)\n\n        score_starts = F.softmax(span_start_logits, dim=-1)\n        score_ends = F.softmax(span_end_logits, dim=-1)\n\n        max_len = answer_maxlen or score_starts.size(1)\n\n        for i in range(score_starts.size(0)):\n            # Outer product of scores to get full p_s * p_e matrix\n            scores = torch.ger(score_starts[i], score_ends[i])\n\n            # Zero out negative length and over-length span scores\n            scores.triu_().tril_(max_len - 1)\n\n            # Take argmax or top n\n            scores = scores.detach().cpu().numpy()\n            scores_flat = scores.flatten()\n\n            idx_sort = [np.argmax(scores_flat)]\n\n            s_idx, e_idx = np.unravel_index(idx_sort, scores.shape)\n            best_word_span[i, 0] = int(s_idx[0])\n            best_word_span[i, 1] = int(e_idx[0])\n\n        return best_word_span\n\n    def _make_span_metrics(self, predictions):\n        \"\"\" span accuracy metrics \"\"\"\n        start_accuracy, end_accuracy, span_accuracy = 0, 0, 0\n\n        for index, preds in predictions.items():\n            _, _, (answer_start, answer_end) = self._dataset.get_ground_truths(index)\n\n            start_acc = 1 if preds[\"pred_span_start\"] == answer_start else 0\n            end_acc = 1 if preds[\"pred_span_end\"] == answer_end else 0\n            span_acc = 1 if start_acc == 1 and end_acc == 1 else 0\n\n            start_accuracy += start_acc\n            end_accuracy += end_acc\n            span_accuracy += span_acc\n\n        start_accuracy = 100.0 * start_accuracy / len(self._dataset)\n        end_accuracy = 100.0 * end_accuracy / len(self._dataset)\n        span_accuracy = 100.0 * span_accuracy / len(self._dataset)\n\n        return {\"start_acc\": start_accuracy, \"end_acc\": end_accuracy, \"span_acc\": span_accuracy}\n\n    def make_predictions(self, output_dict):\n        \"\"\"\n        Make predictions with model's output_dict\n\n        * Args:\n            output_dict: model's output dictionary consisting of\n                - data_idx: question id\n                - best_span: calculate the span_start_logits and span_end_logits to what is the best span\n                - start_logits: span start logits\n                - end_logits: span end logits\n\n        * Returns:\n            predictions: prediction dictionary consisting of\n                - key: 'id' (question id)\n                - value: consisting of dictionary\n                    predict_text, pred_span_start, pred_span_end, span_start_prob, span_end_prob\n        \"\"\"\n\n        data_indices = output_dict[\"data_idx\"]\n        best_word_span = output_dict[\"best_span\"]\n\n        return OrderedDict(\n            [\n                (\n                    index.item(),\n                    {\n                        \"predict_text\": self._dataset.get_text_with_index(\n                            index.item(), best_span[0], best_span[1]\n                        ),\n                        \"pred_span_start\": best_span[0],\n                        \"pred_span_end\": best_span[1],\n                        \"start_logits\": start_logits,\n                        \"end_logits\": end_logits,\n                    },\n                )\n                for index, best_span, start_logits, end_logits in zip(\n                    list(data_indices.data),\n                    list(best_word_span.data),\n                    list(output_dict[\"start_logits\"].data),\n                    list(output_dict[\"end_logits\"].data),\n                )\n            ]\n        )\n\n    @arguments_required([\"context\", \"question\"])\n    def predict(self, output_dict, arguments, helper):\n        \"\"\"\n        Inference by raw_feature\n\n        * Args:\n            output_dict: model's output dictionary consisting of\n                - data_idx: question id\n                - best_span: calculate the span_start_logits and span_end_logits to what is the best span\n            arguments: arguments dictionary consisting of user_input\n            helper: dictionary for helping get answer\n\n        * Returns:\n            span: predict best_span\n        \"\"\"\n        span_start, span_end = list(output_dict[\"best_span\"][0].data)\n        word_start = span_start.item()\n        word_end = span_end.item()\n\n        text_span = helper[\"text_span\"]\n        char_start = text_span[word_start][0]\n        char_end = text_span[word_end][1]\n\n        context_text = arguments[\"context\"]\n        answer_text = context_text[char_start:char_end]\n\n        start_logit = output_dict[\"start_logits\"][0]\n        end_logit = output_dict[\"end_logits\"][0]\n\n        score = start_logit[span_start] + end_logit[span_end]\n        score = score.item()\n\n        return {\"text\": answer_text, \"score\": score}\n\n    def print_examples(self, index, inputs, predictions):\n        \"\"\"\n        Print evaluation examples\n\n        * Args:\n            index: data index\n            inputs: mini-batch inputs\n            predictions: prediction dictionary consisting of\n                - key: 'id' (question id)\n                - value: consisting of dictionary\n                    predict_text, pred_span_start, pred_span_end, span_start_prob, span_end_prob\n\n        * Returns:\n            print(Context, Question, Answers and Predict)\n        \"\"\"\n        data_index = inputs[\"labels\"][\"data_idx\"][index].item()\n        qid = self._dataset.get_qid(data_index)\n        if \"#\" in qid:  # bert case (qid#index)\n            qid = qid.split(\"#\")[0]\n\n        helper = self._dataset.helper\n\n        context = helper[\"examples\"][qid][\"context\"]\n        question = helper[\"examples\"][qid][\"question\"]\n        answers = helper[\"examples\"][qid][\"answers\"]\n\n        predict_text = predictions[data_index][\"predict_text\"]\n\n        print()\n        print(\"- Context:\", context)\n        print(\"- Question:\", question)\n        print(\"- Answers:\", answers)\n        print(\"- Predict:\", predict_text)\n        print()\n\n    def write_predictions(self, predictions, file_path=None, is_dict=True):\n        pass\n        # TODO: start and end logits (TypeError: Object of type 'Tensor' is not JSON serializable)\n        # try:\n            # super(ReadingComprehension, self).write_predictions(\n                # predictions, file_path=file_path, is_dict=is_dict\n            # )\n        # except AttributeError:\n            # # TODO: Need to Fix\n            # model_base = ModelBase()\n            # model_base._log_dir = self._log_dir\n            # model_base._train_counter = self._train_counter\n            # model_base.training = self.training\n            # model_base.write_predictions(predictions, file_path=file_path, is_dict=is_dict)\n\n\nclass SQuADv1(ReadingComprehension):\n    \"\"\"\n    Reading Comprehension Mixin Class\n        with SQuAD v1.1 evaluation\n\n    * Args:\n        token_embedder: 'QATokenEmbedder', Used to embed the 'context' and 'question'.\n\n    \"\"\"\n\n    def make_metrics(self, predictions):\n        \"\"\"\n        Make metrics with prediction dictionary\n\n        * Args:\n            predictions: prediction dictionary consisting of\n                - key: 'id' (question id)\n                - value: (predict_text, pred_span_start, pred_span_end)\n\n        * Returns:\n            metrics: metric dictionary consisting of\n                - 'em': exact_match (SQuAD v1.1 official evaluation)\n                - 'f1': f1 (SQuAD v1.1 official evaluation)\n                - 'start_acc': span_start accuracy\n                - 'end_acc': span_end accuracy\n                - 'span_acc': span accuracy (start and end)\n        \"\"\"\n\n        preds = {}\n        for index, prediction in predictions.items():\n            _, _, (answer_start, answer_end) = self._dataset.get_ground_truths(index)\n\n            qid = self._dataset.get_qid(index)\n            preds[qid] = prediction[\"predict_text\"]\n\n        self.write_predictions(preds)\n\n        squad_offical_metrics = self._make_metrics_with_official(preds)\n\n        metrics = self._make_span_metrics(predictions)\n        metrics.update(squad_offical_metrics)\n        return metrics\n\n    def _make_metrics_with_official(self, preds):\n        \"\"\" SQuAD v1.1 official evaluation \"\"\"\n        dataset = self._dataset.raw_dataset\n\n        if self.lang_code.startswith(\"ko\"):\n            scores = korquad_v1_official.evaluate(dataset, preds)\n        else:\n            scores = squad_v1_official.evaluate(dataset, preds)\n        return scores\n\n\nclass SQuADv1ForBert(SQuADv1):\n    \"\"\"\n    Reading Comprehension Mixin Class\n        with SQuAD v1.1 evaluation\n\n    * Args:\n        token_embedder: 'QATokenEmbedder', Used to embed the 'context' and 'question'.\n\n    \"\"\"\n\n    def make_metrics(self, predictions):\n        \"\"\" BERT predictions need to get nbest result \"\"\"\n\n        best_predictions = {}\n        for index, prediction in predictions.items():\n            qid = self._dataset.get_qid(index)\n\n            predict_text = prediction[\"predict_text\"]\n\n            start_logit = prediction[\"start_logits\"][prediction[\"pred_span_start\"]]\n            end_logit = prediction[\"end_logits\"][prediction[\"pred_span_end\"]]\n            predict_score = start_logit.item() + end_logit.item()\n\n            if qid not in best_predictions:\n                best_predictions[qid] = []\n            best_predictions[qid].append((predict_text, predict_score))\n\n        for qid, predictions in best_predictions.items():\n            sorted_predictions = sorted(predictions, key=lambda x: x[1], reverse=True)\n            best_predictions[qid] = sorted_predictions[0][0]\n\n        self.write_predictions(best_predictions)\n        return self._make_metrics_with_official(best_predictions)\n\n    def predict(self, output_dict, arguments, helper):\n        \"\"\"\n        Inference by raw_feature\n\n        * Args:\n            output_dict: model's output dictionary consisting of\n                - data_idx: question id\n                - best_span: calculate the span_start_logits and span_end_logits to what is the best span\n            arguments: arguments dictionary consisting of user_input\n            helper: dictionary for helping get answer\n\n        * Returns:\n            span: predict best_span\n        \"\"\"\n\n        context_text = arguments[\"context\"]\n        bert_tokens = helper[\"bert_token\"]\n        predictions = [\n            (best_span, start_logits, end_logits)\n            for best_span, start_logits, end_logits in zip(\n                list(output_dict[\"best_span\"].data),\n                list(output_dict[\"start_logits\"].data),\n                list(output_dict[\"end_logits\"].data),\n            )\n        ]\n\n        best_predictions = []\n        for index, prediction in enumerate(predictions):\n            bert_token = bert_tokens[index]\n            best_span, start_logits, end_logits = prediction\n            pred_start, pred_end = best_span\n\n            predict_text = \"\"\n            if (\n                pred_start < len(bert_token)\n                and pred_end < len(bert_token)\n                and bert_token[pred_start].text_span is not None\n                and bert_token[pred_end].text_span is not None\n            ):\n                char_start = bert_token[pred_start].text_span[0]\n                char_end = bert_token[pred_end].text_span[1]\n                predict_text = context_text[char_start:char_end]\n\n            start_logit = start_logits[pred_start]\n            end_logit = end_logits[pred_end]\n            predict_score = start_logit.item() + end_logit.item()\n\n            best_predictions.append((predict_text, predict_score))\n\n        sorted_predictions = sorted(best_predictions, key=lambda x: x[1], reverse=True)\n        return {\"text\": sorted_predictions[0][0], \"score\": sorted_predictions[0][1]}\n\n\nclass SQuADv2(ReadingComprehension):\n    \"\"\"\n    Reading Comprehension Mixin Class\n        with SQuAD v2.0 evaluation\n\n    * Args:\n        token_embedder: 'RCTokenEmbedder', Used to embed the 'context' and 'question'.\n\n    \"\"\"\n\n    def make_metrics(self, predictions):\n        \"\"\"\n        Make metrics with prediction dictionary\n\n        * Args:\n            predictions: prediction dictionary consisting of\n                - key: 'id' (question id)\n                - value: consisting of dictionary\n                    predict_text, pred_span_start, pred_span_end, span_start_prob, span_end_prob\n\n        * Returns:\n            metrics: metric dictionary consisting of\n                - 'start_acc': span_start accuracy\n                - 'end_acc': span_end accuracy\n                - 'span_acc': span accuracy (start and end)\n                - 'em': exact_match (SQuAD v2.0 official evaluation)\n                - 'f1': f1 (SQuAD v2.0 official evaluation)\n                - 'HasAns_exact': has answer exact_match\n                - 'HasAns_f1': has answer f1\n                - 'NoAns_exact': no answer exact_match\n                - 'NoAns_f1': no answer f1\n                - 'best_exact': best exact_match score with best_exact_thresh\n                - 'best_exact_thresh': best exact_match answerable threshold\n                - 'best_f1': best f1 score with best_f1_thresh\n                - 'best_f1_thresh': best f1 answerable threshold\n        \"\"\"\n\n        preds, na_probs = {}, {}\n        for index, prediction in predictions.items():\n            _, _, (answer_start, answer_end) = self._dataset.get_ground_truths(index)\n\n            # Metrics (SQuAD official metric)\n            predict_text = prediction[\"predict_text\"]\n            if predict_text == \"<noanswer>\":\n                predict_text = \"\"\n\n            qid = self._dataset.get_qid(index)\n            preds[qid] = predict_text\n\n            span_start_probs = F.softmax(prediction[\"start_logits\"], dim=-1)\n            span_end_probs = F.softmax(prediction[\"end_logits\"], dim=-1)\n\n            start_no_prob = span_start_probs[-1].item()\n            end_no_prob = span_end_probs[-1].item()\n            no_answer_prob = start_no_prob * end_no_prob\n            na_probs[qid] = no_answer_prob\n\n        self.write_predictions(preds)\n\n        model_type = \"train\" if self.training else \"valid\"\n        self.write_predictions(\n            na_probs, file_path=f\"na_probs-{model_type}-{self._train_counter.get_display()}.json\"\n        )\n\n        squad_offical_metrics = self._make_metrics_with_official(preds, na_probs)\n\n        metrics = self._make_span_metrics(predictions)\n        metrics.update(squad_offical_metrics)\n        return metrics\n\n    def _make_metrics_with_official(self, preds, na_probs, na_prob_thresh=1.0):\n        \"\"\" SQuAD 2.0 official evaluation \"\"\"\n        dataset = self._dataset.raw_dataset\n\n        squad_scores = squad_v2_official.evaluate(dataset, na_probs, preds)\n        squad_scores[\"em\"] = squad_scores[\"exact\"]\n\n        remove_keys = [\"total\", \"exact\", \"HasAns_total\", \"NoAns_total\"]\n        for key in remove_keys:\n            if key in squad_scores:\n                del squad_scores[key]\n\n        return squad_scores\n"
  },
  {
    "path": "claf/model/reading_comprehension/qanet.py",
    "content": "import torch\nimport torch.nn as nn\n\nfrom overrides import overrides\n\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithTokenEmbedder\nfrom claf.model.reading_comprehension.mixin import SQuADv1\nimport claf.modules.functional as f\nimport claf.modules.attention as attention\nimport claf.modules.encoder as encoder\nimport claf.modules.conv as conv\nimport claf.modules.layer as layer\n\n\n@register(\"model:qanet\")\nclass QANet(SQuADv1, ModelWithTokenEmbedder):\n    \"\"\"\n        Document Reader Model. `Span Detector`\n\n        Implementation of model presented in\n        QANet:Combining Local Convolution with Global Self-Attention for Reading Comprehension\n        (https://arxiv.org/abs/1804.09541)\n\n        - Input Embedding Layer\n        - Embedding Encoder Layer\n        - Context-Query Attention Layer\n        - Model Encoder Layer\n        - Output Layer\n\n        * Args:\n            token_embedder: 'QATokenEmbedder', Used to embed the 'context' and 'question'.\n\n        * Kwargs:\n            lang_code: Dataset language code [en|ko]\n            aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij\n                captures the similarity between pi and each question words q_j.\n                these features add soft alignments between similar but non-identical words (e.g., car and vehicle)\n                it only apply to 'context_embed'.\n            answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\n            model_dim: the number of model dimension\n\n            * Encoder Block Parameters (embedding, modeling)\n              kernel_size: convolution kernel size in encoder block\n              num_head: the number of multi-head attention's head\n              num_conv_block: the number of convolution block in encoder block\n                  [Layernorm -> Conv (residual)]\n              num_encoder_block: the number of the encoder block\n                  [position_encoding -> [n repeat conv block] -> Layernorm -> Self-attention (residual)\n                   -> Layernorm -> Feedforward (residual)]\n\n            dropout: the dropout probability\n            layer_dropout: the layer dropout probability\n                (cf. Deep Networks with Stochastic Depth(https://arxiv.org/abs/1603.09382) )\n    \"\"\"\n\n    def __init__(\n        self,\n        token_embedder,\n        lang_code=\"en\",\n        aligned_query_embedding=False,\n        answer_maxlen=None,\n        model_dim=128,\n        kernel_size_in_embedding=7,\n        num_head_in_embedding=8,\n        num_conv_block_in_embedding=4,\n        num_embedding_encoder_block=1,\n        kernel_size_in_modeling=5,\n        num_head_in_modeling=8,\n        num_conv_block_in_modeling=2,\n        num_modeling_encoder_block=7,\n        dropout=0.1,\n        layer_dropout=0.9,\n    ):\n        super(QANet, self).__init__(token_embedder)\n\n        self.lang_code = lang_code\n        self.aligned_query_embedding = aligned_query_embedding\n        self.answer_maxlen = answer_maxlen\n        self.token_embedder = token_embedder\n\n        context_embed_dim, query_embed_dim = token_embedder.get_embed_dim()\n\n        if self.aligned_query_embedding:\n            context_embed_dim += query_embed_dim\n\n        if context_embed_dim != query_embed_dim:\n            self.context_highway = layer.Highway(context_embed_dim)\n            self.query_highway = layer.Highway(query_embed_dim)\n\n            self.context_embed_pointwise_conv = conv.PointwiseConv(context_embed_dim, model_dim)\n            self.query_embed_pointwise_conv = conv.PointwiseConv(query_embed_dim, model_dim)\n        else:\n            highway = layer.Highway(context_embed_dim)\n\n            self.context_highway = highway\n            self.query_highway = highway\n\n            embed_pointwise_conv = conv.PointwiseConv(context_embed_dim, model_dim)\n\n            self.context_embed_pointwise_conv = embed_pointwise_conv\n            self.query_embed_pointwise_conv = embed_pointwise_conv\n\n        self.embed_encoder_blocks = nn.ModuleList(\n            [\n                EncoderBlock(\n                    model_dim=model_dim,\n                    kernel_size=kernel_size_in_embedding,\n                    num_head=num_head_in_embedding,\n                    num_conv_block=num_conv_block_in_modeling,\n                    dropout=dropout,\n                    layer_dropout=layer_dropout,\n                )\n                for _ in range(num_embedding_encoder_block)\n            ]\n        )\n\n        self.co_attention = attention.CoAttention(model_dim)\n\n        self.pointwise_conv = conv.PointwiseConv(model_dim * 4, model_dim)\n        self.model_encoder_blocks = nn.ModuleList(\n            [\n                EncoderBlock(\n                    model_dim=model_dim,\n                    kernel_size=kernel_size_in_modeling,\n                    num_head=num_head_in_modeling,\n                    num_conv_block=num_conv_block_in_modeling,\n                    dropout=dropout,\n                    layer_dropout=layer_dropout,\n                )\n                for _ in range(num_modeling_encoder_block)\n            ]\n        )\n\n        self.span_start_linear = nn.Linear(model_dim * 2, 1, bias=False)\n        self.span_end_linear = nn.Linear(model_dim * 2, 1, bias=False)\n\n        self.dropout = nn.Dropout(p=dropout)\n\n        self.criterion = nn.CrossEntropyLoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n            * Args:\n                features: feature dictionary like below.\n                    {\"feature_name1\": {\n                         \"token_name1\": tensor,\n                         \"toekn_name2\": tensor},\n                     \"feature_name2\": ...}\n\n            * Kwargs:\n                label: label dictionary like below.\n                    {\"label_name1\": tensor,\n                     \"label_name2\": tensor}\n                     Do not calculate loss when there is no label. (inference/predict mode)\n\n            * Returns: output_dict (dict) consisting of\n                - start_logits: representing unnormalized log probabilities of the span start position.\n                - end_logits: representing unnormalized log probabilities of the span end position.\n                - best_span: the string from the original passage that the model thinks is the best answer to the question.\n                - data_idx: the question id, mapping with answer\n                - loss: A scalar loss to be optimised.\n        \"\"\"\n\n        context = features[\"context\"]\n        question = features[\"question\"]\n\n        # 1. Input Embedding Layer\n        query_params = {\"frequent_word\": {\"frequent_tuning\": True}}\n        context_embed, query_embed = self.token_embedder(\n            context, question, query_params=query_params, query_align=self.aligned_query_embedding\n        )\n\n        context_mask = f.get_mask_from_tokens(context).float()\n        query_mask = f.get_mask_from_tokens(question).float()\n\n        context_embed = self.context_highway(context_embed)\n        context_embed = self.dropout(context_embed)\n        context_embed = self.context_embed_pointwise_conv(context_embed)\n\n        query_embed = self.query_highway(query_embed)\n        query_embed = self.dropout(query_embed)\n        query_embed = self.query_embed_pointwise_conv(query_embed)\n\n        # 2. Embedding Encoder Layer\n        for encoder_block in self.embed_encoder_blocks:\n            context = encoder_block(context_embed)\n            context_embed = context\n\n            query = encoder_block(query_embed)\n            query_embed = query\n\n        # 3. Context-Query Attention Layer\n        context_query_attention = self.co_attention(context, query, context_mask, query_mask)\n\n        # Projection (memory issue)\n        context_query_attention = self.pointwise_conv(context_query_attention)\n        context_query_attention = self.dropout(context_query_attention)\n\n        # 4. Model Encoder Layer\n        model_encoder_block_inputs = context_query_attention\n\n        # Stacked Model Encoder Block\n        stacked_model_encoder_blocks = []\n        for i in range(3):\n            for _, model_encoder_block in enumerate(self.model_encoder_blocks):\n                output = model_encoder_block(model_encoder_block_inputs, context_mask)\n                model_encoder_block_inputs = output\n\n            stacked_model_encoder_blocks.append(output)\n\n        # 5. Output Layer\n        span_start_inputs = torch.cat(\n            [stacked_model_encoder_blocks[0], stacked_model_encoder_blocks[1]], dim=-1\n        )\n        span_start_inputs = self.dropout(span_start_inputs)\n        span_start_logits = self.span_start_linear(span_start_inputs).squeeze(-1)\n\n        span_end_inputs = torch.cat(\n            [stacked_model_encoder_blocks[0], stacked_model_encoder_blocks[2]], dim=-1\n        )\n        span_end_inputs = self.dropout(span_end_inputs)\n        span_end_logits = self.span_end_linear(span_end_inputs).squeeze(-1)\n\n        # Masked Value\n        span_start_logits = f.add_masked_value(span_start_logits, context_mask, value=-1e7)\n        span_end_logits = f.add_masked_value(span_end_logits, context_mask, value=-1e7)\n\n        output_dict = {\n            \"start_logits\": span_start_logits,\n            \"end_logits\": span_end_logits,\n            \"best_span\": self.get_best_span(span_start_logits, span_end_logits),\n        }\n\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            answer_start_idx = labels[\"answer_start_idx\"]\n            answer_end_idx = labels[\"answer_end_idx\"]\n\n            output_dict[\"data_idx\"] = data_idx\n\n            # Loss\n            loss = self.criterion(span_start_logits, answer_start_idx)\n            loss += self.criterion(span_end_logits, answer_end_idx)\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n\n\nclass EncoderBlock(nn.Module):\n    \"\"\"\n        Encoder Block\n\n        []: residual\n        position_encoding -> [convolution-layer] x # -> [self-attention-layer] -> [feed-forward-layer]\n\n        - convolution-layer: depthwise separable convolutions\n        - self-attention-layer: multi-head attention\n        - feed-forward-layer: pointwise convolution\n\n        * Args:\n            model_dim: the number of model dimension\n            num_heads: the number of head in multi-head attention\n            kernel_size: convolution kernel size\n            num_conv_block: the number of convolution block\n            dropout: the dropout probability\n            layer_dropout: the layer dropout probability\n                (cf. Deep Networks with Stochastic Depth(https://arxiv.org/abs/1603.09382) )\n    \"\"\"\n\n    def __init__(\n        self,\n        model_dim=128,\n        num_head=8,\n        kernel_size=5,\n        num_conv_block=4,\n        dropout=0.1,\n        layer_dropout=0.9,\n    ):\n        super(EncoderBlock, self).__init__()\n\n        self.position_encoding = encoder.PositionalEncoding(model_dim)\n        self.dropout = nn.Dropout(dropout)\n\n        self.num_conv_block = num_conv_block\n        self.conv_blocks = nn.ModuleList(\n            [conv.DepSepConv(model_dim, model_dim, kernel_size) for _ in range(num_conv_block)]\n        )\n\n        self.self_attention = attention.MultiHeadAttention(\n            num_head=num_head, model_dim=model_dim, dropout=dropout\n        )\n        self.feedforward_layer = layer.PositionwiseFeedForward(\n            model_dim, model_dim * 4, dropout=dropout\n        )\n\n        # survival probability for stochastic depth\n        if layer_dropout < 1.0:\n            L = (num_conv_block) + 2 - 1\n            layer_dropout_prob = round(1 - (1 / L) * (1 - layer_dropout), 3)\n            self.residuals = nn.ModuleList(\n                layer.ResidualConnection(\n                    model_dim, layer_dropout=layer_dropout_prob, layernorm=True\n                )\n                for l in range(num_conv_block + 2)\n            )\n        else:\n            self.residuals = nn.ModuleList(\n                layer.ResidualConnection(model_dim, layernorm=True)\n                for l in range(num_conv_block + 2)\n            )\n\n    def forward(self, x, mask=None):\n        # Positional Encoding\n        x = self.position_encoding(x)\n\n        # Convolution Block (LayerNorm -> Conv)\n        for i, conv_block in enumerate(self.conv_blocks):\n            x = self.residuals[i](x, sub_layer_fn=conv_block)\n            x = self.dropout(x)\n\n        # LayerNorm -> Self-attention\n        self_attention = lambda x: self.self_attention(q=x, k=x, v=x, mask=mask)\n        x = self.residuals[self.num_conv_block](x, sub_layer_fn=self_attention)\n        x = self.dropout(x)\n\n        # LayerNorm -> Feedforward layer\n        x = self.residuals[self.num_conv_block + 1](x, sub_layer_fn=self.feedforward_layer)\n        x = self.dropout(x)\n        return x\n"
  },
  {
    "path": "claf/model/reading_comprehension/roberta.py",
    "content": "\nfrom overrides import overrides\nfrom transformers import RobertaModel\nimport torch.nn as nn\n\nfrom claf.data.data_handler import CachePath\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithoutTokenEmbedder\nfrom claf.model.reading_comprehension.mixin import SQuADv1ForBert\n\n\n@register(\"model:roberta_for_qa\")\nclass RoBertaForQA(SQuADv1ForBert, ModelWithoutTokenEmbedder):\n    \"\"\"\n    Document Reader Model. `Span Detector`\n\n    Implementation of model presented in\n    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n    (https://arxiv.org/abs/1810.04805)\n\n    * Args:\n        token_embedder: 'QATokenEmbedder', Used to embed the 'context' and 'question'.\n\n    * Kwargs:\n        lang_code: Dataset language code [en|ko]\n        pretrained_model_name: the name of a pre-trained model\n        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\n    \"\"\"\n\n    def __init__(self, token_makers, lang_code=\"en\", pretrained_model_name=None, answer_maxlen=30):\n        super(RoBertaForQA, self).__init__(token_makers)\n\n        self.lang_code = lang_code\n        self.use_transformers = True  # for optimizer's model parameters\n        self.answer_maxlen = answer_maxlen\n\n        self.model = RobertaModel.from_pretrained(\n            pretrained_model_name, cache_dir=str(CachePath.ROOT)\n        )\n        self.qa_outputs = nn.Linear(self.model.config.hidden_size, self.model.config.num_labels)\n        self.criterion = nn.CrossEntropyLoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n                {\"feature_name1\": {\n                     \"token_name1\": tensor,\n                     \"toekn_name2\": tensor},\n                 \"feature_name2\": ...}\n\n        * Kwargs:\n            label: label dictionary like below.\n                {\"label_name1\": tensor,\n                 \"label_name2\": tensor}\n                 Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - start_logits: representing unnormalized log probabilities of the span start position.\n            - end_logits: representing unnormalized log probabilities of the span end position.\n            - best_span: the string from the original passage that the model thinks is the best answer to the question.\n            - data_idx: the question id, mapping with answer\n            - loss: A scalar loss to be optimised.\n        \"\"\"\n\n        bert_inputs = features[\"bert_input\"][\"feature\"]\n        attention_mask = (bert_inputs > 0).long()\n\n        outputs = self.model(\n            bert_inputs, token_type_ids=None, attention_mask=attention_mask\n        )\n        sequence_output = outputs[0]\n\n        logits = self.qa_outputs(sequence_output)\n        span_start_logits, span_end_logits = logits.split(1, dim=-1)\n\n        span_start_logits = span_start_logits.squeeze(-1)\n        span_end_logits = span_end_logits.squeeze(-1)\n\n        output_dict = {\n            \"start_logits\": span_start_logits,\n            \"end_logits\": span_end_logits,\n            \"best_span\": self.get_best_span(\n                span_start_logits, span_end_logits, answer_maxlen=self.answer_maxlen\n            ),\n        }\n\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            answer_start_idx = labels[\"answer_start_idx\"]\n            answer_end_idx = labels[\"answer_end_idx\"]\n\n            output_dict[\"data_idx\"] = data_idx\n\n            # If we are on multi-GPU, split add a dimension\n            if len(answer_start_idx.size()) > 1:\n                answer_start_idx = answer_start_idx.squeeze(-1)\n            if len(answer_end_idx.size()) > 1:\n                answer_end_idx = answer_end_idx.squeeze(-1)\n            # sometimes the start/end positions are outside our model inputs, we ignore these terms\n            ignored_index = span_start_logits.size(1)\n\n            answer_start_idx.clamp_(0, ignored_index)\n            answer_end_idx.clamp_(0, ignored_index)\n\n            # Loss\n            criterion = nn.CrossEntropyLoss(ignore_index=ignored_index)\n            loss = criterion(span_start_logits, answer_start_idx)\n            loss += criterion(span_end_logits, answer_end_idx)\n            loss /= 2  # (start + end)\n            output_dict[\"loss\"] = loss\n\n        return output_dict\n"
  },
  {
    "path": "claf/model/regression/__init__.py",
    "content": "\nfrom claf.model.regression.bert import BertForRegression\nfrom claf.model.regression.roberta import RobertaForRegression\n\n# fmt: off\n\n__all__ = [\n    \"BertForRegression\", \"RobertaForRegression\"\n]\n\n# fmt: on\n"
  },
  {
    "path": "claf/model/regression/bert.py",
    "content": "\nfrom overrides import overrides\nimport torch.nn as nn\nfrom transformers import BertForSequenceClassification\n\nfrom claf.data.data_handler import CachePath\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithoutTokenEmbedder\nfrom claf.model.regression.mixin import Regression\n\n\n@register(\"model:bert_for_reg\")\nclass BertForRegression(Regression, ModelWithoutTokenEmbedder):\n    \"\"\"\n    Implementation of Single Sentence Classification model presented in\n    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n    (https://arxiv.org/abs/1810.04805)\n\n    * Args:\n        token_makers: used to convert the sequence to feature\n\n    * Kwargs:\n        pretrained_model_name: the name of a pre-trained model\n        dropout: classification layer dropout\n    \"\"\"\n\n    def __init__(self, token_makers, pretrained_model_name=None, dropout=0.2):\n\n        super(BertForRegression, self).__init__(token_makers)\n\n        self.use_transformers = True  # for optimizer's model parameters\n        NUM_CLASSES = 1\n\n        self.model = BertForSequenceClassification.from_pretrained(\n            pretrained_model_name, cache_dir=str(CachePath.ROOT), num_labels=NUM_CLASSES,\n        )\n        self.criterion = nn.MSELoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n            {\n                \"bert_input\": {\n                    \"feature\": [\n                        [3, 4, 1, 0, 0, 0, ...],\n                        ...,\n                    ]\n                },\n                \"token_type\": {\n                    \"feature\": [\n                        [0, 0, 0, 0, 0, 0, ...],\n                        ...,\n                    ],\n                }\n            }\n\n        * Kwargs:\n            label: label dictionary like below.\n            {\n                \"score\": [2, 1, 0, 4, 5, ...]\n                \"data_idx\": [2, 4, 5, 7, 2, 1, ...]\n            }\n            Do not calculate loss when there is no labels. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - sequence_embed: embedding vector of the sequence\n            - logits: model's score\n\n            - data_idx: data idx\n            - score: target score\n            - loss: a scalar loss to be optimized\n        \"\"\"\n\n        bert_inputs = features[\"bert_input\"][\"feature\"]\n        token_type_ids = features[\"token_type\"][\"feature\"]\n        attention_mask = (bert_inputs > 0).long()\n\n        outputs = self._model(\n            bert_inputs, token_type_ids=token_type_ids, attention_mask=attention_mask\n        )\n        pooled_output = outputs[1]\n        logits = self.classifier(pooled_output)\n\n        output_dict = {\"sequence_embed\": pooled_output, \"logits\": logits}\n\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            score = labels[\"score\"]\n\n            output_dict[\"data_idx\"] = data_idx\n            output_dict[\"score\"] = score\n\n            # Loss\n            loss = self.criterion(logits.view(-1, 1), score.view(-1, 1).float())\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n\n    @overrides\n    def print_examples(self, index, inputs, predictions):\n        \"\"\"\n        Print evaluation examples\n\n        * Args:\n            index: data index\n            inputs: mini-batch inputs\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n\n        * Returns:\n            print(Sequence, Sequence Tokens, Target Class, Predicted Class)\n        \"\"\"\n\n        data_idx = inputs[\"labels\"][\"data_idx\"][index].item()\n        data_id = self._dataset.get_id(data_idx)\n\n        helper = self._dataset.helper\n\n        sequence_a = helper[\"examples\"][data_id][\"sequence_a\"]\n        sequence_a_tokens = helper[\"examples\"][data_id][\"sequence_a_tokens\"]\n        sequence_b = helper[\"examples\"][data_id][\"sequence_b\"]\n        sequence_b_tokens = helper[\"examples\"][data_id][\"sequence_b_tokens\"]\n\n        target_score = helper[\"examples\"][data_id][\"score\"]\n        pred_score = predictions[data_id][\"score\"]\n\n        print()\n        print(\"- Sequence a:\", sequence_a)\n        print(\"- Sequence a Tokens:\", sequence_a_tokens)\n        if sequence_b:\n            print(\"- Sequence b:\", sequence_b)\n            print(\"- Sequence b Tokens:\", sequence_b_tokens)\n        print(\"- Target:\")\n        print(\"    Score:\", target_score)\n        print(\"- Predict:\")\n        print(\"    Score:\", pred_score)\n        print()\n"
  },
  {
    "path": "claf/model/regression/mixin.py",
    "content": "\nimport logging\n\nfrom claf.metric.glue import pearson_and_spearman\nfrom claf.metric.regression import mse\nfrom claf.model.base import ModelBase\n\nlogger = logging.getLogger(__name__)\n\n\nclass Regression:\n    \"\"\" Regression Mixin Class \"\"\"\n\n    def make_predictions(self, output_dict):\n        \"\"\"\n        Make predictions with model's output_dict\n\n        * Args:\n            output_dict: model's output dictionary consisting of\n                - sequence_embed: embedding vector of the sequence\n                - class_logits: representing unnormalized log probabilities of the class\n\n                - class_idx: target class idx\n                - data_idx: data idx\n                - loss: a scalar loss to be optimized\n\n        * Returns:\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - score\n        \"\"\"\n\n        data_indices = output_dict[\"data_idx\"]\n        pred_logits = output_dict[\"logits\"]\n\n        predictions = {\n            self._dataset.get_id(data_idx.item()): {\"score\": pred_score.item()}\n            for data_idx, pred_score in zip(list(data_indices.data), list(pred_logits.data))\n        }\n\n        return predictions\n\n    def predict(self, output_dict, arguments, helper):\n        \"\"\"\n        Inference by raw_feature\n\n        * Args:\n            output_dict: model's output dictionary consisting of\n                - sequence_embed: embedding vector of the sequence\n                - logits: model's score\n            arguments: arguments dictionary consisting of user_input\n            helper: dictionary to get the classification result, consisting of\n                 -\n\n        * Returns: output dict (dict) consisting of\n            - score: model's score\n        \"\"\"\n\n        score = output_dict[\"logits\"]\n\n        return {\n            \"score\": score,\n        }\n\n    def make_metrics(self, predictions):\n        \"\"\"\n        Make metrics with prediction dictionary\n\n        * Args:\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n\n        * Returns:\n            metrics: metric dictionary consisting of\n                - 'mse': Mean Squard Error\n                - 'pearson': Pearson correlation coefficient\n                - 'spearmanr': Spearman correlation coefficient\n                - 'pearson_spearman_corr': (pearson_corr + spearman_corr) / 2,\n        \"\"\"\n\n        pred_scores = []\n        target_scores = []\n\n        preds = {}\n        for data_id, pred in predictions.items():\n            target = self._dataset.get_ground_truth(data_id)\n            preds[data_id] = pred[\"score\"]\n\n            pred_scores.append(pred[\"score\"])\n            target_scores.append(target[\"score\"])\n\n        self.write_predictions(preds)\n        metrics = {\"mse\": mse(pred_scores, target_scores) / len(target_scores)}\n\n        pearson_spearman_metrics = pearson_and_spearman(pred_scores, target_scores)\n        metrics.update(pearson_spearman_metrics)\n\n        return metrics\n\n    def write_predictions(self, predictions, ):\n        try:\n            super(Regression, self).write_predictions(predictions)\n        except AttributeError:\n            # TODO: Need to Fix\n            model_base = ModelBase()\n            model_base._log_dir = self._log_dir\n            model_base._train_counter = self._train_counter\n            model_base.training = self.training\n            model_base.write_predictions(predictions)\n\n\n    def print_examples(self, index, inputs, predictions):\n        \"\"\"\n        Print evaluation examples\n\n        * Args:\n            index: data index\n            inputs: mini-batch inputs\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n\n        * Returns:\n            print(Sequence, Target Class, Predicted Class)\n        \"\"\"\n\n        data_idx = inputs[\"labels\"][\"data_idx\"][index].item()\n        data_id = self._dataset.get_id(data_idx)\n\n        helper = self._dataset.helper\n        sequence = helper[\"examples\"][data_id][\"sequence\"]\n\n        target_score = helper[\"examples\"][data_id][\"score\"]\n        pred_score = predictions[data_id][\"score\"]\n\n        print()\n        print(\"- Sequence:\", sequence)\n        print(\"- Target:\")\n        print(\"    Score:\", target_score)\n        print(\"- Predict:\")\n        print(\"    Score:\", pred_score)\n        print()\n"
  },
  {
    "path": "claf/model/regression/roberta.py",
    "content": "\nfrom overrides import overrides\nfrom transformers import RobertaForSequenceClassification\nimport torch.nn as nn\n\nfrom claf.data.data_handler import CachePath\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithoutTokenEmbedder\nfrom claf.model.regression.mixin import Regression\n\n\n@register(\"model:roberta_for_reg\")\nclass RobertaForRegression(Regression, ModelWithoutTokenEmbedder):\n    \"\"\"\n    Implementation of Sentence Regression model presented in\n    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n    (https://arxiv.org/abs/1810.04805)\n\n    * Args:\n        token_makers: used to convert the sequence to feature\n\n    * Kwargs:\n        pretrained_model_name: the name of a pre-trained model\n        dropout: classification layer dropout\n    \"\"\"\n\n    def __init__(self, token_makers, pretrained_model_name=None, dropout=0.2):\n\n        super(RobertaForRegression, self).__init__(token_makers)\n\n        self.use_transformers = True  # for optimizer's model parameters\n        NUM_CLASSES = 1\n\n        self.model = RobertaForSequenceClassification.from_pretrained(\n            pretrained_model_name, cache_dir=str(CachePath.ROOT), num_labels=NUM_CLASSES,\n        )\n        self.criterion = nn.MSELoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n            {\n                \"bert_input\": {\n                    \"feature\": [\n                        [3, 4, 1, 0, 0, 0, ...],\n                        ...,\n                    ]\n                },\n            }\n\n        * Kwargs:\n            label: label dictionary like below.\n            {\n                \"score\": [2, 1, 0, 4, 5, ...]\n                \"data_idx\": [2, 4, 5, 7, 2, 1, ...]\n            }\n            Do not calculate loss when there is no labels. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - sequence_embed: embedding vector of the sequence\n            - logits: model's score\n\n            - data_idx: data idx\n            - score: target score\n            - loss: a scalar loss to be optimized\n        \"\"\"\n\n        bert_inputs = features[\"bert_input\"][\"feature\"]\n        attention_mask = (bert_inputs > 0).long()\n\n        outputs = self.model(\n            bert_inputs, token_type_ids=None, attention_mask=attention_mask\n        )\n        logits = outputs[0]\n\n        output_dict = {\"logits\": logits}\n\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            score = labels[\"score\"]\n\n            output_dict[\"data_idx\"] = data_idx\n            output_dict[\"score\"] = score\n\n            # Loss\n            loss = self.criterion(logits.view(-1, 1), score.view(-1, 1).float())\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n\n    @overrides\n    def print_examples(self, index, inputs, predictions):\n        \"\"\"\n        Print evaluation examples\n\n        * Args:\n            index: data index\n            inputs: mini-batch inputs\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n\n        * Returns:\n            print(Sequence, Sequence Tokens, Target Class, Predicted Class)\n        \"\"\"\n\n        data_idx = inputs[\"labels\"][\"data_idx\"][index].item()\n        data_id = self._dataset.get_id(data_idx)\n\n        helper = self._dataset.helper\n\n        sequence_a = helper[\"examples\"][data_id][\"sequence_a\"]\n        sequence_a_tokens = helper[\"examples\"][data_id][\"sequence_a_tokens\"]\n        sequence_b = helper[\"examples\"][data_id][\"sequence_b\"]\n        sequence_b_tokens = helper[\"examples\"][data_id][\"sequence_b_tokens\"]\n\n        target_score = helper[\"examples\"][data_id][\"score\"]\n        pred_score = predictions[data_id][\"score\"]\n\n        print()\n        print(\"- Sequence a:\", sequence_a)\n        print(\"- Sequence a Tokens:\", sequence_a_tokens)\n        if sequence_b:\n            print(\"- Sequence b:\", sequence_b)\n            print(\"- Sequence b Tokens:\", sequence_b_tokens)\n        print(\"- Target:\")\n        print(\"    Score:\", target_score)\n        print(\"- Predict:\")\n        print(\"    Score:\", pred_score)\n        print()\n"
  },
  {
    "path": "claf/model/semantic_parsing/__init__.py",
    "content": "\n\nfrom claf.model.semantic_parsing.sqlnet import SQLNet\n\n# fmt: off\n\n__all__ = [\n    \"SQLNet\"\n]\n\n# fmt: on\n"
  },
  {
    "path": "claf/model/semantic_parsing/mixin.py",
    "content": "\nimport torch\n\nfrom claf.decorator import arguments_required\nfrom claf.metric import wikisql_official\nfrom claf.metric.wikisql_lib.dbengine import DBEngine\nfrom claf.metric.wikisql_lib.query import Query\n\n\nclass WikiSQL:\n    \"\"\"\n    WikiSQL Mixin Class\n        with official evaluation\n\n    * Args:\n        token_embedder: 'TokenEmbedder'\n    \"\"\"\n\n    AGG_OPS = [\"None\", \"MAX\", \"MIN\", \"COUNT\", \"SUM\", \"AVG\"]\n    COND_OPS = [\"EQL\", \"GT\", \"LT\"]\n\n    def make_metrics(self, predictions):\n        \"\"\" aggregator, select_column, conditions accuracy \"\"\"\n\n        agg_accuracy, sel_accuracy, conds_accuracy = 0, 0, 0\n\n        for index, pred in predictions.items():\n            target = self._dataset.get_ground_truth(index)\n\n            # Aggregator, Select_Column, Conditions\n            agg_acc = 1 if pred[\"query\"][\"agg\"] == target[\"agg_idx\"] else 0\n            sel_acc = 1 if pred[\"query\"][\"sel\"] == target[\"sel_idx\"] else 0\n\n            pred_conds = pred[\"query\"][\"conds\"]\n            string_set_pred_conds = set([\"#\".join(map(str, cond)).lower() for cond in pred_conds])\n            target_conds = [\n                [target[\"conds_col\"][i], target[\"conds_op\"][i], target[\"conds_val_str\"][i]]\n                for i in range(target[\"conds_num\"])\n            ]\n            string_set_target_conds = set(\n                [\"#\".join(map(str, cond)).lower() for cond in target_conds]\n            )\n\n            conds_acc = (\n                1 if string_set_pred_conds == string_set_target_conds else 0\n            )  # not matter in order\n\n            agg_accuracy += agg_acc\n            sel_accuracy += sel_acc\n            conds_accuracy += conds_acc\n\n        total_count = len(self._dataset)\n\n        agg_accuracy = 100.0 * agg_accuracy / total_count\n        sel_accuracy = 100.0 * sel_accuracy / total_count\n        conds_accuracy = 100.0 * conds_accuracy / total_count\n\n        metrics = {\n            \"agg_accuracy\": agg_accuracy,\n            \"sel_accuracy\": sel_accuracy,\n            \"conds_accuracy\": conds_accuracy,\n        }\n\n        self.write_predictions(predictions)\n\n        wikisql_official_metrics = self._make_metrics_with_official(predictions)\n        metrics.update(wikisql_official_metrics)\n        return metrics\n\n    def _make_metrics_with_official(self, preds):\n        \"\"\"\n        WikiSQL official evaluation\n\n        lf_accuracy: Logical-form accuracy\n          - Directly compare the synthesized SQL query with the ground truth to\n            check whether they match each other.\n        ex_accuracy: Execution accuracy\n          - Execute both the synthesized query and the ground truth query and\n            compare whether the results match to each other.\n        \"\"\"\n\n        labels = self._dataset.labels\n        db_path = self._dataset.helper[\"db_path\"]\n\n        return wikisql_official.evaluate(labels, preds, db_path)\n\n    def make_predictions(self, output_dict):\n        predictions = {}\n        sql_quries = self.generate_queries(output_dict)\n\n        for i in range(len(sql_quries)):\n            query = sql_quries[i]\n\n            prediction = {}\n            prediction.update(query)\n\n            data_id = self._dataset.get_id(output_dict[\"data_id\"][i])\n            predictions[data_id] = prediction\n        return predictions\n\n    def generate_queries(self, output_dict):\n        preds_agg = torch.argmax(output_dict[\"agg_logits\"], dim=-1)\n        preds_sel = torch.argmax(output_dict[\"sel_logits\"], dim=-1)\n\n        conds_logits = output_dict[\"conds_logits\"]\n        conds_num_logits, conds_column_logits, conds_op_logits, conds_value_logits = conds_logits\n\n        preds_conds_num = torch.argmax(conds_num_logits, dim=-1)\n        preds_conds_op = torch.argmax(conds_op_logits, dim=-1)\n\n        sql_quries = []\n        B = output_dict[\"agg_logits\"].size(0)\n\n        for i in range(B):\n            if \"table_id\" in output_dict:\n                table_id = output_dict[\"table_id\"]\n            else:\n                table_id = self._dataset.get_table_id(output_dict[\"data_id\"][i])\n\n            query = {\n                \"table_id\": table_id,\n                \"query\": {\"agg\": preds_agg[i].item(), \"sel\": preds_sel[i].item()},\n            }\n\n            pred_conds_num = preds_conds_num[i].item()\n            conds_pred = []\n            if pred_conds_num == 0:\n                pass\n            else:\n                _, pred_conds_column_idx = torch.topk(conds_column_logits[i], pred_conds_num)\n\n                if preds_conds_op.dim() == 1:  # for one-example (TODO: fix hard-code)\n                    pred_conds_op = preds_conds_op\n                    conds_value_logits = conds_value_logits.squeeze(3)\n                    conds_value_logits = conds_value_logits.squeeze(0)\n                else:\n                    pred_conds_op = preds_conds_op[i]\n\n                if \"tokenized_question\" in output_dict:\n                    tokenized_question = output_dict[\"tokenized_question\"]\n                else:\n                    tokenized_question = self._dataset.get_tokenized_question(\n                        output_dict[\"data_id\"][i]\n                    )\n\n                conds_pred = [\n                    [\n                        pred_conds_column_idx[j].item(),\n                        pred_conds_op[j].item(),\n                        self.decode_pointer(tokenized_question, conds_value_logits[i][j]),\n                    ]\n                    for j in range(pred_conds_num)\n                ]\n\n            query[\"query\"][\"conds\"] = conds_pred\n            sql_quries.append(query)\n        return sql_quries\n\n    def decode_pointer(self, tokenized_question, cond_value_logits):\n        question_text = \" \".join(tokenized_question)\n        tokenized_question = [\"<BEG>\"] + tokenized_question + [\"<END>\"]\n\n        conds_value = []\n        for value_logit in cond_value_logits:\n            pred_value_pos = torch.argmax(value_logit[: len(tokenized_question)]).item()\n            pred_value_token = tokenized_question[pred_value_pos]\n            if pred_value_token == \"<END>\":\n                break\n            conds_value.append(pred_value_token)\n\n        conds_value = self.merge_tokens(conds_value, question_text)\n        return conds_value\n\n    def merge_tokens(self, tok_list, raw_tok_str):\n        lower_tok_str = raw_tok_str.lower()\n        alphabet = set(\"abcdefghijklmnopqrstuvwxyz0123456789$(\")\n        special = {\n            \"-LRB-\": \"(\",\n            \"-RRB-\": \")\",\n            \"-LSB-\": \"[\",\n            \"-RSB-\": \"]\",\n            \"``\": '\"',\n            \"''\": '\"',\n            \"--\": \"\\u2013\",\n        }\n        ret = \"\"\n        double_quote_appear = 0\n        for raw_tok in tok_list:\n            if not raw_tok:\n                continue\n            tok = special.get(raw_tok, raw_tok)\n            lower_tok = tok.lower()\n            if tok == '\"':\n                double_quote_appear = 1 - double_quote_appear\n\n            if len(ret) == 0:\n                pass\n            elif len(ret) > 0 and ret + \" \" + lower_tok in lower_tok_str:\n                ret = ret + \" \"\n            elif len(ret) > 0 and ret + lower_tok in lower_tok_str:\n                pass\n            elif lower_tok == '\"':\n                if double_quote_appear:\n                    ret = ret + \" \"\n            elif lower_tok[0] not in alphabet:\n                pass\n            elif (ret[-1] not in [\"(\", \"/\", \"\\u2013\", \"#\", \"$\", \"&\"]) and (\n                ret[-1] != '\"' or not double_quote_appear\n            ):\n                ret = ret + \" \"\n            ret = ret + tok\n        return ret.strip()\n\n    @arguments_required([\"db_path\", \"table_id\"])\n    def predict(self, output_dict, arguments, helper):\n        \"\"\"\n        Inference by raw_feature\n\n        * Args:\n            output_dict: model's output dictionary consisting of\n            arguments: arguments dictionary consisting of user_input\n            helper: dictionary for helping get answer\n\n        * Returns:\n            query: Generated SQL Query\n            execute_result: Execute result by generated query\n        \"\"\"\n        output_dict[\"table_id\"] = arguments[\"table_id\"]\n        output_dict[\"tokenized_question\"] = helper[\"tokenized_question\"]\n\n        prediction = self.generate_queries(output_dict)[0]\n        pred_query = Query.from_dict(prediction[\"query\"], ordered=True)\n\n        dbengine = DBEngine(arguments[\"db_path\"])\n        try:\n            pred_execute_result = dbengine.execute_query(\n                prediction[\"table_id\"], pred_query, lower=True\n            )\n        except IndexError as e:\n            pred_execute_result = str(e)\n\n        return {\"query\": str(pred_query), \"execute_result\": pred_execute_result}\n\n    def print_examples(self, index, inputs, predictions):\n        \"\"\"\n        Print evaluation examples\n\n        * Args:\n            index: data index\n            inputs: mini-batch inputs\n            predictions: prediction dictionary consisting of\n                - key: 'id' (question id)\n                - value: consisting of dictionary\n                    table_id, query (agg, sel, conds)\n\n        * Returns:\n            print(Context, Question, Answers and Predict)\n        \"\"\"\n\n        data_index = inputs[\"labels\"][\"data_idx\"][index].item()\n        data_id = self._dataset.get_id(data_index)\n\n        helper = self._dataset.helper\n        question = helper[\"examples\"][data_id][\"question\"]\n\n        label = self._dataset.get_ground_truth(data_id)\n\n        dbengine = DBEngine(helper[\"db_path\"])\n\n        prediction = predictions[data_id]\n        pred_query = Query.from_dict(prediction[\"query\"], ordered=True)\n        pred_execute_result = dbengine.execute_query(prediction[\"table_id\"], pred_query, lower=True)\n\n        print(\"- Question:\", question)\n        print(\"- Answers:\")\n        print(\"    SQL Query: \", label[\"sql_query\"])\n        print(\"    Execute Results:\", label[\"execution_result\"])\n        print(\"- Predict:\")\n        print(\"    SQL Query: \", pred_query)\n        print(\"    Execute Results:\", pred_execute_result)\n        print(\"-\" * 30)\n"
  },
  {
    "path": "claf/model/semantic_parsing/sqlnet.py",
    "content": "\nfrom overrides import overrides\n\nimport numpy as np\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithTokenEmbedder\nfrom claf.model.semantic_parsing import utils\nfrom claf.model.semantic_parsing.mixin import WikiSQL\nimport claf.modules.functional as f\nimport claf.modules.attention as attention\n\n\n@register(\"model:sqlnet\")\nclass SQLNet(WikiSQL, ModelWithTokenEmbedder):\n    \"\"\"\n    Nature Language to SQL Query Model. `Semantic Parsing`, `NL2SQL`\n\n    Implementation of model presented in\n    SQLNet: Generating Structured Queries From Natural Language\n      Without Reinforcement Learning\n    (https://arxiv.org/abs/1711.04436)\n\n    * Args:\n        token_embedder: 'WikiSQLTokenEmbedder', Used to embed the 'column' and 'question'.\n\n    * Kwargs:\n        column_attention: highlight that column attention is a special instance of\n          the generic attention mechanism to compute the attention map on a question\n          conditioned on the column names.\n        model_dim: the number of model dimension\n        rnn_num_layer: the number of recurrent layers (all of rnn)\n        column_maxlen: an upper-bound N on the number of columns to choose\n        token_maxlen: conds value slot - pointer network an upper-bound N on the number of token\n        conds_column_loss_alpha: balance the positive data versus negative data\n    \"\"\"\n\n    def __init__(\n        self,\n        token_embedder,\n        column_attention=None,\n        model_dim=100,\n        rnn_num_layer=2,\n        dropout=0.3,\n        column_maxlen=4,\n        token_maxlen=200,\n        conds_column_loss_alpha=3,\n    ):\n        super(SQLNet, self).__init__(token_embedder)\n\n        embed_dim = token_embedder.get_embed_dim()  # NOTE: need to fix\n        self.token_maxlen = token_maxlen\n        self.column_maxlen = column_maxlen\n        self.conds_column_loss_alpha = conds_column_loss_alpha\n\n        # Predict aggregator\n        self.agg_predictor = AggPredictor(\n            embed_dim, model_dim, rnn_num_layer, dropout, len(self.AGG_OPS)\n        )\n\n        # Predict selected column\n        self.sel_predictor = SelPredictor(\n            embed_dim, model_dim, rnn_num_layer, dropout, column_attention=column_attention\n        )\n\n        # #Predict number of conditions\n        self.conds_predictor = CondsPredictor(\n            embed_dim,\n            model_dim,\n            rnn_num_layer,\n            dropout,\n            len(self.COND_OPS),\n            column_maxlen,\n            token_maxlen,\n            column_attention=column_attention,\n        )\n\n        self.cross_entropy = nn.CrossEntropyLoss()\n        self.bce_logit = nn.BCEWithLogitsLoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        column = features[\"column\"]\n        question = features[\"question\"]\n\n        column_embed = self.token_embedder(column)\n        question_embed = self.token_embedder(question)\n\n        B, C_L = column_embed.size(0), column_embed.size(1)\n\n        column_indexed = column[next(iter(column))]\n        column_name_mask = column_indexed.gt(0).float()  # NOTE: hard-code\n        column_lengths = utils.get_column_lengths(column_embed, column_name_mask)\n        column_mask = column_lengths.view(B, C_L).gt(0).float()  # NOTE: hard-code\n        question_mask = f.get_mask_from_tokens(question).float()\n\n        agg_logits = self.agg_predictor(question_embed, question_mask)\n        sel_logits = self.sel_predictor(\n            question_embed, question_mask, column_embed, column_name_mask, column_mask\n        )\n\n        conds_col_idx, conds_val_pos = None, None\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            ground_truths = self._dataset.get_ground_truths(data_idx)\n\n            conds_col_idx = [ground_truth[\"conds_col\"] for ground_truth in ground_truths]\n            conds_val_pos = [ground_truth[\"conds_val_pos\"] for ground_truth in ground_truths]\n\n        conds_logits = self.conds_predictor(\n            question_embed,\n            question_mask,\n            column_embed,\n            column_name_mask,\n            column_mask,\n            conds_col_idx,\n            conds_val_pos,\n        )\n\n        # Convert GPU to CPU\n        agg_logits = agg_logits.cpu()\n        sel_logits = sel_logits.cpu()\n        conds_logits = [logits.cpu() for logits in conds_logits]\n\n        output_dict = {\n            \"agg_logits\": agg_logits,\n            \"sel_logits\": sel_logits,\n            \"conds_logits\": conds_logits,\n        }\n\n        if labels:\n            data_idx = labels[\"data_idx\"]\n            output_dict[\"data_id\"] = data_idx\n\n            ground_truths = self._dataset.get_ground_truths(data_idx)\n\n            # Aggregator, Select Column\n            target_agg_idx = torch.LongTensor(\n                [ground_truth[\"agg_idx\"] for ground_truth in ground_truths]\n            )\n            target_sel_idx = torch.LongTensor(\n                [ground_truth[\"sel_idx\"] for ground_truth in ground_truths]\n            )\n\n            loss = 0\n            loss += self.cross_entropy(agg_logits, target_agg_idx)\n            loss += self.cross_entropy(sel_logits, target_sel_idx)\n\n            conds_num_logits, conds_column_logits, conds_op_logits, conds_value_logits = (\n                conds_logits\n            )\n\n            # Conditions\n            # 1. The number of conditions\n            target_conds_num = torch.LongTensor(\n                [ground_truth[\"conds_num\"] for ground_truth in ground_truths]\n            )\n            target_conds_column = [ground_truth[\"conds_col\"] for ground_truth in ground_truths]\n\n            loss += self.cross_entropy(conds_num_logits, target_conds_num)\n\n            # 2. Columns of conditions\n            B = conds_column_logits.size(0)\n\n            target_conds_columns = np.zeros(list(conds_column_logits.size()), dtype=np.float32)\n            for i in range(B):\n                target_conds_column_idx = target_conds_column[i]\n                if len(target_conds_column_idx) == 0:\n                    continue\n                target_conds_columns[i][target_conds_column_idx] = 1\n            target_conds_columns = torch.from_numpy(target_conds_columns)\n            conds_column_probs = torch.sigmoid(conds_column_logits)\n\n            bce_loss = -torch.mean(\n                self.conds_column_loss_alpha\n                * (target_conds_columns * torch.log(conds_column_probs + 1e-10))\n                + (1 - target_conds_columns) * torch.log(1 - conds_column_probs + 1e-10)\n            )\n            loss += bce_loss\n\n            # 3. Operator of conditions\n            conds_op_loss = 0\n            for i in range(B):\n                target_conds_op = ground_truths[i][\"conds_op\"]\n                if len(target_conds_op) == 0:\n                    continue\n\n                target_conds_op = torch.from_numpy(np.array(target_conds_op))\n                logits_conds_op = conds_op_logits[i, : len(target_conds_op)]\n\n                target_op_count = len(target_conds_op)\n                conds_op_loss += (\n                    self.cross_entropy(logits_conds_op, target_conds_op) / target_op_count\n                )\n            loss += conds_op_loss\n\n            # 4. Value of conditions\n            conds_val_pos = [ground_truth[\"conds_val_pos\"] for ground_truth in ground_truths]\n\n            conds_value_loss = 0\n            for i in range(B):\n                for j in range(len(conds_val_pos[i])):\n                    cond_val_pos = conds_val_pos[i][j]\n                    if len(cond_val_pos) == 1:\n                        continue\n\n                    target_cond_val_pos = torch.from_numpy(\n                        np.array(cond_val_pos[1:])\n                    )  # index 0: START_TOKEN\n                    logits_cond_val_pos = conds_value_logits[i, j, : len(cond_val_pos) - 1]\n\n                    conds_value_loss += self.cross_entropy(\n                        logits_cond_val_pos, target_cond_val_pos\n                    ) / len(conds_val_pos[i])\n\n            loss += conds_value_loss / B\n\n            output_dict[\"loss\"] = loss.unsqueeze(0)\n\n        return output_dict\n\n\nclass AggPredictor(nn.Module):\n    def __init__(self, embed_dim, model_dim, rnn_num_layer, dropout, agg_count):\n        super(AggPredictor, self).__init__()\n\n        self.question_rnn = nn.LSTM(\n            input_size=embed_dim,\n            hidden_size=model_dim // 2,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n            bidirectional=True,\n        )\n        self.seq_attn = attention.LinearSeqAttn(model_dim)\n        self.mlp = nn.Sequential(\n            nn.Linear(model_dim, model_dim), nn.Tanh(), nn.Linear(model_dim, agg_count)\n        )\n\n    def forward(self, question_embed, question_mask):\n        encoded_question, _ = self.question_rnn(question_embed)\n        attn_matrix = self.seq_attn(encoded_question, question_mask)\n        attn_question = f.weighted_sum(attn_matrix, encoded_question)\n        logits = self.mlp(attn_question)\n        return logits\n\n\nclass SelPredictor(nn.Module):\n    def __init__(self, embed_dim, model_dim, rnn_num_layer, dropout, column_attention=None):\n        super(SelPredictor, self).__init__()\n        self.column_attention = column_attention\n\n        self.question_rnn = nn.LSTM(\n            input_size=embed_dim,\n            hidden_size=model_dim // 2,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n            bidirectional=True,\n        )\n\n        if column_attention:\n            self.linear_attn = nn.Linear(model_dim, model_dim)\n        else:\n            self.seq_attn = attention.LinearSeqAttn(model_dim)\n\n        self.column_rnn = nn.LSTM(\n            input_size=embed_dim,\n            hidden_size=model_dim // 2,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n            bidirectional=True,\n        )\n\n        self.linear_question = nn.Linear(model_dim, model_dim)\n        self.linear_column = nn.Linear(model_dim, model_dim)\n        self.mlp = nn.Sequential(nn.Tanh(), nn.Linear(model_dim, 1))\n\n    def forward(self, question_embed, question_mask, column_embed, column_name_mask, column_mask):\n\n        B, C_L, N_L, embed_D = list(column_embed.size())\n\n        encoded_column = utils.encode_column(column_embed, column_name_mask, self.column_rnn)\n        encoded_question, _ = self.question_rnn(question_embed)\n\n        if self.column_attention:\n            attn_matrix = torch.bmm(\n                encoded_column, self.linear_attn(encoded_question).transpose(1, 2)\n            )\n            attn_matrix = f.add_masked_value(attn_matrix, question_mask.unsqueeze(1), value=-1e7)\n            attn_matrix = F.softmax(attn_matrix, dim=-1)\n            attn_question = (encoded_question.unsqueeze(1) * attn_matrix.unsqueeze(3)).sum(2)\n        else:\n            attn_matrix = self.seq_attn(encoded_question, question_mask)\n            attn_question = f.weighted_sum(attn_matrix, encoded_question)\n            attn_question = attn_question.unsqueeze(1)\n\n        logits = self.mlp(\n            self.linear_question(attn_question) + self.linear_column(encoded_column)\n        ).squeeze()\n        logits = f.add_masked_value(logits, column_mask, value=-1e7)\n        return logits\n\n\nclass CondsPredictor(nn.Module):\n    def __init__(\n        self,\n        embed_dim,\n        model_dim,\n        rnn_num_layer,\n        dropout,\n        conds_op_count,\n        column_maxlen,\n        token_maxlen,\n        column_attention=None,\n    ):\n        super(CondsPredictor, self).__init__()\n\n        self.num_predictor = CondsNumPredictor(\n            embed_dim, model_dim, rnn_num_layer, dropout, column_maxlen\n        )\n        self.column_predictor = CondsColPredictor(\n            embed_dim, model_dim, rnn_num_layer, dropout, column_attention=column_attention\n        )\n        self.op_predictor = CondsOpPredictor(\n            embed_dim,\n            model_dim,\n            rnn_num_layer,\n            dropout,\n            conds_op_count,\n            column_maxlen,\n            column_attention=column_attention,\n        )\n        self.value_pointer = CondsValuePointer(\n            embed_dim, model_dim, rnn_num_layer, dropout, column_maxlen, token_maxlen\n        )\n\n    def forward(\n        self,\n        question_embed,\n        question_mask,\n        column_embed,\n        column_name_mask,\n        column_mask,\n        col_idx,\n        conds_val_pos,\n    ):\n        num_logits = self.num_predictor(\n            question_embed, question_mask, column_embed, column_name_mask, column_mask\n        )\n        column_logits = self.column_predictor(\n            question_embed, question_mask, column_embed, column_name_mask, column_mask\n        )\n\n        if col_idx is None:\n            col_idx = []\n            preds_num = torch.argmax(num_logits, dim=-1)\n            for i in range(column_logits.size(0)):\n                _, pred_conds_column_idx = torch.topk(column_logits[i], preds_num[i])\n                col_idx.append(pred_conds_column_idx.tolist())\n\n        op_logits = self.op_predictor(\n            question_embed, question_mask, column_embed, column_name_mask, col_idx\n        )\n        value_logits = self.value_pointer(\n            question_embed, question_mask, column_embed, column_name_mask, col_idx, conds_val_pos\n        )\n\n        return (num_logits, column_logits, op_logits, value_logits)\n\n\nclass CondsNumPredictor(nn.Module):\n    def __init__(self, embed_dim, model_dim, rnn_num_layer, dropout, column_maxlen):\n        super(CondsNumPredictor, self).__init__()\n\n        self.model_dim = model_dim\n        self.column_maxlen = column_maxlen\n\n        self.column_rnn = nn.LSTM(\n            input_size=embed_dim,\n            hidden_size=model_dim // 2,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n            bidirectional=True,\n        )\n        self.column_seq_attn = attention.LinearSeqAttn(model_dim)\n        self.column_to_hidden_state = nn.Linear(model_dim, 2 * model_dim)\n        self.column_to_cell_state = nn.Linear(model_dim, 2 * model_dim)\n\n        self.question_rnn = nn.LSTM(\n            input_size=embed_dim,\n            hidden_size=model_dim // 2,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n            bidirectional=True,\n        )\n        self.question_seq_attn = attention.LinearSeqAttn(model_dim)\n\n        self.mlp = nn.Sequential(\n            nn.Linear(model_dim, model_dim), nn.Tanh(), nn.Linear(model_dim, column_maxlen + 1)\n        )\n\n    def forward(self, question_embed, question_mask, column_embed, column_name_mask, column_mask):\n        B, C_L, N_L, embed_D = list(column_embed.size())\n\n        encoded_column = utils.encode_column(column_embed, column_name_mask, self.column_rnn)\n        attn_column = self.column_seq_attn(encoded_column, column_mask)\n        out_column = f.weighted_sum(attn_column, encoded_column)\n\n        question_rnn_hidden_state = (\n            self.column_to_hidden_state(out_column)\n            .view(B, self.column_maxlen, self.model_dim // 2)\n            .transpose(0, 1)\n            .contiguous()\n        )\n        question_rnn_cell_state = (\n            self.column_to_cell_state(out_column)\n            .view(B, self.column_maxlen, self.model_dim // 2)\n            .transpose(0, 1)\n            .contiguous()\n        )\n\n        encoded_question, _ = self.question_rnn(\n            question_embed, (question_rnn_hidden_state, question_rnn_cell_state)\n        )\n        attn_question = self.question_seq_attn(encoded_question, question_mask)\n        out_question = f.weighted_sum(attn_question, encoded_question)\n        return self.mlp(out_question)\n\n\nclass CondsColPredictor(nn.Module):\n    def __init__(self, embed_dim, model_dim, rnn_num_layer, dropout, column_attention=None):\n        super(CondsColPredictor, self).__init__()\n        self.column_attention = column_attention\n\n        self.question_rnn = nn.LSTM(\n            input_size=embed_dim,\n            hidden_size=model_dim // 2,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n            bidirectional=True,\n        )\n\n        if column_attention:\n            self.linear_attn = nn.Linear(model_dim, model_dim)\n        else:\n            self.seq_attn = attention.LinearSeqAttn(model_dim)\n\n        self.column_rnn = nn.LSTM(\n            input_size=embed_dim,\n            hidden_size=model_dim // 2,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n            bidirectional=True,\n        )\n\n        self.linear_question = nn.Linear(model_dim, model_dim)\n        self.linear_column = nn.Linear(model_dim, model_dim)\n        self.mlp = nn.Sequential(nn.ReLU(), nn.Linear(model_dim, 1))\n\n    def forward(self, question_embed, question_mask, column_embed, column_name_mask, column_mask):\n        B, C_L, N_L, embed_D = list(column_embed.size())\n\n        # Column Encoder\n        encoded_column = utils.encode_column(column_embed, column_name_mask, self.column_rnn)\n        encoded_question, _ = self.question_rnn(question_embed)\n\n        if self.column_attention:\n            attn_matrix = torch.bmm(\n                encoded_column, self.linear_attn(encoded_question).transpose(1, 2)\n            )\n            attn_matrix = f.add_masked_value(attn_matrix, question_mask.unsqueeze(1), value=-1e7)\n            attn_matrix = F.softmax(attn_matrix, dim=-1)\n            attn_question = (encoded_question.unsqueeze(1) * attn_matrix.unsqueeze(3)).sum(2)\n        else:\n            attn_matrix = self.seq_attn(encoded_question, question_mask)\n            attn_question = f.weighted_sum(attn_matrix, encoded_question)\n            attn_question = attn_question.unsqueeze(1)\n\n        logits = self.mlp(\n            self.linear_question(attn_question) + self.linear_column(encoded_column)\n        ).squeeze()\n        logits = f.add_masked_value(logits, column_mask, value=-1e7)\n        return logits\n\n\nclass CondsOpPredictor(nn.Module):\n    def __init__(\n        self,\n        embed_dim,\n        model_dim,\n        rnn_num_layer,\n        dropout,\n        op_count,\n        column_maxlen,\n        column_attention=None,\n    ):\n        super(CondsOpPredictor, self).__init__()\n        self.column_attention = column_attention\n        self.column_maxlen = column_maxlen\n\n        self.question_rnn = nn.LSTM(\n            input_size=embed_dim,\n            hidden_size=model_dim // 2,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n            bidirectional=True,\n        )\n\n        if column_attention:\n            self.linear_attn = nn.Linear(model_dim, model_dim)\n        else:\n            self.seq_attn = attention.LinearSeqAttn(model_dim)\n\n        self.column_rnn = nn.LSTM(\n            input_size=embed_dim,\n            hidden_size=model_dim // 2,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n            bidirectional=True,\n        )\n\n        self.linear_question = nn.Linear(model_dim, model_dim)\n        self.linear_column = nn.Linear(model_dim, model_dim)\n        self.mlp = nn.Sequential(\n            nn.Linear(model_dim, model_dim), nn.Tanh(), nn.Linear(model_dim, op_count)\n        )\n\n    def forward(self, question_embed, question_mask, column_embed, column_name_mask, col_idx):\n        B, C_L, N_L, embed_D = list(column_embed.size())\n\n        # Column Encoder\n        encoded_column = utils.encode_column(column_embed, column_name_mask, self.column_rnn)\n        encoded_used_column = utils.filter_used_column(\n            encoded_column, col_idx, padding_count=self.column_maxlen\n        )\n\n        encoded_question, _ = self.question_rnn(question_embed)\n        if self.column_attention:\n            attn_matrix = torch.matmul(\n                self.linear_attn(encoded_question).unsqueeze(1), encoded_used_column.unsqueeze(3)\n            ).squeeze()\n            attn_matrix = f.add_masked_value(attn_matrix, question_mask.unsqueeze(1), value=-1e7)\n            attn_matrix = F.softmax(attn_matrix, dim=-1)\n            attn_question = (encoded_question.unsqueeze(1) * attn_matrix.unsqueeze(3)).sum(2)\n        else:\n            attn_matrix = self.seq_attn(encoded_question, question_mask)\n            attn_question = f.weighted_sum(attn_matrix, encoded_question)\n            attn_question = attn_question.unsqueeze(1)\n\n        return self.mlp(\n            self.linear_question(attn_question) + self.linear_column(encoded_used_column)\n        ).squeeze()\n\n\nclass CondsValuePointer(nn.Module):\n    def __init__(self, embed_dim, model_dim, rnn_num_layer, dropout, column_maxlen, token_maxlen):\n        super(CondsValuePointer, self).__init__()\n\n        self.model_dim = model_dim\n        self.column_maxlen = column_maxlen\n        self.token_maxlen = token_maxlen\n\n        self.question_rnn = nn.LSTM(\n            input_size=embed_dim,\n            hidden_size=model_dim // 2,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n            bidirectional=True,\n        )\n        self.seq_attn = attention.LinearSeqAttn(model_dim)\n\n        self.column_rnn = nn.LSTM(\n            input_size=embed_dim,\n            hidden_size=model_dim // 2,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n            bidirectional=True,\n        )\n\n        self.decoder = nn.LSTM(\n            input_size=self.token_maxlen,\n            hidden_size=model_dim,\n            num_layers=rnn_num_layer,\n            batch_first=True,\n            dropout=dropout,\n        )\n\n        self.linear_column = nn.Linear(model_dim, model_dim)\n        self.linear_conds = nn.Linear(model_dim, model_dim)\n        self.linear_question = nn.Linear(model_dim, model_dim)\n        self.mlp = nn.Sequential(nn.ReLU(), nn.Linear(model_dim, 1))\n\n    def forward(\n        self, question_embed, question_mask, column_embed, column_name_mask, col_idx, conds_val_pos\n    ):\n        B, C_L, N_L, embed_D = list(column_embed.size())\n\n        question_embed, question_mask = self.concat_start_and_end_zero_padding(\n            question_embed, question_mask\n        )\n\n        # Column Encoder\n        encoded_column = utils.encode_column(column_embed, column_name_mask, self.column_rnn)\n        encoded_used_column = utils.filter_used_column(\n            encoded_column, col_idx, padding_count=self.column_maxlen\n        )\n\n        encoded_question, _ = self.question_rnn(question_embed)\n\n        encoded_used_column = encoded_used_column.unsqueeze(2).unsqueeze(2)\n        encoded_question = encoded_question.unsqueeze(1).unsqueeze(1)\n\n        if conds_val_pos is None:  # inference\n            MAX_DECODER_STEP = 50\n\n            decoder_input = torch.zeros(4 * B, 1, self.token_maxlen)\n            decoder_input[:, 0, 0] = 2  # Set <s> Token\n            if torch.cuda.is_available():\n                decoder_input = decoder_input.cuda()\n            decoder_hidden = None\n\n            logits = []\n            for _ in range(MAX_DECODER_STEP):\n                step_logit, decoder_hidden = self.decode_then_output(\n                    encoded_used_column,\n                    encoded_question,\n                    question_mask,\n                    decoder_input,\n                    decoder_hidden=decoder_hidden,\n                )\n                step_logit = step_logit.unsqueeze(1)\n                logits.append(step_logit)\n\n                # To ont-hot\n                _, decoder_idxs = step_logit.view(B * self.column_maxlen, -1).max(1)\n                decoder_input = torch.zeros(B * self.column_maxlen, self.token_maxlen).scatter_(\n                    1, decoder_idxs.cpu().unsqueeze(1), 1\n                )\n                if torch.cuda.is_available():\n                    decoder_input = decoder_input.cuda()\n\n            logits = torch.stack(logits, 2)\n        else:\n            decoder_input, _ = utils.convert_position_to_decoder_input(\n                conds_val_pos, token_maxlen=self.token_maxlen\n            )\n            logits, _ = self.decode_then_output(\n                encoded_used_column, encoded_question, question_mask, decoder_input\n            )\n        return logits\n\n    def concat_start_and_end_zero_padding(self, question_embed, mask):\n        B, Q_L, embed_D = list(question_embed.size())\n\n        zero_padding = torch.zeros(B, 1, embed_D)\n        mask_with_start_end = torch.zeros(B, Q_L + 2)\n\n        if torch.cuda.is_available():\n            zero_padding = zero_padding.cuda(torch.cuda.current_device())\n            mask_with_start_end = mask_with_start_end.cuda(torch.cuda.current_device())\n\n        question_embed_with_start_end = torch.cat(\n            [zero_padding, question_embed, zero_padding], dim=1\n        )  # add <BEG> and <END>\n\n        mask_with_start_end[:, 0] = 1  # <BEG>\n        mask_with_start_end[:, 1 : Q_L + 1] = mask\n        question_lengths = torch.sum(mask, dim=-1).byte()\n        for i in range(B):\n            mask_with_start_end[i, question_lengths[i].item() + 1] = 1  # <END>\n\n        return question_embed_with_start_end, mask_with_start_end\n\n    def decode_then_output(\n        self,\n        encoded_used_column,\n        encoded_question,\n        question_mask,\n        decoder_input,\n        decoder_hidden=None,\n    ):\n        B = encoded_used_column.size(0)\n\n        decoder_output, decoder_hidden = self.decoder(\n            decoder_input.view(B * self.column_maxlen, -1, self.token_maxlen), decoder_hidden\n        )\n        decoder_output = decoder_output.contiguous().view(B, self.column_maxlen, -1, self.model_dim)\n        decoder_output = decoder_output.unsqueeze(3)\n\n        logits = self.mlp(\n            self.linear_column(encoded_used_column)\n            + self.linear_conds(decoder_output)\n            + self.linear_question(encoded_question)\n        ).squeeze()\n        logits = f.add_masked_value(logits, question_mask.unsqueeze(1).unsqueeze(1), value=-1e7)\n        return logits, decoder_hidden\n"
  },
  {
    "path": "claf/model/semantic_parsing/utils.py",
    "content": "\nimport numpy as np\nimport torch\n\n\ndef encode_column(column_embed, column_name_mask, rnn_module):\n    B, C_L, N_L, embed_D = list(column_embed.size())\n\n    column_lengths = get_column_lengths(column_embed, column_name_mask)\n    column_last_index = column_lengths - column_lengths.gt(0).long()  # NOTE: hard-code\n\n    column_reshape = [-1] + [N_L, embed_D]\n    column_embed = column_embed.view(*column_reshape)\n\n    encoded_column, _ = rnn_module(column_embed)\n    encoded_D = encoded_column.size(-1)\n\n    encoded_output_column = torch.cat(\n        [\n            torch.index_select(encoded_column[i], 0, column_last_index[i])\n            for i in range(column_last_index.size(0))\n        ],\n        dim=0,\n    )\n    encoded_output_column = encoded_output_column.view([B, C_L, encoded_D])\n    return encoded_output_column\n\n\ndef get_column_lengths(column_embed, column_name_mask):\n    _, _, N_L, embed_D = list(column_embed.size())\n    column_reshape = [-1] + [N_L, embed_D]\n\n    return torch.sum(column_name_mask.view(*column_reshape[:-1]), dim=-1).long()\n\n\ndef filter_used_column(encoded_columns, col_idx, padding_count=4):\n    B, C_L, D = list(encoded_columns.size())\n    zero_padding = torch.zeros(D)\n    if torch.cuda.is_available():\n        zero_padding = zero_padding.cuda(torch.cuda.current_device())\n\n    encoded_used_columns = []\n    for i in range(B):\n        encoded_used_column = torch.stack(\n            [encoded_columns[i][j] for j in col_idx[i]]\n            + [zero_padding] * (padding_count - len(col_idx[i]))\n        )\n        encoded_used_columns.append(encoded_used_column)\n    return torch.stack(encoded_used_columns)\n\n\ndef convert_position_to_decoder_input(conds_val_pos, token_maxlen=200):\n    B = len(conds_val_pos)\n    max_len = (\n        max([max([len(tok) for tok in tok_seq] + [0]) for tok_seq in conds_val_pos]) - 1\n    )  # The max seq len in the batch.\n    if max_len < 1:\n        max_len = 1\n    ret_array = np.zeros((B, 4, max_len, token_maxlen), dtype=np.float32)\n    ret_len = np.zeros((B, 4))\n    for b, tok_seq in enumerate(conds_val_pos):\n        idx = 0\n        for idx, one_tok_seq in enumerate(tok_seq):\n            out_one_tok_seq = one_tok_seq[:-1]\n            ret_len[b, idx] = len(out_one_tok_seq)\n            for t, tok_id in enumerate(out_one_tok_seq):\n                ret_array[b, idx, t, tok_id] = 1\n        if idx < 3:\n            ret_array[b, idx + 1 :, 0, 1] = 1\n            ret_len[b, idx + 1 :] = 1\n\n    ret_inp = torch.from_numpy(ret_array)\n    if torch.cuda.is_available():\n        ret_inp = ret_inp.cuda(torch.cuda.current_device())\n\n    return ret_inp, ret_len  # [B, IDX, max_len, token_maxlen]\n"
  },
  {
    "path": "claf/model/sequence_classification/__init__.py",
    "content": "\nfrom claf.model.sequence_classification.bert import BertForSeqCls\nfrom claf.model.sequence_classification.roberta import RobertaForSeqCls\nfrom claf.model.sequence_classification.structured_self_attention import StructuredSelfAttention\n\n# fmt: off\n\n__all__ = [\n    \"BertForSeqCls\", \"RobertaForSeqCls\", \"StructuredSelfAttention\"\n]\n\n# fmt: on\n"
  },
  {
    "path": "claf/model/sequence_classification/bert.py",
    "content": "\nfrom overrides import overrides\nimport torch.nn as nn\nfrom transformers import BertForSequenceClassification\n\nfrom claf.data.data_handler import CachePath\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithoutTokenEmbedder\nfrom claf.model.sequence_classification.mixin import SequenceClassification\n\n\n@register(\"model:bert_for_seq_cls\")\nclass BertForSeqCls(SequenceClassification, ModelWithoutTokenEmbedder):\n    \"\"\"\n    Implementation of Sentence Classification model presented in\n    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n    (https://arxiv.org/abs/1810.04805)\n\n    * Args:\n        token_embedder: used to embed the sequence\n        num_classes: number of classified classes\n\n    * Kwargs:\n        pretrained_model_name: the name of a pre-trained model\n        dropout: classification layer dropout\n    \"\"\"\n\n    def __init__(self, token_makers, num_classes, pretrained_model_name=None, dropout=0.2):\n\n        super(BertForSeqCls, self).__init__(token_makers)\n\n        self.use_transformers = True  # for optimizer's model parameters\n        self.num_classes = num_classes\n\n        self.model = BertForSequenceClassification.from_pretrained(\n            pretrained_model_name, cache_dir=str(CachePath.ROOT), num_labels=num_classes,\n        )\n        self.criterion = nn.CrossEntropyLoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n            {\n                \"bert_input\": {\n                    \"feature\": [\n                        [3, 4, 1, 0, 0, 0, ...],\n                        ...,\n                    ]\n                },\n                \"token_type\": {\n                    \"feature\": [\n                        [0, 0, 0, 0, 0, 0, ...],\n                        ...,\n                    ],\n                }\n            }\n\n        * Kwargs:\n            label: label dictionary like below.\n            {\n                \"class_idx\": [2, 1, 0, 4, 5, ...]\n                \"data_idx\": [2, 4, 5, 7, 2, 1, ...]\n            }\n            Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - logits: representing unnormalized log probabilities of the class.\n\n            - class_idx: target class idx\n            - data_idx: data idx\n            - loss: a scalar loss to be optimized\n        \"\"\"\n\n        bert_inputs = features[\"bert_input\"][\"feature\"]\n        token_type_ids = features[\"token_type\"][\"feature\"]\n        attention_mask = (bert_inputs > 0).long()\n\n        outputs = self.model(\n            bert_inputs, token_type_ids=token_type_ids, attention_mask=attention_mask\n        )\n        logits = outputs[0]\n\n        output_dict = {\"logits\": logits}\n\n        if labels:\n            class_idx = labels[\"class_idx\"]\n            data_idx = labels[\"data_idx\"]\n\n            output_dict[\"class_idx\"] = class_idx\n            output_dict[\"data_idx\"] = data_idx\n\n            # Loss\n            loss = self.criterion(\n                logits.view(-1, self.num_classes), class_idx.view(-1)\n            )\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n\n    @overrides\n    def print_examples(self, index, inputs, predictions):\n        \"\"\"\n        Print evaluation examples\n\n        * Args:\n            index: data index\n            inputs: mini-batch inputs\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n\n        * Returns:\n            print(Sequence, Sequence Tokens, Target Class, Predicted Class)\n        \"\"\"\n\n        data_idx = inputs[\"labels\"][\"data_idx\"][index].item()\n        data_id = self._dataset.get_id(data_idx)\n\n        helper = self._dataset.helper\n\n        sequence_a = helper[\"examples\"][data_id][\"sequence_a\"]\n        sequence_a_tokens = helper[\"examples\"][data_id][\"sequence_a_tokens\"]\n        sequence_b = helper[\"examples\"][data_id][\"sequence_b\"]\n        sequence_b_tokens = helper[\"examples\"][data_id][\"sequence_b_tokens\"]\n        target_class_text = helper[\"examples\"][data_id][\"class_text\"]\n\n        pred_class_idx = predictions[data_id][\"class_idx\"]\n        pred_class_text = self._dataset.get_class_text_with_idx(pred_class_idx)\n\n        print()\n        print(\"- Sequence a:\", sequence_a)\n        print(\"- Sequence a Tokens:\", sequence_a_tokens)\n        if sequence_b:\n            print(\"- Sequence b:\", sequence_b)\n            print(\"- Sequence b Tokens:\", sequence_b_tokens)\n        print(\"- Target:\")\n        print(\"    Class:\", target_class_text)\n        print(\"- Predict:\")\n        print(\"    Class:\", pred_class_text)\n        print()\n"
  },
  {
    "path": "claf/model/sequence_classification/mixin.py",
    "content": "\nfrom pathlib import Path\nimport logging\n\nimport torch\nimport pycm\nfrom pycm.pycm_obj import pycmVectorError\n\nfrom claf.model import cls_utils\nfrom claf.model.base import ModelBase\nfrom claf.metric.classification import macro_f1, macro_precision, macro_recall\nfrom claf.metric.glue import simple_accuracy, f1, matthews_corr\n\nlogger = logging.getLogger(__name__)\n\n\nclass SequenceClassification:\n    \"\"\" Sequence Classification Mixin Class \"\"\"\n\n    def make_predictions(self, output_dict):\n        \"\"\"\n        Make predictions with model's output_dict\n\n        * Args:\n            output_dict: model's output dictionary consisting of\n                - sequence_embed: embedding vector of the sequence\n                - logits: representing unnormalized log probabilities of the class\n\n                - class_idx: target class idx\n                - data_idx: data idx\n                - loss: a scalar loss to be optimized\n\n        * Returns:\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n        \"\"\"\n\n        data_indices = output_dict[\"data_idx\"]\n        pred_logits = output_dict[\"logits\"]\n        pred_class_idxs = torch.argmax(pred_logits, dim=-1)\n\n        predictions = {\n            self._dataset.get_id(data_idx.item()): {\"class_idx\": pred_class_idx.item()}\n            for data_idx, pred_class_idx in zip(list(data_indices.data), list(pred_class_idxs.data))\n        }\n\n        return predictions\n\n    def predict(self, output_dict, arguments, helper):\n        \"\"\"\n        Inference by raw_feature\n\n        * Args:\n            output_dict: model's output dictionary consisting of\n                - sequence_embed: embedding vector of the sequence\n                - logits: representing unnormalized log probabilities of the class.\n            arguments: arguments dictionary consisting of user_input\n            helper: dictionary to get the classification result, consisting of\n                - class_idx2text: dictionary converting class_idx to class_text\n\n        * Returns: output dict (dict) consisting of\n            - logits: representing unnormalized log probabilities of the class\n            - class_idx: predicted class idx\n            - class_text: predicted class text\n        \"\"\"\n\n        logits = output_dict[\"logits\"]\n        class_idx = logits.argmax(dim=-1)\n\n        return {\n            \"logits\": logits,\n            \"class_idx\": class_idx,\n            \"class_text\": helper[\"class_idx2text\"][class_idx.item()],\n        }\n\n    def make_metrics(self, predictions):\n        \"\"\"\n        Make metrics with prediction dictionary\n\n        * Args:\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n\n        * Returns:\n            metrics: metric dictionary consisting of\n                - 'macro_f1': class prediction macro(unweighted mean) f1\n                - 'macro_precision': class prediction macro(unweighted mean) precision\n                - 'macro_recall': class prediction macro(unweighted mean) recall\n                - 'accuracy': class prediction accuracy\n        \"\"\"\n\n        pred_idx = []\n        pred_classes = []\n\n        target_idx = []\n        target_classes = []\n        target_count = len(self._dataset.class_idx2text)\n\n        for data_id, pred in predictions.items():\n            target = self._dataset.get_ground_truth(data_id)\n\n            pred_idx.append(pred[\"class_idx\"])\n            pred_classes.append(self._dataset.class_idx2text[pred[\"class_idx\"]])\n\n            target_idx.append(target[\"class_idx\"])\n            target_classes.append(target[\"class_text\"])\n\n        metrics = {\n            \"accuracy\": simple_accuracy(pred_idx, target_idx),\n        }\n\n        if target_count == 2:\n            # binary class\n            f1_metric = f1(pred_idx, target_idx)\n            metrics.update(f1_metric)\n\n        matthews_corr_metric = matthews_corr(pred_idx, target_idx)\n        metrics.update(matthews_corr_metric)\n        return metrics\n\n    def write_predictions(self, predictions, file_path=None, is_dict=True, pycm_obj=None):\n        \"\"\"\n        Override write_predictions() in ModelBase to log confusion matrix\n        \"\"\"\n\n        try:\n            super(SequenceClassification, self).write_predictions(\n                predictions, file_path=file_path, is_dict=is_dict\n            )\n        except AttributeError:\n            # TODO: Need to Fix\n            model_base = ModelBase()\n            model_base._log_dir = self._log_dir\n            model_base._train_counter = self._train_counter\n            model_base.training = self.training\n            model_base.write_predictions(predictions, file_path=file_path, is_dict=is_dict)\n\n        data_type = \"train\" if self.training else \"valid\"\n\n        if pycm_obj is not None:\n            stats_file_path = f\"predictions-{data_type}-{self._train_counter.get_display()}-stats\"\n            pycm_obj.save_csv(str(Path(self._log_dir) / \"predictions\" / stats_file_path))\n\n            confusion_matrix_file_path = (\n                f\"predictions-{data_type}-{self._train_counter.get_display()}-confusion_matrix\"\n            )\n            cls_utils.write_confusion_matrix_to_csv(\n                str(Path(self._log_dir) / \"predictions\" / confusion_matrix_file_path), pycm_obj\n            )\n\n    def print_examples(self, index, inputs, predictions):\n        \"\"\"\n        Print evaluation examples\n\n        * Args:\n            index: data index\n            inputs: mini-batch inputs\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n\n        * Returns:\n            print(Sequence, Target Class, Predicted Class)\n        \"\"\"\n\n        data_idx = inputs[\"labels\"][\"data_idx\"][index].item()\n        data_id = self._dataset.get_id(data_idx)\n\n        helper = self._dataset.helper\n        sequence = helper[\"examples\"][data_id][\"sequence\"]\n        target_class_text = helper[\"examples\"][data_id][\"class_text\"]\n\n        pred_class_idx = predictions[data_id][\"class_idx\"]\n        pred_class_text = self._dataset.get_class_text_with_idx(pred_class_idx)\n\n        print()\n        print(\"- Sequence:\", sequence)\n        print(\"- Target:\")\n        print(\"    Class:\", target_class_text)\n        print(\"- Predict:\")\n        print(\"    Class:\", pred_class_text)\n        print()\n"
  },
  {
    "path": "claf/model/sequence_classification/roberta.py",
    "content": "\nfrom overrides import overrides\nfrom transformers import RobertaForSequenceClassification\nimport torch.nn as nn\n\nfrom claf.data.data_handler import CachePath\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithoutTokenEmbedder\nfrom claf.model.sequence_classification.mixin import SequenceClassification\n\n\n@register(\"model:roberta_for_seq_cls\")\nclass RobertaForSeqCls(SequenceClassification, ModelWithoutTokenEmbedder):\n    \"\"\"\n    Implementation of Sentence Classification model presented in\n    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n    (https://arxiv.org/abs/1810.04805)\n\n    * Args:\n        token_embedder: used to embed the sequence\n        num_classes: number of classified classes\n\n    * Kwargs:\n        pretrained_model_name: the name of a pre-trained model\n        dropout: classification layer dropout\n    \"\"\"\n\n    def __init__(self, token_makers, num_classes, pretrained_model_name=None, dropout=0.2):\n\n        super(RobertaForSeqCls, self).__init__(token_makers)\n\n        self.use_pytorch_transformers = True  # for optimizer's model parameters\n        self.num_classes = num_classes\n\n        self.model = RobertaForSequenceClassification.from_pretrained(\n            pretrained_model_name, cache_dir=str(CachePath.ROOT), num_labels=num_classes,\n        )\n        self.criterion = nn.CrossEntropyLoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n            {\n                \"bert_input\": {\n                    \"feature\": [\n                        [3, 4, 1, 0, 0, 0, ...],\n                        ...,\n                    ]\n                },\n            }\n\n        * Kwargs:\n            label: label dictionary like below.\n            {\n                \"class_idx\": [2, 1, 0, 4, 5, ...]\n                \"data_idx\": [2, 4, 5, 7, 2, 1, ...]\n            }\n            Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - logits: representing unnormalized log probabilities of the class.\n\n            - class_idx: target class idx\n            - data_idx: data idx\n            - loss: a scalar loss to be optimized\n        \"\"\"\n\n        bert_inputs = features[\"bert_input\"][\"feature\"]\n        attention_mask = (bert_inputs > 0).long()\n\n        outputs = self.model(\n            bert_inputs, token_type_ids=None, attention_mask=attention_mask\n        )\n        logits = outputs[0]\n\n        output_dict = {\"logits\": logits}\n\n        if labels:\n            class_idx = labels[\"class_idx\"]\n            data_idx = labels[\"data_idx\"]\n\n            output_dict[\"class_idx\"] = class_idx\n            output_dict[\"data_idx\"] = data_idx\n\n            # Loss\n            loss = self.criterion(\n                logits.view(-1, self.num_classes), class_idx.view(-1)\n            )\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n\n    @overrides\n    def print_examples(self, index, inputs, predictions):\n        \"\"\"\n        Print evaluation examples\n\n        * Args:\n            index: data index\n            inputs: mini-batch inputs\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n\n        * Returns:\n            print(Sequence, Sequence Tokens, Target Class, Predicted Class)\n        \"\"\"\n\n        data_idx = inputs[\"labels\"][\"data_idx\"][index].item()\n        data_id = self._dataset.get_id(data_idx)\n\n        helper = self._dataset.helper\n\n        sequence_a = helper[\"examples\"][data_id][\"sequence_a\"]\n        sequence_a_tokens = helper[\"examples\"][data_id][\"sequence_a_tokens\"]\n        sequence_b = helper[\"examples\"][data_id][\"sequence_b\"]\n        sequence_b_tokens = helper[\"examples\"][data_id][\"sequence_b_tokens\"]\n        target_class_text = helper[\"examples\"][data_id][\"class_text\"]\n\n        pred_class_idx = predictions[data_id][\"class_idx\"]\n        pred_class_text = self._dataset.get_class_text_with_idx(pred_class_idx)\n\n        print()\n        print(\"- Sequence a:\", sequence_a)\n        print(\"- Sequence a Tokens:\", sequence_a_tokens)\n        if sequence_b:\n            print(\"- Sequence b:\", sequence_b)\n            print(\"- Sequence b Tokens:\", sequence_b_tokens)\n        print(\"- Target:\")\n        print(\"    Class:\", target_class_text)\n        print(\"- Predict:\")\n        print(\"    Class:\", pred_class_text)\n        print()\n"
  },
  {
    "path": "claf/model/sequence_classification/structured_self_attention.py",
    "content": "\nfrom overrides import overrides\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithTokenEmbedder\nfrom claf.model.sequence_classification.mixin import SequenceClassification\nfrom claf.modules import functional as f\n\n\n@register(\"model:structured_self_attention\")\nclass StructuredSelfAttention(SequenceClassification, ModelWithTokenEmbedder):\n    \"\"\"\n    Implementation of model presented in\n    A Structured Self-attentive Sentence Embedding\n    (https://arxiv.org/abs/1703.03130)\n\n    * Args:\n        token_embedder: used to embed the sequence\n        num_classes: number of classified classes\n\n    * Kwargs:\n        encoding_rnn_hidden_dim: hidden dimension of rnn (unidirectional)\n        encoding_rnn_num_layer: the number of rnn layers\n        encoding_rnn_dropout: rnn dropout probability\n        attention_dim: attention dimension  # d_a in the paper\n        num_attention_heads: number of attention heads  # r in the paper\n        sequence_embed_dim: dimension of sequence embedding\n        dropout: classification layer dropout\n        penalization_coefficient: penalty coefficient for frobenius norm\n    \"\"\"\n\n    def __init__(\n        self,\n        token_embedder,\n        num_classes,\n        encoding_rnn_hidden_dim=300,\n        encoding_rnn_num_layer=2,\n        encoding_rnn_dropout=0.,\n        attention_dim=350,\n        num_attention_heads=30,\n        sequence_embed_dim=2000,\n        dropout=0.5,\n        penalization_coefficient=1.,\n    ):\n        super(StructuredSelfAttention, self).__init__(token_embedder)\n\n        rnn_input_dim = token_embedder.get_embed_dim()\n\n        self.num_classes = num_classes\n\n        self.encoding_rnn_hidden_dim = encoding_rnn_hidden_dim * 2  # bidirectional\n        self.attention_dim = attention_dim\n        self.num_attention_heads = num_attention_heads\n        self.project_dim = sequence_embed_dim\n        self.dropout = dropout\n        self.penalization_coefficient = penalization_coefficient\n\n        self.encoder = nn.LSTM(\n            input_size=rnn_input_dim,\n            hidden_size=encoding_rnn_hidden_dim,\n            num_layers=encoding_rnn_num_layer,\n            dropout=encoding_rnn_dropout,\n            bidirectional=True,\n            batch_first=True,\n        )\n\n        self.A = nn.Sequential(\n            nn.Linear(self.encoding_rnn_hidden_dim, attention_dim, bias=False),\n            nn.Tanh(),\n            nn.Linear(attention_dim, num_attention_heads, bias=False),\n        )\n        self.fully_connected = nn.Sequential(\n            nn.Linear(self.encoding_rnn_hidden_dim * num_attention_heads, sequence_embed_dim),\n            nn.ReLU(),\n            nn.Dropout(dropout),\n        )\n        self.classifier = nn.Linear(sequence_embed_dim, num_classes)\n        self.criterion = nn.CrossEntropyLoss()\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n            {\"sequence\": [0, 3, 4, 1]}\n\n        * Kwargs:\n            label: label dictionary like below.\n            {\"class_idx\": 2, \"data_idx\": 0}\n             Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - sequence_embed: embedding vector of the sequence\n            - logits: representing unnormalized log probabilities of the class.\n\n            - class_idx: target class idx\n            - data_idx: data idx\n            - loss: a scalar loss to be optimized\n        \"\"\"\n\n        sequence = features[\"sequence\"]\n\n        # Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward\n        sequence_config = f.get_sorted_seq_config(sequence)\n\n        token_embed = self.token_embedder(sequence)\n\n        token_encodings = f.forward_rnn_with_pack(\n            self.encoder, token_embed, sequence_config\n        )  # [B, L, encoding_rnn_hidden_dim]\n\n        attention = self.A(token_encodings).transpose(1, 2)  # [B, num_attention_heads, L]\n\n        sequence_mask = f.get_mask_from_tokens(sequence).float()  # [B, L]\n        sequence_mask = sequence_mask.unsqueeze(1).expand_as(attention)\n        attention = F.softmax(f.add_masked_value(attention, sequence_mask) + 1e-13, dim=2)\n\n        attended_encodings = torch.bmm(\n            attention, token_encodings\n        )  # [B, num_attention_heads, sequence_embed_dim]\n        sequence_embed = self.fully_connected(\n            attended_encodings.view(attended_encodings.size(0), -1)\n        )  # [B, sequence_embed_dim]\n\n        logits = self.classifier(sequence_embed)  # [B, num_classes]\n\n        output_dict = {\"sequence_embed\": sequence_embed, \"logits\": logits}\n\n        if labels:\n            class_idx = labels[\"class_idx\"]\n            data_idx = labels[\"data_idx\"]\n\n            output_dict[\"class_idx\"] = class_idx\n            output_dict[\"data_idx\"] = data_idx\n\n            # Loss\n            loss = self.criterion(logits, class_idx)\n            loss += self.penalty(attention)\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n\n    def penalty(self, attention):\n        aa = torch.bmm(\n            attention, attention.transpose(1, 2)\n        )  # [B, num_attention_heads, num_attention_heads]\n        penalization_term = ((aa - aa.new_tensor(np.eye(aa.size(1)))) ** 2).sum() ** 0.5\n        return penalization_term * self.penalization_coefficient\n"
  },
  {
    "path": "claf/model/token_classification/__init__.py",
    "content": "\nfrom claf.model.token_classification.bert import BertForTokCls\n\n# fmt: off\n\n__all__ = [\n    \"BertForTokCls\",\n]\n\n# fmt: on\n"
  },
  {
    "path": "claf/model/token_classification/bert.py",
    "content": "\nfrom overrides import overrides\nimport torch.nn as nn\nfrom transformers import BertForTokenClassification\n\nfrom claf.data.data_handler import CachePath\nfrom claf.decorator import register\nfrom claf.model.base import ModelWithoutTokenEmbedder\nfrom claf.model.token_classification.mixin import TokenClassification\n\nfrom claf.model import cls_utils\n\n\n@register(\"model:bert_for_tok_cls\")\nclass BertForTokCls(TokenClassification, ModelWithoutTokenEmbedder):\n    \"\"\"\n    Implementation of Single Sentence Tagging model presented in\n    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n    (https://arxiv.org/abs/1810.04805)\n\n    * Args:\n        token_embedder: used to embed the sequence\n        num_tags: number of classified tags\n        ignore_tag_idx: index of the tag to ignore when calculating loss (tag pad value)\n\n    * Kwargs:\n        pretrained_model_name: the name of a pre-trained model\n        dropout: classification layer dropout\n    \"\"\"\n\n    def __init__(\n        self, token_makers, num_tags, ignore_tag_idx, pretrained_model_name=None, dropout=0.2\n    ):\n        super(BertForTokCls, self).__init__(token_makers)\n\n        self.use_transformers = True  # for optimizer's model parameters\n        self.ignore_tag_idx = ignore_tag_idx\n        self.num_tags = num_tags\n\n        self.model = BertForTokenClassification.from_pretrained(\n            pretrained_model_name, cache_dir=str(CachePath.ROOT), num_labels=num_tags,\n        )\n        self.criterion = nn.CrossEntropyLoss(ignore_index=ignore_tag_idx)\n\n    @overrides\n    def forward(self, features, labels=None):\n        \"\"\"\n        * Args:\n            features: feature dictionary like below.\n            {\n                \"bert_input\": {\n                    \"feature\": [\n                        [100, 576, 21, 45, 7, 91, 101, 0, 0, ...],\n                        ...,\n                    ]\n                }\n                \"token_type\": {\n                    \"feature\": [\n                        [0, 0, 0, 0, 0, 0, 0, 0, 0, ...],\n                        ...,\n                    ]\n                },\n                \"tagged_sub_token_idxs\": {\n                    [\n                        [1, 3, 4, 0, 0, 0, 0, 0, 0, ...],\n                        ...,\n                    ]\n                }\n            }\n\n        * Kwargs:\n            label: label dictionary like below.\n            {\n                \"class_idx\": [2, 1, 0, 4, 5, ...]\n                \"data_idx\": [2, 4, 5, 7, 2, 1, ...]\n            }\n            Do not calculate loss when there is no label. (inference/predict mode)\n\n        * Returns: output_dict (dict) consisting of\n            - sequence_embed: embedding vector of the sequence\n            - tag_logits: representing unnormalized log probabilities of the tags.\n\n            - tag_idxs: target class idx\n            - data_idx: data idx\n            - loss: a scalar loss to be optimized\n        \"\"\"\n\n        bert_inputs = features[\"bert_input\"][\"feature\"]\n        token_type_ids = features[\"token_type\"][\"feature\"]\n        tagged_sub_token_idxs = features[\"tagged_sub_token_idxs\"][\"feature\"]\n        num_tokens = features[\"num_tokens\"][\"feature\"]\n\n        attention_mask = (bert_inputs > 0).long()\n\n        outputs = self.model(\n            bert_inputs, token_type_ids=token_type_ids, attention_mask=attention_mask\n        )\n        logits = outputs[0]  # [B, L, num_tags]\n\n        # gather the logits of the tagged token positions.\n        gather_token_pos_idxs = tagged_sub_token_idxs.unsqueeze(-1).repeat(1, 1, self.num_tags)\n        token_tag_logits = logits.gather(1, gather_token_pos_idxs)  # [B, num_tokens, num_tags]\n\n        sliced_token_tag_logits = [token_tag_logits[idx, :n, :] for idx, n in enumerate(num_tokens)]\n\n        output_dict = {\"tag_logits\": sliced_token_tag_logits}\n\n        if labels:\n            tag_idxs = labels[\"tag_idxs\"]\n            data_idx = labels[\"data_idx\"]\n\n            output_dict[\"tag_idxs\"] = tag_idxs\n            output_dict[\"data_idx\"] = data_idx\n\n            # Loss\n            loss = self.criterion(token_tag_logits.view(-1, self.num_tags), tag_idxs.view(-1))\n            output_dict[\"loss\"] = loss.unsqueeze(0)  # NOTE: DataParallel concat Error\n\n        return output_dict\n\n    @overrides\n    def print_examples(self, index, inputs, predictions):\n        \"\"\"\n        Print evaluation examples\n\n        * Args:\n            index: data index\n            inputs: mini-batch inputs\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n\n        * Returns:\n            print(Sequence, Sequence Tokens, Target Tags, Target Slots, Predicted Tags, Predicted Slots)\n        \"\"\"\n\n        data_idx = inputs[\"labels\"][\"data_idx\"][index].item()\n        data_id = self._dataset.get_id(data_idx)\n\n        helper = self._dataset.helper\n        sequence = helper[\"examples\"][data_id][\"sequence\"]\n        target_tag_texts = helper[\"examples\"][data_id][\"tag_texts\"]\n\n        pred_tag_idxs = predictions[data_id][\"tag_idxs\"]\n        pred_tag_texts = self._dataset.get_tag_texts_with_idxs(pred_tag_idxs)\n\n        sequence_tokens = helper[\"examples\"][data_id][\"sequence_sub_tokens\"]\n\n        print()\n        print(\"- Sequence:\", sequence)\n        print(\"- Sequence Tokens:\", sequence_tokens)\n        print(\"- Target:\")\n        print(\"    Tags:\", target_tag_texts)\n        print(\"    (Slots)\", cls_utils.get_tag_dict(sequence, target_tag_texts))\n        print(\"- Predict:\")\n        print(\"    Tags:\", pred_tag_texts)\n        print(\"    (Slots)\", cls_utils.get_tag_dict(sequence, pred_tag_texts))\n        print()\n"
  },
  {
    "path": "claf/model/token_classification/mixin.py",
    "content": "\nfrom pathlib import Path\nimport logging\n\nimport numpy as np\nimport torch\nimport pycm\nfrom pycm.pycm_obj import pycmVectorError\n\nfrom claf.decorator import arguments_required\nimport claf.utils as common_utils\nfrom claf.model import cls_utils\nfrom claf.metric.classification import macro_f1, macro_precision, macro_recall\nfrom seqeval.metrics import accuracy_score as conlleval_accuracy\nfrom seqeval.metrics import f1_score as conlleval_f1\n\nlogger = logging.getLogger(__name__)\n\n\nclass TokenClassification:\n    \"\"\" Token Classification Mixin Class \"\"\"\n\n    def make_predictions(self, output_dict):\n        \"\"\"\n        Make predictions with model's output_dict\n\n        * Args:\n            output_dict: model's output dictionary consisting of\n                - sequence_embed: embedding vector of the sequence\n                - tag_logits: representing unnormalized log probabilities of the tag\n\n                - tag_idxs: target tag idxs\n                - data_idx: data idx\n                - loss: a scalar loss to be optimized\n\n        * Returns:\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - tag_idxs\n        \"\"\"\n\n        data_indices = output_dict[\"data_idx\"]\n        pred_tag_logits = output_dict[\"tag_logits\"]\n        pred_tag_idxs = [\n            torch.argmax(pred_tag_logit, dim=-1).tolist() for pred_tag_logit in pred_tag_logits\n        ]\n\n        predictions = {\n            self._dataset.get_id(data_idx.item()): {\"tag_idxs\": pred_tag_idx}\n            for data_idx, pred_tag_idx in zip(list(data_indices.data), pred_tag_idxs)\n        }\n\n        return predictions\n\n    @arguments_required([\"sequence\"])\n    def predict(self, output_dict, arguments, helper):\n        \"\"\"\n        Inference by raw_feature\n\n        * Args:\n            output_dict: model's output dictionary consisting of\n                - sequence_embed: embedding vector of the sequence\n                - tag_logits: representing unnormalized log probabilities of the tags.\n            arguments: arguments dictionary consisting of user_input\n            helper: dictionary to get the classification result, consisting of\n                - tag_idx2text: dictionary converting tag_idx to tag_text\n\n        * Returns: output dict (dict) consisting of\n            - tag_logits: representing unnormalized log probabilities of the tags\n            - tag_idxs: predicted tag idxs\n            - tag_texts: predicted tag texts\n            - tag_slots: predicted tag slots\n        \"\"\"\n\n        sequence = arguments[\"sequence\"]\n        tag_logits = output_dict[\"tag_logits\"][0]\n        tag_idxs = [tag_logit.argmax(dim=-1) for tag_logit in tag_logits]\n        tag_texts = [helper[\"tag_idx2text\"][tag_idx.item()] for tag_idx in tag_idxs]\n\n        return {\n            \"tag_logits\": tag_logits,\n            \"tag_idxs\": tag_idxs,\n            \"tag_texts\": tag_texts,\n            \"tag_dict\": cls_utils.get_tag_dict(sequence, tag_texts),\n        }\n\n    def make_metrics(self, predictions):\n        \"\"\"\n        Make metrics with prediction dictionary\n\n        * Args:\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - tag_idxs\n\n        * Returns:\n            metrics: metric dictionary consisting of\n                - 'accuracy': sequence level accuracy\n                - 'tag_accuracy': tag level accuracy\n                - 'macro_f1': tag prediction macro(unweighted mean) f1\n                - 'macro_precision': tag prediction macro(unweighted mean) precision\n                - 'macro_recall': tag prediction macro(unweighted mean) recall\n        \"\"\"\n\n        pred_tag_idxs_list = []\n        target_tag_idxs_list = []\n\n        accurate_sequence = []\n\n        for data_idx, pred in predictions.items():\n            target = self._dataset.get_ground_truth(data_idx)\n\n            pred_tag_idxs_list.append(pred[\"tag_idxs\"])\n            target_tag_idxs_list.append(target[\"tag_idxs\"])\n\n            accurate_sequence.append(\n                1 if (np.asarray(target[\"tag_idxs\"]) == np.asarray(pred[\"tag_idxs\"])).all() else 0\n            )\n\n        pred_tags = [\n            [self._dataset.tag_idx2text[tag_idx] for tag_idx in tag_idxs] for tag_idxs in pred_tag_idxs_list\n        ]\n        target_tags = [\n            [self._dataset.tag_idx2text[tag_idx] for tag_idx in tag_idxs] for tag_idxs in target_tag_idxs_list\n        ]\n\n        flat_pred_tags = list(common_utils.flatten(pred_tags))\n        flat_target_tags = list(common_utils.flatten(target_tags))\n\n        # confusion matrix\n        try:\n            pycm_obj = pycm.ConfusionMatrix(actual_vector=flat_target_tags, predict_vector=flat_pred_tags)\n        except pycmVectorError as e:\n            if str(e) == \"Number of the classes is lower than 2\":\n                logger.warning(\"Number of tags in the batch is 1. Sanity check is highly recommended.\")\n                return {\n                    \"accuracy\": 1.,\n                    \"tag_accuracy\": 1.,\n\n                    \"macro_f1\": 1.,\n                    \"macro_precision\": 1.,\n                    \"macro_recall\": 1.,\n\n                    \"conlleval_accuracy\": 1.,\n                    \"conlleval_f1\": 1.,\n                }\n            raise\n\n        self.write_predictions(\n            {\"target\": flat_target_tags, \"predict\": flat_pred_tags}, pycm_obj=pycm_obj\n        )\n\n        sequence_accuracy = sum(accurate_sequence) / len(accurate_sequence)\n\n        metrics = {\n            \"accuracy\": sequence_accuracy,\n            \"tag_accuracy\": pycm_obj.Overall_ACC,\n\n            \"macro_f1\": macro_f1(pycm_obj),\n            \"macro_precision\": macro_precision(pycm_obj),\n            \"macro_recall\": macro_recall(pycm_obj),\n\n            \"conlleval_accuracy\": conlleval_accuracy(target_tags, pred_tags),\n            \"conlleval_f1\": conlleval_f1(target_tags, pred_tags),\n        }\n\n        return metrics\n\n    def write_predictions(self, predictions, file_path=None, is_dict=True, pycm_obj=None):\n        \"\"\"\n        Override write_predictions() in ModelBase to log confusion matrix\n        \"\"\"\n\n        super(TokenClassification, self).write_predictions(\n            predictions, file_path=file_path, is_dict=is_dict\n        )\n\n        data_type = \"train\" if self.training else \"valid\"\n\n        if pycm_obj is not None:\n            stats_file_path = f\"predictions-{data_type}-{self._train_counter.get_display()}-stats\"\n            pycm_obj.save_csv(str(Path(self._log_dir) / \"predictions\" / stats_file_path))\n\n            confusion_matrix_file_path = (\n                f\"predictions-{data_type}-{self._train_counter.get_display()}-confusion_matrix\"\n            )\n            cls_utils.write_confusion_matrix_to_csv(\n                str(Path(self._log_dir) / \"predictions\" / confusion_matrix_file_path), pycm_obj\n            )\n\n    def print_examples(self, index, inputs, predictions):\n        \"\"\"\n        Print evaluation examples\n\n        * Args:\n            index: data index\n            inputs: mini-batch inputs\n            predictions: prediction dictionary consisting of\n                - key: 'id' (sequence id)\n                - value: dictionary consisting of\n                    - class_idx\n\n        * Returns:\n            print(Sequence, Target Tags, Target Slots, Predicted Tags, Predicted Slots)\n        \"\"\"\n\n        data_idx = inputs[\"labels\"][\"data_idx\"][index].item()\n        data_id = self._dataset.get_id(data_idx)\n\n        helper = self._dataset.helper\n        sequence = helper[\"examples\"][data_id][\"sequence\"]\n        target_tag_texts = helper[\"examples\"][data_id][\"tag_texts\"]\n\n        pred_tag_idxs = predictions[data_id][\"tag_idxs\"]\n        pred_tag_texts = self._dataset.get_tag_texts_with_idxs(pred_tag_idxs)\n\n        print()\n        print(\"- Sequence:\", sequence)\n        print(\"- Target:\")\n        print(\"    Tags:\", target_tag_texts)\n        print(\"    (Slots)\", cls_utils.get_tag_dict(sequence, target_tag_texts))\n        print(\"- Predict:\")\n        print(\"    Tags:\", pred_tag_texts)\n        print(\"    (Slots)\", cls_utils.get_tag_dict(sequence, pred_tag_texts))\n        print()\n"
  },
  {
    "path": "claf/modules/__init__.py",
    "content": ""
  },
  {
    "path": "claf/modules/activation.py",
    "content": "\nimport torch.nn as nn\n\n\ndef get_activation_fn(name):\n    \"\"\" PyTorch built-in activation functions \"\"\"\n\n    activation_functions = {\n        \"linear\": lambda: lambda x: x,\n        \"relu\": nn.ReLU,\n        \"relu6\": nn.ReLU6,\n        \"elu\": nn.ELU,\n        \"prelu\": nn.PReLU,\n        \"leaky_relu\": nn.LeakyReLU,\n        \"threshold\": nn.Threshold,\n        \"hardtanh\": nn.Hardtanh,\n        \"sigmoid\": nn.Sigmoid,\n        \"tanh\": nn.Tanh,\n        \"log_sigmoid\": nn.LogSigmoid,\n        \"softplus\": nn.Softplus,\n        \"softshrink\": nn.Softshrink,\n        \"softsign\": nn.Softsign,\n        \"tanhshrink\": nn.Tanhshrink,\n    }\n\n    if name not in activation_functions:\n        raise ValueError(\n            f\"'{name}' is not included in activation_functions. use below one. \\n {activation_functions.keys()}\"\n        )\n\n    return activation_functions[name]\n"
  },
  {
    "path": "claf/modules/attention/__init__.py",
    "content": "\nfrom .bi_attention import BiAttention\nfrom .co_attention import CoAttention\nfrom .docqa_attention import DocQAAttention\nfrom .multi_head_attention import MultiHeadAttention\nfrom .seq_attention import SeqAttnMatch, LinearSeqAttn, BilinearSeqAttn\n\n__all__ = [\n    \"BiAttention\",\n    \"CoAttention\",\n    \"MultiHeadAttention\",\n    \"DocQAAttention\",\n    \"SeqAttnMatch\",\n    \"LinearSeqAttn\",\n    \"BilinearSeqAttn\",\n]\n"
  },
  {
    "path": "claf/modules/attention/bi_attention.py",
    "content": "\nimport torch\nimport torch.nn as nn\n\nimport claf.modules.functional as f\n\n\nclass BiAttention(nn.Module):\n    \"\"\"\n    Attention Flow Layer\n        in BiDAF (https://arxiv.org/pdf/1611.01603.pdf)\n\n    The Similarity matrix\n    Context-to-query Attention (C2Q)\n    Query-to-context Attention (Q2C)\n\n    * Args:\n        model_dim: The number of module dimension\n    \"\"\"\n\n    def __init__(self, model_dim):\n        super(BiAttention, self).__init__()\n        self.model_dim = model_dim\n        self.W = nn.Linear(6 * model_dim, 1, bias=False)\n\n    def forward(self, context, context_mask, query, query_mask):\n        c, c_mask, q, q_mask = context, context_mask, query, query_mask\n\n        S = self._make_similiarity_matrix(c, q)  # (B, C_L, Q_L)\n        masked_S = f.add_masked_value(S, query_mask.unsqueeze(1), value=-1e7)\n\n        c2q = self._context2query(S, q, q_mask)\n        q2c = self._query2context(masked_S.max(dim=-1)[0], c, c_mask)\n\n        # [h; u˜; h◦u˜; h◦h˜] ~ (B, C_L, 8d)\n        G = torch.cat((c, c2q, c * c2q, c * q2c), dim=-1)\n        return G\n\n    def _make_similiarity_matrix(self, c, q):\n        # B: batch_size, C_L: context_maxlen, Q_L: query_maxlen\n        B, C_L, Q_L = c.size(0), c.size(1), q.size(1)\n\n        matrix_shape = (B, C_L, Q_L, self.model_dim * 2)\n\n        c_aug = c.unsqueeze(2).expand(matrix_shape)  # (B, C_L, Q_L, 2d)\n        q_aug = q.unsqueeze(1).expand(matrix_shape)  # (B, C_L, Q_L, 2d)\n\n        c_q = torch.mul(c_aug, q_aug)  # element-wise multiplication\n\n        concated_vector = torch.cat((c_aug, q_aug, c_q), dim=3)  # [h; u; h◦u]\n        return self.W(concated_vector).view(c.size(0), C_L, Q_L)\n\n    def _context2query(self, S, q, q_mask):\n        attention = f.last_dim_masked_softmax(S, q_mask)  # (B, C_L, Q_L)\n        c2q = f.weighted_sum(attention=attention, matrix=q)  # (B, C_L, 2d)\n\n        return c2q\n\n    def _query2context(self, S, c, c_mask):\n        attention = f.masked_softmax(S, c_mask)  # (B, C_L)\n        q2c = f.weighted_sum(attention=attention, matrix=c)\n\n        return q2c.unsqueeze(1).expand(c.size())  # (B, C_L, 2d)\n"
  },
  {
    "path": "claf/modules/attention/co_attention.py",
    "content": "\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nimport claf.modules.functional as f\n\n\nclass CoAttention(nn.Module):\n    \"\"\"\n    CoAttention encoder\n        in Dynamic Coattention Networks For Question Answering (https://arxiv.org/abs/1611.01604)\n\n    check the Figure 2 in paper\n\n    * Args:\n        embed_dim: the number of input embedding dimension\n    \"\"\"\n\n    def __init__(self, embed_dim):\n        super(CoAttention, self).__init__()\n\n        self.W_0 = nn.Linear(embed_dim * 3, 1, bias=False)\n\n    def forward(self, context_embed, question_embed, context_mask=None, question_mask=None):\n        C, Q = context_embed, question_embed\n        B, C_L, Q_L, D = C.size(0), C.size(1), Q.size(1), Q.size(2)\n\n        similarity_matrix_shape = torch.zeros(B, C_L, Q_L, D)  # (B, C_L, Q_L, D)\n\n        C_ = C.unsqueeze(2).expand_as(similarity_matrix_shape)\n        Q_ = Q.unsqueeze(1).expand_as(similarity_matrix_shape)\n        C_Q = torch.mul(C_, Q_)\n\n        S = self.W_0(torch.cat([C_, Q_, C_Q], 3)).squeeze(3)  # (B, C_L, Q_L)\n\n        S_question = S\n        if question_mask is not None:\n            S_question = f.add_masked_value(S_question, question_mask.unsqueeze(1), value=-1e7)\n        S_q = F.softmax(S_question, 2)  # (B, C_L, Q_L)\n\n        S_context = S.transpose(1, 2)\n        if context_mask is not None:\n            S_context = f.add_masked_value(S_context, context_mask.unsqueeze(1), value=-1e7)\n        S_c = F.softmax(S_context, 2)  # (B, Q_L, C_L)\n\n        A = torch.bmm(S_q, Q)  # context2query (B, C_L, D)\n        B = torch.bmm(S_q, S_c).bmm(C)  # query2context (B, Q_L, D)\n        out = torch.cat([C, A, C * A, C * B], dim=-1)\n        return out\n"
  },
  {
    "path": "claf/modules/attention/docqa_attention.py",
    "content": "import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom claf.modules import initializer\nimport claf.modules.functional as f\n\n\nclass DocQAAttention(nn.Module):\n    \"\"\"\n        Bi-Attention Layer + (Self-Attention)\n            in DocumentQA (https://arxiv.org/abs/1710.10723)\n\n        * Args:\n            rnn_dim: the number of GRU cell hidden size\n            linear_dim: the number of linear hidden size\n\n        * Kwargs:\n            self_attn: (bool) self-attention\n            weight_init: (bool) weight initialization\n\n    \"\"\"\n\n    def __init__(self, rnn_dim, linear_dim, self_attn=False, weight_init=True):\n        super(DocQAAttention, self).__init__()\n        self.self_attn = self_attn\n\n        self.input_w = nn.Linear(2 * rnn_dim, 1, bias=False)\n        self.key_w = nn.Linear(2 * rnn_dim, 1, bias=False)\n\n        self.dot_w = nn.Parameter(torch.randn(1, 1, rnn_dim * 2))\n        torch.nn.init.xavier_uniform_(self.dot_w)\n\n        self.bias = nn.Parameter(torch.FloatTensor([[1]]))\n        self.diag_mask = nn.Parameter(torch.eye(5000))  # NOTE: (hard-code) max_sequence_length\n\n        if weight_init:\n            initializer.weight(self.input_w)\n            initializer.weight(self.key_w)\n\n    def forward(self, x, x_mask, key, key_mask):\n        S = self._trilinear(x, key)\n\n        if self.self_attn:\n            seq_length = x.size(1)\n            diag_mask = self.diag_mask.narrow(0, 0, seq_length).narrow(1, 0, seq_length)\n            joint_mask = 1 - self._compute_attention_mask(x_mask, key_mask)\n            mask = torch.clamp(diag_mask + joint_mask, 0, 1)\n            masked_S = S + mask * (-1e7)\n            x2key = self._x2key(masked_S, key, key_mask)\n            return torch.cat((x, x2key, x * x2key), dim=-1)\n        else:\n            joint_mask = 1 - self._compute_attention_mask(x_mask, key_mask)\n            masked_S = S + joint_mask * (-1e7)\n            x2key = self._x2key(masked_S, key, key_mask)\n\n            masked_S = f.add_masked_value(S, key_mask.unsqueeze(1), value=-1e7)\n            key2x = self._key2x(masked_S.max(dim=-1)[0], x, x_mask)\n            return torch.cat((x, x2key, x * x2key, x * key2x), dim=-1)\n\n    def _compute_attention_mask(self, x_mask, key_mask):\n        x_mask = x_mask.unsqueeze(2)\n        key_mask = key_mask.unsqueeze(1)\n        joint_mask = torch.mul(x_mask, key_mask)\n        return joint_mask\n\n    def _trilinear(self, x, key):\n        B, X_L, K_L = x.size(0), x.size(1), key.size(1)\n\n        matrix_shape = (B, X_L, K_L)\n        x_logits = self.input_w(x).expand(matrix_shape)\n        key_logits = self.key_w(key).transpose(1, 2).expand(matrix_shape)\n\n        x_dots = torch.mul(x, self.dot_w)\n        x_key = torch.matmul(x_dots, key.transpose(1, 2))\n\n        return x_logits + key_logits + x_key\n\n    def _x2key(self, S, key, key_mask):\n        if self.self_attn:\n            bias = torch.exp(self.bias)\n            S = torch.exp(S)\n            attention = S / (S.sum(dim=-1, keepdim=True).expand(S.size()) + bias.expand(S.size()))\n        else:\n            attention = F.softmax(S, dim=-1)  # (B, C_L, Q_L)\n\n        x2key = f.weighted_sum(attention=attention, matrix=key)  # (B, C_L, 2d)\n        return x2key\n\n    def _key2x(self, S, x, x_mask):\n        attention = f.masked_softmax(S, x_mask)  # (B, C_L)\n        key2x = f.weighted_sum(attention=attention, matrix=x)\n        return key2x.unsqueeze(1).expand(x.size())  # (B, C_L, 2d)\n"
  },
  {
    "path": "claf/modules/attention/multi_head_attention.py",
    "content": "\nimport math\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nimport claf.modules.functional as f\n\n\nclass MultiHeadAttention(nn.Module):\n    \"\"\"\n    Transformer's Multi-Head Attention\n        in \"Attention is All You Need\" (https://arxiv.org/abs/1706.03762)\n\n    * Kwargs:\n        num_head: the number of Head\n        model_dim: the number of model dimension\n        linear_key_dim: the number of linear key dimemsion\n        linear_value_dim: the number of linear value dimension\n    \"\"\"\n\n    def __init__(\n        self, num_head=8, model_dim=100, dropout=0.1, linear_key_dim=None, linear_value_dim=None\n    ):\n        super(MultiHeadAttention, self).__init__()\n        if linear_key_dim is None:\n            linear_key_dim = model_dim\n        if linear_value_dim is None:\n            linear_value_dim = model_dim\n\n        assert linear_key_dim % num_head == 0\n        assert linear_value_dim % num_head == 0\n\n        self.model_dim = model_dim\n        self.num_head = num_head\n        self.projection = nn.ModuleList(\n            [\n                nn.Linear(model_dim, linear_key_dim, bias=False),  # query\n                nn.Linear(model_dim, linear_key_dim, bias=False),  # key\n                nn.Linear(model_dim, linear_value_dim, bias=False),  # value\n            ]\n        )\n        self.out_linear = nn.Linear(linear_value_dim, model_dim)\n\n        if dropout > 0:\n            self.dropout = nn.Dropout(dropout)\n        else:\n            self.dropout = lambda x: x\n\n    def forward(self, q, k, v, mask=None):\n        q, k, v = self._linear_projection(q, k, v)\n        qs, ks, vs = self._split_heads(q, k, v)\n        outputs = self._scaled_dot_product(qs, ks, vs, mask=mask)\n        output = self._concat_heads(outputs)\n        return self.out_linear(output)\n\n    def _linear_projection(self, query, key, value):\n        q = self.projection[0](query)\n        k = self.projection[1](key)\n        v = self.projection[2](value)\n        return q, k, v\n\n    def _split_heads(self, query, key, value):\n        B = query.size(0)\n        qs, ks, vs = [\n            x.view(B, -1, self.num_head, x.size(-1) // self.num_head).transpose(1, 2)\n            for x in [query, key, value]\n        ]\n        return qs, ks, vs\n\n    def _scaled_dot_product(self, query, key, value, mask=None):\n        K_D = query.size(-1)\n\n        scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(K_D)\n\n        if mask is not None:\n            mask = mask.unsqueeze(1).unsqueeze(1)  # [B, #H, C_L, D]\n            scores = f.add_masked_value(scores, mask, value=-1e7)\n\n        attn = F.softmax(scores, dim=-1)\n        attn = self.dropout(attn)\n        return torch.matmul(attn, value)\n\n    def _concat_heads(self, outputs):\n        B = outputs.size(0)\n        num_head, dim = outputs.size()[-2:]\n\n        return outputs.transpose(1, 2).contiguous().view(B, -1, self.num_head * dim)\n"
  },
  {
    "path": "claf/modules/attention/seq_attention.py",
    "content": "#!/usr/bin/env python3\n# Copyright 2017-present, Facebook, Inc.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"\noriginal code from: https://github.com/facebookresearch/DrQA/blob/master/drqa/reader/layers.py\n\"\"\"\n\nimport torch.nn as nn\nimport torch.nn.functional as F\n\n\nclass SeqAttnMatch(nn.Module):\n    \"\"\"\n    Given sequences X and Y, match sequence Y to each element in X.\n    * o_i = sum(alpha_j * y_j) for i in X\n    * alpha_j = softmax(y_j * x_i)\n    \"\"\"\n\n    def __init__(self, embed_dim, identity=False):\n        super(SeqAttnMatch, self).__init__()\n        if not identity:\n            self.linear = nn.Linear(embed_dim, embed_dim)\n        else:\n            self.linear = None\n\n    def forward(self, x, y, y_mask):\n        if self.linear:\n            x_proj = self.linear(x.view(-1, x.size(2))).view(x.size())\n            x_proj = F.relu(x_proj)\n            y_proj = self.linear(y.view(-1, y.size(2))).view(y.size())\n            y_proj = F.relu(y_proj)\n        else:\n            x_proj = x\n            y_proj = y\n\n        scores = x_proj.bmm(y_proj.transpose(2, 1))\n\n        y_mask = y_mask.unsqueeze(1).expand(scores.size())\n        scores = scores.masked_fill((y_mask == 0), -1e30)\n\n        alpha_flat = F.softmax(scores.view(-1, y.size(1)), -1)\n        alpha = alpha_flat.view(-1, x.size(1), y.size(1))\n\n        matched_seq = alpha.bmm(y)\n        return matched_seq\n\n\nclass LinearSeqAttn(nn.Module):\n    \"\"\"\n    Self attention over a sequence:\n    * o_i = softmax(Wx_i) for x_i in X.\n    \"\"\"\n\n    def __init__(self, input_size):\n        super(LinearSeqAttn, self).__init__()\n        self.linear = nn.Linear(input_size, 1)\n\n    def forward(self, x, x_mask):\n        x_flat = x.contiguous().view(-1, x.size(-1))\n        scores = self.linear(x_flat).view(x.size(0), x.size(1))\n        scores.data.masked_fill_((x_mask == 0), -1e30)\n        alpha = F.softmax(scores, dim=-1)\n        return alpha\n\n\nclass BilinearSeqAttn(nn.Module):\n    \"\"\"\n    A bilinear attention layer over a sequence X w.r.t y:\n    * o_i = softmax(x_i'Wy) for x_i in X.\n    Optionally don't normalize output weights.\n    \"\"\"\n\n    def __init__(self, x_size, y_size, identity=False, normalize=True):\n        super(BilinearSeqAttn, self).__init__()\n        self.normalize = normalize\n\n        if not identity:\n            self.linear = nn.Linear(y_size, x_size)\n        else:\n            self.linear = None\n\n    def forward(self, x, y, x_mask):\n        Wy = self.linear(y) if self.linear is not None else y\n        xWy = x.bmm(Wy.unsqueeze(2)).squeeze(2)\n        xWy.data.masked_fill_((x_mask == 0), -1e30)\n        if self.normalize:\n            if self.training:\n                alpha = F.log_softmax(xWy, dim=-1)\n            else:\n                alpha = F.softmax(xWy, dim=-1)\n        else:\n            alpha = xWy.exp()\n        return alpha\n"
  },
  {
    "path": "claf/modules/conv/__init__.py",
    "content": "\nfrom .depthwise_separable_conv import DepSepConv\nfrom .pointwise_conv import PointwiseConv\n\n\n__all__ = [\"DepSepConv\", \"PointwiseConv\"]\n"
  },
  {
    "path": "claf/modules/conv/depthwise_separable_conv.py",
    "content": "\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom .pointwise_conv import PointwiseConv\n\n\nclass DepSepConv(nn.Module):\n    \"\"\"\n    Depthwise Separable Convolutions\n        in Xception: Deep Learning with Depthwise Separable Convolutions (https://arxiv.org/abs/1610.02357)\n\n    depthwise -> pointwise (1x1 conv)\n\n    * Args:\n        input_size: the number of input tensor's dimension\n        num_filters: the number of convolution filter\n        kernel_size: the number of convolution kernel size\n    \"\"\"\n\n    def __init__(self, input_size=None, num_filters=None, kernel_size=None):\n        super(DepSepConv, self).__init__()\n\n        self.depthwise = nn.Conv1d(\n            in_channels=input_size,\n            out_channels=input_size,\n            kernel_size=kernel_size,\n            groups=input_size,\n            padding=kernel_size // 2,\n        )\n        nn.init.kaiming_normal_(self.depthwise.weight)\n        self.pointwise = PointwiseConv(input_size=input_size, num_filters=num_filters)\n        self.activation_fn = F.relu\n\n    def forward(self, x):\n        x = self.depthwise(x.transpose(1, 2))\n        x = self.pointwise(x.transpose(1, 2))\n        x = self.activation_fn(x)\n        return x\n"
  },
  {
    "path": "claf/modules/conv/pointwise_conv.py",
    "content": "\nimport torch\nimport torch.nn as nn\n\n\nclass PointwiseConv(nn.Module):\n    \"\"\"\n    Pointwise Convolution (1x1 Conv)\n\n    Convolution 1 Dimension (Faster version)\n    (cf. https://github.com/huggingface/pytorch-openai-transformer-lm/blob/\\\n        eafc28abdfadfa0732f03a0fc65805c5bfb2ffe7/model_pytorch.py#L45)\n\n    * Args:\n        input_size: the number of input tensor's dimension\n        num_filters: the number of convolution filter\n    \"\"\"\n\n    # nf: num_filters, rf: kernel_size, nx: in_channels\n    def __init__(self, input_size, num_filters):\n        super(PointwiseConv, self).__init__()\n\n        self.kernel_size = 1\n        self.num_filters = num_filters\n\n        weight = torch.empty(input_size, num_filters)\n        nn.init.normal_(weight, std=0.02)\n        self.weight = nn.Parameter(weight)\n        self.bias = nn.Parameter(torch.zeros(num_filters))\n\n    def forward(self, x):\n        size_out = x.size()[:-1] + (self.num_filters,)\n        x = torch.addmm(self.bias, x.contiguous().view(-1, x.size(-1)), self.weight)\n        x = x.view(*size_out)\n        return x\n"
  },
  {
    "path": "claf/modules/encoder/__init__.py",
    "content": "\nfrom .positional import PositionalEncoding\nfrom .lstm_cell_with_projection import LstmCellWithProjection, _EncoderBase\n\n\n__all__ = [\"PositionalEncoding\", \"LstmCellWithProjection\", \"_EncoderBase\"]\n"
  },
  {
    "path": "claf/modules/encoder/lstm_cell_with_projection.py",
    "content": "\"\"\"\nThis code is from allenai/allennlp\n(https://github.com/allenai/allennlp/blob/master/allennlp/modules/lstm_cell_with_projection.py)\n\"\"\"\n\nimport itertools\n\nfrom typing import Callable, List, Tuple, Union, Optional\nimport torch\nfrom torch.nn.utils.rnn import pack_padded_sequence, PackedSequence\n\n\nclass LstmCellWithProjection(torch.nn.Module):  # pragma: no cover\n    \"\"\"\n    An LSTM with Recurrent Dropout and a projected and clipped hidden state and\n    memory. Note: this implementation is slower than the native Pytorch LSTM because\n    it cannot make use of CUDNN optimizations for stacked RNNs due to and\n    variational dropout and the custom nature of the cell state.\n    Parameters\n    ----------\n    input_size : ``int``, required.\n        The dimension of the inputs to the LSTM.\n    hidden_size : ``int``, required.\n        The dimension of the outputs of the LSTM.\n    cell_size : ``int``, required.\n        The dimension of the memory cell used for the LSTM.\n    go_forward: ``bool``, optional (default = True)\n        The direction in which the LSTM is applied to the sequence.\n        Forwards by default, or backwards if False.\n    recurrent_dropout_probability: ``float``, optional (default = 0.0)\n        The dropout probability to be used in a dropout scheme as stated in\n        `A Theoretically Grounded Application of Dropout in Recurrent Neural Networks\n        <https://arxiv.org/abs/1512.05287>`_ . Implementation wise, this simply\n        applies a fixed dropout mask per sequence to the recurrent connection of the\n        LSTM.\n    state_projection_clip_value: ``float``, optional, (default = None)\n        The magnitude with which to clip the hidden_state after projecting it.\n    memory_cell_clip_value: ``float``, optional, (default = None)\n        The magnitude with which to clip the memory cell.\n    Returns\n    -------\n    output_accumulator : ``torch.FloatTensor``\n        The outputs of the LSTM for each timestep. A tensor of shape\n        (batch_size, max_timesteps, hidden_size) where for a given batch\n        element, all outputs past the sequence length for that batch are\n        zero tensors.\n    final_state: ``Tuple[torch.FloatTensor, torch.FloatTensor]``\n        The final (state, memory) states of the LSTM, with shape\n        (1, batch_size, hidden_size) and  (1, batch_size, cell_size)\n        respectively. The first dimension is 1 in order to match the Pytorch\n        API for returning stacked LSTM states.\n    \"\"\"\n\n    def __init__(\n        self,\n        input_size: int,\n        hidden_size: int,\n        cell_size: int,\n        go_forward: bool = True,\n        recurrent_dropout_probability: float = 0.0,\n        memory_cell_clip_value: Optional[float] = None,\n        state_projection_clip_value: Optional[float] = None,\n    ) -> None:\n        super(LstmCellWithProjection, self).__init__()\n        # Required to be wrapped with a :class:`PytorchSeq2SeqWrapper`.\n        self.input_size = input_size\n        self.hidden_size = hidden_size\n        self.cell_size = cell_size\n\n        self.go_forward = go_forward\n        self.state_projection_clip_value = state_projection_clip_value\n        self.memory_cell_clip_value = memory_cell_clip_value\n        self.recurrent_dropout_probability = recurrent_dropout_probability\n\n        # We do the projections for all the gates all at once.\n        self.input_linearity = torch.nn.Linear(input_size, 4 * cell_size, bias=False)\n        self.state_linearity = torch.nn.Linear(hidden_size, 4 * cell_size, bias=True)\n\n        # Additional projection matrix for making the hidden state smaller.\n        self.state_projection = torch.nn.Linear(cell_size, hidden_size, bias=False)\n        self.reset_parameters()\n\n    def reset_parameters(self):\n        # Use sensible default initializations for parameters.\n        block_orthogonal(self.input_linearity.weight.data, [self.cell_size, self.input_size])\n        block_orthogonal(self.state_linearity.weight.data, [self.cell_size, self.hidden_size])\n\n        self.state_linearity.bias.data.fill_(0.0)\n        # Initialize forget gate biases to 1.0 as per An Empirical\n        # Exploration of Recurrent Network Architectures, (Jozefowicz, 2015).\n        self.state_linearity.bias.data[self.cell_size : 2 * self.cell_size].fill_(1.0)\n\n    def forward(\n        self,  # pylint: disable=arguments-differ\n        inputs: torch.FloatTensor,\n        batch_lengths: List[int],\n        initial_state: Optional[Tuple[torch.Tensor, torch.Tensor]] = None,\n    ):\n        \"\"\"\n        Parameters\n        ----------\n        inputs : ``torch.FloatTensor``, required.\n            A tensor of shape (batch_size, num_timesteps, input_size)\n            to apply the LSTM over.\n        batch_lengths : ``List[int]``, required.\n            A list of length batch_size containing the lengths of the sequences in batch.\n        initial_state : ``Tuple[torch.Tensor, torch.Tensor]``, optional, (default = None)\n            A tuple (state, memory) representing the initial hidden state and memory\n            of the LSTM. The ``state`` has shape (1, batch_size, hidden_size) and the\n            ``memory`` has shape (1, batch_size, cell_size).\n        Returns\n        -------\n        output_accumulator : ``torch.FloatTensor``\n            The outputs of the LSTM for each timestep. A tensor of shape\n            (batch_size, max_timesteps, hidden_size) where for a given batch\n            element, all outputs past the sequence length for that batch are\n            zero tensors.\n        final_state : ``Tuple[``torch.FloatTensor, torch.FloatTensor]``\n            A tuple (state, memory) representing the initial hidden state and memory\n            of the LSTM. The ``state`` has shape (1, batch_size, hidden_size) and the\n            ``memory`` has shape (1, batch_size, cell_size).\n        \"\"\"\n        batch_size = inputs.size()[0]\n        total_timesteps = inputs.size()[1]\n\n        output_accumulator = inputs.new_zeros(batch_size, total_timesteps, self.hidden_size)\n\n        if initial_state is None:\n            full_batch_previous_memory = inputs.new_zeros(batch_size, self.cell_size)\n            full_batch_previous_state = inputs.new_zeros(batch_size, self.hidden_size)\n        else:\n            full_batch_previous_state = initial_state[0].squeeze(0)\n            full_batch_previous_memory = initial_state[1].squeeze(0)\n\n        current_length_index = batch_size - 1 if self.go_forward else 0\n        if self.recurrent_dropout_probability > 0.0 and self.training:\n            dropout_mask = get_dropout_mask(\n                self.recurrent_dropout_probability, full_batch_previous_state\n            )\n        else:\n            dropout_mask = None\n\n        for timestep in range(total_timesteps):\n            # The index depends on which end we start.\n            index = timestep if self.go_forward else total_timesteps - timestep - 1\n\n            # What we are doing here is finding the index into the batch dimension\n            # which we need to use for this timestep, because the sequences have\n            # variable length, so once the index is greater than the length of this\n            # particular batch sequence, we no longer need to do the computation for\n            # this sequence. The key thing to recognise here is that the batch inputs\n            # must be _ordered_ by length from longest (first in batch) to shortest\n            # (last) so initially, we are going forwards with every sequence and as we\n            # pass the index at which the shortest elements of the batch finish,\n            # we stop picking them up for the computation.\n            if self.go_forward:\n                while batch_lengths[current_length_index] <= index:\n                    current_length_index -= 1\n            # If we're going backwards, we are _picking up_ more indices.\n            else:\n                # First conditional: Are we already at the maximum number of elements in the batch?\n                # Second conditional: Does the next shortest sequence beyond the current batch\n                # index require computation use this timestep?\n                while (\n                    current_length_index < (len(batch_lengths) - 1)\n                    and batch_lengths[current_length_index + 1] > index\n                ):\n                    current_length_index += 1\n\n            # Actually get the slices of the batch which we\n            # need for the computation at this timestep.\n            # shape (batch_size, cell_size)\n            previous_memory = full_batch_previous_memory[0 : current_length_index + 1].clone()\n            # Shape (batch_size, hidden_size)\n            previous_state = full_batch_previous_state[0 : current_length_index + 1].clone()\n            # Shape (batch_size, input_size)\n            timestep_input = inputs[0 : current_length_index + 1, index]\n\n            # Do the projections for all the gates all at once.\n            # Both have shape (batch_size, 4 * cell_size)\n            projected_input = self.input_linearity(timestep_input)\n            projected_state = self.state_linearity(previous_state)\n\n            # Main LSTM equations using relevant chunks of the big linear\n            # projections of the hidden state and inputs.\n            input_gate = torch.sigmoid(\n                projected_input[:, (0 * self.cell_size) : (1 * self.cell_size)]\n                + projected_state[:, (0 * self.cell_size) : (1 * self.cell_size)]\n            )\n            forget_gate = torch.sigmoid(\n                projected_input[:, (1 * self.cell_size) : (2 * self.cell_size)]\n                + projected_state[:, (1 * self.cell_size) : (2 * self.cell_size)]\n            )\n            memory_init = torch.tanh(\n                projected_input[:, (2 * self.cell_size) : (3 * self.cell_size)]\n                + projected_state[:, (2 * self.cell_size) : (3 * self.cell_size)]\n            )\n            output_gate = torch.sigmoid(\n                projected_input[:, (3 * self.cell_size) : (4 * self.cell_size)]\n                + projected_state[:, (3 * self.cell_size) : (4 * self.cell_size)]\n            )\n            memory = input_gate * memory_init + forget_gate * previous_memory\n\n            # Here is the non-standard part of this LSTM cell; first, we clip the\n            # memory cell, then we project the output of the timestep to a smaller size\n            # and again clip it.\n\n            if self.memory_cell_clip_value:\n                # pylint: disable=invalid-unary-operand-type\n                memory = torch.clamp(\n                    memory, -self.memory_cell_clip_value, self.memory_cell_clip_value\n                )\n\n            # shape (current_length_index, cell_size)\n            pre_projection_timestep_output = output_gate * torch.tanh(memory)\n\n            # shape (current_length_index, hidden_size)\n            timestep_output = self.state_projection(pre_projection_timestep_output)\n            if self.state_projection_clip_value:\n                # pylint: disable=invalid-unary-operand-type\n                timestep_output = torch.clamp(\n                    timestep_output,\n                    -self.state_projection_clip_value,\n                    self.state_projection_clip_value,\n                )\n\n            # Only do dropout if the dropout prob is > 0.0 and we are in training mode.\n            if dropout_mask is not None:\n                timestep_output = timestep_output * dropout_mask[0 : current_length_index + 1]\n\n            # We've been doing computation with less than the full batch, so here we create a new\n            # variable for the the whole batch at this timestep and insert the result for the\n            # relevant elements of the batch into it.\n            full_batch_previous_memory = full_batch_previous_memory.clone()\n            full_batch_previous_state = full_batch_previous_state.clone()\n            full_batch_previous_memory[0 : current_length_index + 1] = memory\n            full_batch_previous_state[0 : current_length_index + 1] = timestep_output\n            output_accumulator[0 : current_length_index + 1, index] = timestep_output\n\n        # Mimic the pytorch API by returning state in the following shape:\n        # (num_layers * num_directions, batch_size, ...). As this\n        # LSTM cell cannot be stacked, the first dimension here is just 1.\n        final_state = (\n            full_batch_previous_state.unsqueeze(0),\n            full_batch_previous_memory.unsqueeze(0),\n        )\n\n        return output_accumulator, final_state\n\n\ndef get_dropout_mask(\n    dropout_probability: float, tensor_for_masking: torch.Tensor\n):  # pragma: no cover\n    \"\"\"\n    Computes and returns an element-wise dropout mask for a given tensor, where\n    each element in the mask is dropped out with probability dropout_probability.\n    Note that the mask is NOT applied to the tensor - the tensor is passed to retain\n    the correct CUDA tensor type for the mask.\n    Parameters\n    ----------\n    dropout_probability : float, required.\n        Probability of dropping a dimension of the input.\n    tensor_for_masking : torch.Tensor, required.\n    Returns\n    -------\n    A torch.FloatTensor consisting of the binary mask scaled by 1/ (1 - dropout_probability).\n    This scaling ensures expected values and variances of the output of applying this mask\n     and the original tensor are the same.\n    \"\"\"\n    binary_mask = tensor_for_masking.new_tensor(\n        torch.rand(tensor_for_masking.size()) > dropout_probability\n    )\n    # Scale mask by 1/keep_prob to preserve output statistics.\n    dropout_mask = binary_mask.float().div(1.0 - dropout_probability)\n    return dropout_mask\n\n\ndef block_orthogonal(\n    tensor: torch.Tensor, split_sizes: List[int], gain: float = 1.0\n) -> None:  # pragma: no cover\n    \"\"\"\n    An initializer which allows initializing model parameters in \"blocks\". This is helpful\n    in the case of recurrent models which use multiple gates applied to linear projections,\n    which can be computed efficiently if they are concatenated together. However, they are\n    separate parameters which should be initialized independently.\n    Parameters\n    ----------\n    tensor : ``torch.Tensor``, required.\n        A tensor to initialize.\n    split_sizes : List[int], required.\n        A list of length ``tensor.ndim()`` specifying the size of the\n        blocks along that particular dimension. E.g. ``[10, 20]`` would\n        result in the tensor being split into chunks of size 10 along the\n        first dimension and 20 along the second.\n    gain : float, optional (default = 1.0)\n        The gain (scaling) applied to the orthogonal initialization.\n    \"\"\"\n    data = tensor.data\n    sizes = list(tensor.size())\n    if any([a % b != 0 for a, b in zip(sizes, split_sizes)]):\n        raise ValueError(\n            \"tensor dimensions must be divisible by their respective \"\n            \"split_sizes. Found size: {} and split_sizes: {}\".format(sizes, split_sizes)\n        )\n    indexes = [list(range(0, max_size, split)) for max_size, split in zip(sizes, split_sizes)]\n    # Iterate over all possible blocks within the tensor.\n    for block_start_indices in itertools.product(*indexes):\n        # A list of tuples containing the index to start at for this block\n        # and the appropriate step size (i.e split_size[i] for dimension i).\n        index_and_step_tuples = zip(block_start_indices, split_sizes)\n        # This is a tuple of slices corresponding to:\n        # tensor[index: index + step_size, ...]. This is\n        # required because we could have an arbitrary number\n        # of dimensions. The actual slices we need are the\n        # start_index: start_index + step for each dimension in the tensor.\n        block_slice = tuple(\n            [slice(start_index, start_index + step) for start_index, step in index_and_step_tuples]\n        )\n        data[block_slice] = torch.nn.init.orthogonal_(tensor[block_slice].contiguous(), gain=gain)\n\n\ndef sort_batch_by_length(tensor: torch.Tensor, sequence_lengths: torch.Tensor):  # pragma: no cover\n    \"\"\"\n    Sort a batch first tensor by some specified lengths.\n    Parameters\n    ----------\n    tensor : torch.FloatTensor, required.\n        A batch first Pytorch tensor.\n    sequence_lengths : torch.LongTensor, required.\n        A tensor representing the lengths of some dimension of the tensor which\n        we want to sort by.\n    Returns\n    -------\n    sorted_tensor : torch.FloatTensor\n        The original tensor sorted along the batch dimension with respect to sequence_lengths.\n    sorted_sequence_lengths : torch.LongTensor\n        The original sequence_lengths sorted by decreasing size.\n    restoration_indices : torch.LongTensor\n        Indices into the sorted_tensor such that\n        ``sorted_tensor.index_select(0, restoration_indices) == original_tensor``\n    permuation_index : torch.LongTensor\n        The indices used to sort the tensor. This is useful if you want to sort many\n        tensors using the same ordering.\n    \"\"\"\n\n    if not isinstance(tensor, torch.Tensor) or not isinstance(sequence_lengths, torch.Tensor):\n        raise ValueError(\"Both the tensor and sequence lengths must be torch.Tensors.\")\n\n    sorted_sequence_lengths, permutation_index = sequence_lengths.sort(0, descending=True)\n    sorted_tensor = tensor.index_select(0, permutation_index)\n\n    index_range = sequence_lengths.new_tensor(torch.arange(0, len(sequence_lengths)))\n    # This is the equivalent of zipping with index, sorting by the original\n    # sequence lengths and returning the now sorted indices.\n    _, reverse_mapping = permutation_index.sort(0, descending=False)\n    restoration_indices = index_range.index_select(0, reverse_mapping)\n    return sorted_tensor, sorted_sequence_lengths, restoration_indices, permutation_index\n\n\n# We have two types here for the state, because storing the state in something\n# which is Iterable (like a tuple, below), is helpful for internal manipulation\n# - however, the states are consumed as either Tensors or a Tuple of Tensors, so\n# returning them in this format is unhelpful.\nRnnState = Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]]  # pylint: disable=invalid-name\nRnnStateStorage = Tuple[torch.Tensor, ...]  # pylint: disable=invalid-name\n\n\nclass _EncoderBase(torch.nn.Module):  # pragma: no cover\n    # pylint: disable=abstract-method\n    \"\"\"\n    This abstract class serves as a base for the 3 ``Encoder`` abstractions in AllenNLP.\n    - :class:`~allennlp.modules.seq2seq_encoders.Seq2SeqEncoders`\n    - :class:`~allennlp.modules.seq2vec_encoders.Seq2VecEncoders`\n    Additionally, this class provides functionality for sorting sequences by length\n    so they can be consumed by Pytorch RNN classes, which require their inputs to be\n    sorted by length. Finally, it also provides optional statefulness to all of it's\n    subclasses by allowing the caching and retrieving of the hidden states of RNNs.\n    \"\"\"\n\n    def __init__(self, stateful: bool = False) -> None:\n        super(_EncoderBase, self).__init__()\n        self.stateful = stateful\n        self._states: Optional[RnnStateStorage] = None\n\n    def sort_and_run_forward(\n        self,\n        module: Callable[\n            [PackedSequence, Optional[RnnState]],\n            Tuple[Union[PackedSequence, torch.Tensor], RnnState],\n        ],\n        inputs: torch.Tensor,\n        mask: torch.Tensor,\n        hidden_state: Optional[RnnState] = None,\n    ):\n        \"\"\"\n        This function exists because Pytorch RNNs require that their inputs be sorted\n        before being passed as input. As all of our Seq2xxxEncoders use this functionality,\n        it is provided in a base class. This method can be called on any module which\n        takes as input a ``PackedSequence`` and some ``hidden_state``, which can either be a\n        tuple of tensors or a tensor.\n        As all of our Seq2xxxEncoders have different return types, we return `sorted`\n        outputs from the module, which is called directly. Additionally, we return the\n        indices into the batch dimension required to restore the tensor to it's correct,\n        unsorted order and the number of valid batch elements (i.e the number of elements\n        in the batch which are not completely masked). This un-sorting and re-padding\n        of the module outputs is left to the subclasses because their outputs have different\n        types and handling them smoothly here is difficult.\n        Parameters\n        ----------\n        module : ``Callable[[PackedSequence, Optional[RnnState]],\n                            Tuple[Union[PackedSequence, torch.Tensor], RnnState]]``, required.\n            A function to run on the inputs. In most cases, this is a ``torch.nn.Module``.\n        inputs : ``torch.Tensor``, required.\n            A tensor of shape ``(batch_size, sequence_length, embedding_size)`` representing\n            the inputs to the Encoder.\n        mask : ``torch.Tensor``, required.\n            A tensor of shape ``(batch_size, sequence_length)``, representing masked and\n            non-masked elements of the sequence for each element in the batch.\n        hidden_state : ``Optional[RnnState]``, (default = None).\n            A single tensor of shape (num_layers, batch_size, hidden_size) representing the\n            state of an RNN with or a tuple of\n            tensors of shapes (num_layers, batch_size, hidden_size) and\n            (num_layers, batch_size, memory_size), representing the hidden state and memory\n            state of an LSTM-like RNN.\n        Returns\n        -------\n        module_output : ``Union[torch.Tensor, PackedSequence]``.\n            A Tensor or PackedSequence representing the output of the Pytorch Module.\n            The batch size dimension will be equal to ``num_valid``, as sequences of zero\n            length are clipped off before the module is called, as Pytorch cannot handle\n            zero length sequences.\n        final_states : ``Optional[RnnState]``\n            A Tensor representing the hidden state of the Pytorch Module. This can either\n            be a single tensor of shape (num_layers, num_valid, hidden_size), for instance in\n            the case of a GRU, or a tuple of tensors, such as those required for an LSTM.\n        restoration_indices : ``torch.LongTensor``\n            A tensor of shape ``(batch_size,)``, describing the re-indexing required to transform\n            the outputs back to their original batch order.\n        \"\"\"\n        # In some circumstances you may have sequences of zero length. ``pack_padded_sequence``\n        # requires all sequence lengths to be > 0, so remove sequences of zero length before\n        # calling self._module, then fill with zeros.\n\n        # First count how many sequences are empty.\n        batch_size = mask.size(0)\n        num_valid = torch.sum(mask[:, 0]).int().item()\n\n        sequence_lengths = mask.long().sum(-1)\n        sorted_inputs, sorted_sequence_lengths, restoration_indices, sorting_indices = sort_batch_by_length(\n            inputs, sequence_lengths\n        )\n\n        # Now create a PackedSequence with only the non-empty, sorted sequences.\n        packed_sequence_input = pack_padded_sequence(\n            sorted_inputs[:num_valid, :, :],\n            sorted_sequence_lengths[:num_valid].data.tolist(),\n            batch_first=True,\n        )\n        # Prepare the initial states.\n        if not self.stateful:\n            if hidden_state is None:\n                initial_states = hidden_state\n            elif isinstance(hidden_state, tuple):\n                initial_states = [\n                    state.index_select(1, sorting_indices)[:, :num_valid, :].contiguous()\n                    for state in hidden_state\n                ]\n            else:\n                initial_states = hidden_state.index_select(1, sorting_indices)[\n                    :, :num_valid, :\n                ].contiguous()\n\n        else:\n            initial_states = self._get_initial_states(batch_size, num_valid, sorting_indices)\n\n        # Actually call the module on the sorted PackedSequence.\n        module_output, final_states = module(packed_sequence_input, initial_states)\n\n        return module_output, final_states, restoration_indices\n\n    def _get_initial_states(\n        self, batch_size: int, num_valid: int, sorting_indices: torch.LongTensor\n    ) -> Optional[RnnState]:\n        \"\"\"\n        Returns an initial state for use in an RNN. Additionally, this method handles\n        the batch size changing across calls by mutating the state to append initial states\n        for new elements in the batch. Finally, it also handles sorting the states\n        with respect to the sequence lengths of elements in the batch and removing rows\n        which are completely padded. Importantly, this `mutates` the state if the\n        current batch size is larger than when it was previously called.\n        Parameters\n        ----------\n        batch_size : ``int``, required.\n            The batch size can change size across calls to stateful RNNs, so we need\n            to know if we need to expand or shrink the states before returning them.\n            Expanded states will be set to zero.\n        num_valid : ``int``, required.\n            The batch may contain completely padded sequences which get removed before\n            the sequence is passed through the encoder. We also need to clip these off\n            of the state too.\n        sorting_indices ``torch.LongTensor``, required.\n            Pytorch RNNs take sequences sorted by length. When we return the states to be\n            used for a given call to ``module.forward``, we need the states to match up to\n            the sorted sequences, so before returning them, we sort the states using the\n            same indices used to sort the sequences.\n        Returns\n        -------\n        This method has a complex return type because it has to deal with the first time it\n        is called, when it has no state, and the fact that types of RNN have heterogeneous\n        states.\n        If it is the first time the module has been called, it returns ``None``, regardless\n        of the type of the ``Module``.\n        Otherwise, for LSTMs, it returns a tuple of ``torch.Tensors`` with shape\n        ``(num_layers, num_valid, state_size)`` and ``(num_layers, num_valid, memory_size)``\n        respectively, or for GRUs, it returns a single ``torch.Tensor`` of shape\n        ``(num_layers, num_valid, state_size)``.\n        \"\"\"\n        # We don't know the state sizes the first time calling forward,\n        # so we let the module define what it's initial hidden state looks like.\n        if self._states is None:\n            return None\n\n        # Otherwise, we have some previous states.\n        if batch_size > self._states[0].size(1):\n            # This batch is larger than the all previous states.\n            # If so, resize the states.\n            num_states_to_concat = batch_size - self._states[0].size(1)\n            resized_states = []\n            # state has shape (num_layers, batch_size, hidden_size)\n            for state in self._states:\n                # This _must_ be inside the loop because some\n                # RNNs have states with different last dimension sizes.\n                zeros = state.new_zeros(state.size(0), num_states_to_concat, state.size(2))\n                resized_states.append(torch.cat([state, zeros], 1))\n            self._states = tuple(resized_states)\n            correctly_shaped_states = self._states\n\n        elif batch_size < self._states[0].size(1):\n            # This batch is smaller than the previous one.\n            correctly_shaped_states = tuple(state[:, :batch_size, :] for state in self._states)\n        else:\n            correctly_shaped_states = self._states\n\n        # At this point, our states are of shape (num_layers, batch_size, hidden_size).\n        # However, the encoder uses sorted sequences and additionally removes elements\n        # of the batch which are fully padded. We need the states to match up to these\n        # sorted and filtered sequences, so we do that in the next two blocks before\n        # returning the state/s.\n        if len(self._states) == 1:\n            # GRUs only have a single state. This `unpacks` it from the\n            # tuple and returns the tensor directly.\n            correctly_shaped_state = correctly_shaped_states[0]\n            sorted_state = correctly_shaped_state.index_select(1, sorting_indices)\n            return sorted_state[:, :num_valid, :]\n        else:\n            # LSTMs have a state tuple of (state, memory).\n            sorted_states = [\n                state.index_select(1, sorting_indices) for state in correctly_shaped_states\n            ]\n            return tuple(state[:, :num_valid, :] for state in sorted_states)\n\n    def _update_states(\n        self, final_states: RnnStateStorage, restoration_indices: torch.LongTensor\n    ) -> None:\n        \"\"\"\n        After the RNN has run forward, the states need to be updated.\n        This method just sets the state to the updated new state, performing\n        several pieces of book-keeping along the way - namely, unsorting the\n        states and ensuring that the states of completely padded sequences are\n        not updated. Finally, it also detaches the state variable from the\n        computational graph, such that the graph can be garbage collected after\n        each batch iteration.\n        Parameters\n        ----------\n        final_states : ``RnnStateStorage``, required.\n            The hidden states returned as output from the RNN.\n        restoration_indices : ``torch.LongTensor``, required.\n            The indices that invert the sorting used in ``sort_and_run_forward``\n            to order the states with respect to the lengths of the sequences in\n            the batch.\n        \"\"\"\n        # TODO(Mark): seems weird to sort here, but append zeros in the subclasses.\n        # which way around is best?\n        new_unsorted_states = [state.index_select(1, restoration_indices) for state in final_states]\n\n        if self._states is None:\n            # We don't already have states, so just set the\n            # ones we receive to be the current state.\n            self._states = tuple(state.data for state in new_unsorted_states)\n        else:\n            # Now we've sorted the states back so that they correspond to the original\n            # indices, we need to figure out what states we need to update, because if we\n            # didn't use a state for a particular row, we want to preserve its state.\n            # Thankfully, the rows which are all zero in the state correspond exactly\n            # to those which aren't used, so we create masks of shape (new_batch_size,),\n            # denoting which states were used in the RNN computation.\n            current_state_batch_size = self._states[0].size(1)\n            new_state_batch_size = final_states[0].size(1)\n            # Masks for the unused states of shape (1, new_batch_size, 1)\n            used_new_rows_mask = [\n                (state[0, :, :].sum(-1) != 0.0).float().view(1, new_state_batch_size, 1)\n                for state in new_unsorted_states\n            ]\n            new_states = []\n            if current_state_batch_size > new_state_batch_size:\n                # The new state is smaller than the old one,\n                # so just update the indices which we used.\n                for old_state, new_state, used_mask in zip(\n                    self._states, new_unsorted_states, used_new_rows_mask\n                ):\n                    # zero out all rows in the previous state\n                    # which _were_ used in the current state.\n                    masked_old_state = old_state[:, :new_state_batch_size, :] * (1 - used_mask)\n                    # The old state is larger, so update the relevant parts of it.\n                    old_state[:, :new_state_batch_size, :] = new_state + masked_old_state\n                    new_states.append(old_state.detach())\n            else:\n                # The states are the same size, so we just have to\n                # deal with the possibility that some rows weren't used.\n                new_states = []\n                for old_state, new_state, used_mask in zip(\n                    self._states, new_unsorted_states, used_new_rows_mask\n                ):\n                    # zero out all rows which _were_ used in the current state.\n                    masked_old_state = old_state * (1 - used_mask)\n                    # The old state is larger, so update the relevant parts of it.\n                    new_state += masked_old_state\n                    new_states.append(new_state.detach())\n\n            # It looks like there should be another case handled here - when\n            # the current_state_batch_size < new_state_batch_size. However,\n            # this never happens, because the states themeselves are mutated\n            # by appending zeros when calling _get_inital_states, meaning that\n            # the new states are either of equal size, or smaller, in the case\n            # that there are some unused elements (zero-length) for the RNN computation.\n            self._states = tuple(new_states)\n\n    def reset_states(self):\n        self._states = None\n"
  },
  {
    "path": "claf/modules/encoder/positional.py",
    "content": "\nimport math\nimport numpy as np\nimport torch\nimport torch.nn as nn\n\n\nclass PositionalEncoding(nn.Module):\n    \"\"\"\n    Positional Encoding\n        in \"Attention is All You Need\" (https://arxiv.org/abs/1706.03762)\n\n    The use of relative position is possible because sin(x+y) and cos(x+y) can be\n    expressed in terms of y, sin(x) and cos(x).\n\n    (cf. https://github.com/tensorflow/tensor2tensor/blob/42c3f377f441e5a0f431127d63e71414ead291c4/\\\n        tensor2tensor/layers/common_attention.py#L388)\n\n    * Args:\n        embed_dim: the number of embedding dimension\n\n    * Kwargs:\n        max_len: the number of maximum sequence length\n    \"\"\"\n\n    def __init__(self, embed_dim, max_length=2000):\n        super(PositionalEncoding, self).__init__()\n        signal_sinusoid = self._get_timing_signal(max_length, embed_dim)\n\n        self.register_buffer(\"position_encoding\", signal_sinusoid)\n\n    def _get_timing_signal(self, length, channels, min_timescale=1.0, max_timescale=1.0e4):\n        position = np.arange(length)\n        num_timescales = channels // 2\n        log_timescale_increment = math.log(\n            float(max_timescale) / float(min_timescale) / (float(num_timescales) - 1)\n        )\n        inv_timescales = min_timescale * np.exp(\n            np.arange(num_timescales).astype(np.float) * -log_timescale_increment\n        )\n        scaled_time = np.expand_dims(position, 1) * np.expand_dims(inv_timescales, 0)\n\n        signal = np.concatenate([np.sin(scaled_time), np.cos(scaled_time)], axis=1)\n        signal = np.pad(signal, [[0, 0], [0, channels % 2]], \"constant\", constant_values=[0.0, 0.0])\n        signal = signal.reshape([1, length, channels])\n\n        return torch.from_numpy(signal).type(torch.FloatTensor)\n\n    def forward(self, x):\n        x = x + self.position_encoding[:, : x.size(1)]\n        return x\n"
  },
  {
    "path": "claf/modules/functional.py",
    "content": "\"\"\"\n    some functional codes from allennlp: https://github.com/allenai/allennlp\n\n    - add_masked_value : replace_masked_values (allennlp)\n    - get_mask_from_tokens : get_mask_from_tokens (allennlp)\n    - last_dim_masked_softmax : last_dim_masked_softmax (allennlp)\n    - masked_softmax : masked_softmax (allennlp)\n    - weighted_sum : weighted_sum (allennlp)\n\"\"\"\n\nimport torch\nimport torch.nn.functional as F\nfrom torch.nn.utils.rnn import pack_padded_sequence, pad_packed_sequence\n\n\ndef add_masked_value(tensor, mask, value=-1e7):\n    mask = mask.float()\n    one_minus_mask = 1.0 - mask\n    values_to_add = value * one_minus_mask\n    return tensor * mask + values_to_add\n\n\ndef get_mask_from_tokens(tokens):\n    tensor_dims = [(tensor.dim(), tensor) for tensor in tokens.values()]\n    tensor_dims.sort(key=lambda x: x[0])\n\n    smallest_dim = tensor_dims[0][0]\n    if smallest_dim == 2:\n        token_tensor = tensor_dims[0][1]\n        return (token_tensor != 0).long()\n    elif smallest_dim == 3:\n        character_tensor = tensor_dims[0][1]\n        return ((character_tensor > 0).long().sum(dim=-1) > 0).long()\n    else:\n        raise ValueError(\"Expected a tensor with dimension 2 or 3, found {}\".format(smallest_dim))\n\n\ndef last_dim_masked_softmax(x, mask):\n    x_shape = x.size()\n    reshaped_x = x.view(-1, x.size()[-1])\n\n    while mask.dim() < x.dim():\n        mask = mask.unsqueeze(1)\n    mask = mask.expand_as(x).contiguous().float()\n    mask = mask.view(-1, mask.size()[-1])\n\n    reshaped_result = masked_softmax(reshaped_x, mask)\n    return reshaped_result.view(*x_shape)\n\n\ndef masked_softmax(x, mask):\n    if mask is None:\n        raise ValueError(\"mask can't be None.\")\n\n    output = F.softmax(x * mask, dim=-1)\n    output = output * mask\n    output = output / (output.sum(dim=1, keepdim=True) + 1e-13)\n    return output\n\n\ndef weighted_sum(attention, matrix):  # pragma: no cover\n    if attention.dim() == 2 and matrix.dim() == 3:\n        return attention.unsqueeze(1).bmm(matrix).squeeze(1)\n    elif attention.dim() == 3 and matrix.dim() == 3:\n        return attention.bmm(matrix)\n    else:\n        raise ValueError(\n            f\"attention dim {attention.dim()} and matrix dim {matrix.dim()} operation not support. (2, 3) and (3, 3) are available dimemsion.\"\n        )\n\n\ndef masked_zero(tensor, mask):\n    \"\"\" Tensor masking operation \"\"\"\n    while mask.dim() < tensor.dim():\n        mask = mask.unsqueeze(-1)\n\n    if isinstance(tensor, torch.FloatTensor):\n        mask = mask.float()\n    elif isinstance(tensor, torch.ByteTensor):\n        mask = mask.byte()\n    elif isinstance(tensor, torch.LongTensor):\n        mask = mask.long()\n\n    return tensor * mask\n\n\ndef masked_log_softmax(vector, mask):  # pragma: no cover\n    if mask is not None:\n        vector = vector + mask.float().log()\n    return torch.nn.functional.log_softmax(vector, dim=1)\n\n\ndef get_sorted_seq_config(features, pad_index=0):\n    tensor_dims = [(tensor.dim(), tensor) for tensor in features.values()]\n    tensor_dims.sort(key=lambda x: x[0])\n\n    smallest_dim = tensor_dims[0][0]\n    if smallest_dim == 2:\n        token_tensor = tensor_dims[0][1]\n    else:\n        raise ValueError(\"features smallest_dim must be `2` ([B, S_L]) \")\n\n    seq_lengths = torch.sum(token_tensor > pad_index, dim=-1)\n    seq_lengths, perm_idx = seq_lengths.sort(0, descending=True)\n    _, unperm_idx = perm_idx.sort(0)\n\n    return {\"seq_lengths\": seq_lengths, \"perm_idx\": perm_idx, \"unperm_idx\": unperm_idx}\n\n\ndef forward_rnn_with_pack(rnn_module, tensor, seq_config):\n    sorted_tensor = tensor[seq_config[\"perm_idx\"]]\n    packed_input = pack_padded_sequence(sorted_tensor, seq_config[\"seq_lengths\"], batch_first=True)\n    packed_output, _ = rnn_module(packed_input)\n    output, _ = pad_packed_sequence(packed_output, batch_first=True)\n    output = output[seq_config[\"unperm_idx\"]]  # restore origin order\n    return output\n"
  },
  {
    "path": "claf/modules/initializer.py",
    "content": "\nimport logging\n\nimport torch\nimport torch.nn as nn\n\nlogger = logging.getLogger(__name__)\n\n\ndef weight(module):\n    \"\"\"\n    weight initialization (according to module type)\n\n    * Args:\n        module: torch.nn.Module\n    \"\"\"\n\n    if type(module) == list:\n        for m in module:\n            weight(m)\n\n    if isinstance(module, nn.Conv2d):\n        logger.info(\"initializing Conv Layer\")\n        torch.nn.init.uniform_(module.weight)\n\n    elif isinstance(module, nn.Linear):\n        torch.nn.init.xavier_uniform_(module.weight)\n        logger.info(\"Initializing Linear Layer\")\n\n    elif isinstance(module, nn.GRU):\n        torch.nn.init.normal_(module.weight_hh_l0, std=0.05)\n        logger.info(\"Initializing GRU Layer\")\n"
  },
  {
    "path": "claf/modules/layer/__init__.py",
    "content": "\nfrom .highway import Highway\nfrom .positionwise import PositionwiseFeedForward\nfrom .residual import ResidualConnection\nfrom .scalar_mix import ScalarMix\n\n\n__all__ = [\"Highway\", \"PositionwiseFeedForward\", \"ResidualConnection\", \"ScalarMix\"]\n"
  },
  {
    "path": "claf/modules/layer/highway.py",
    "content": "\nimport torch\nimport torch.nn as nn\n\nfrom claf.modules.activation import get_activation_fn\n\n\nclass Highway(nn.Module):\n    \"\"\"\n    Highway Networks (https://arxiv.org/abs/1505.00387)\n    https://github.com/allenai/allennlp/blob/master/allennlp/modules/highway.py\n\n    * Args:\n        input_size: The number of expected features in the input `x`\n        num_layers: The number of Highway layers.\n        activation: Activation Function (ReLU is default)\n    \"\"\"\n\n    def __init__(self, input_size, num_layers=2, activation=\"relu\"):\n        super(Highway, self).__init__()\n        self.activation_fn = activation\n        if type(activation) == str:\n            self.activation_fn = get_activation_fn(activation)()\n        self._layers = torch.nn.ModuleList(\n            [nn.Linear(input_size, input_size * 2) for _ in range(num_layers)]\n        )\n\n        for layer in self._layers:\n            layer.bias[input_size:].data.fill_(\n                1\n            )  # should bias the highway layer to just carry its input forward.\n\n    def forward(self, x):\n        current_input = x\n        for layer in self._layers:\n            projected_input = layer(current_input)\n            linear_part = current_input\n\n            nonlinear_part, gate = projected_input.chunk(2, dim=-1)\n            nonlinear_part = self.activation_fn(nonlinear_part)\n            gate = torch.sigmoid(gate)\n\n            current_input = gate * linear_part + (1 - gate) * nonlinear_part\n        return current_input\n"
  },
  {
    "path": "claf/modules/layer/normalization.py",
    "content": "\nimport torch\nimport torch.nn as nn\n\n\nclass LayerNorm(nn.Module):\n    \"\"\"\n    Layer Normalization\n    (https://arxiv.org/abs/1607.06450)\n    \"\"\"\n\n    def __init__(self, normalized_shape, eps=1e-5):\n        super(LayerNorm, self).__init__()\n        self.gamma = nn.Parameter(torch.ones(normalized_shape))\n        self.beta = nn.Parameter(torch.zeros(normalized_shape))\n        self.eps = eps\n\n    def forward(self, x):\n        mean = x.mean(-1, keepdim=True)\n        std = x.std(-1, keepdim=True)\n        return self.gamma * (x - mean) / (std + self.eps) + self.beta\n"
  },
  {
    "path": "claf/modules/layer/positionwise.py",
    "content": "\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom claf.modules.conv import PointwiseConv\n\n\nclass PositionwiseFeedForward(nn.Module):\n    \"\"\"\n    Pointwise Feed-Forward Layer\n\n    * Args:\n        input_size: the number of input size\n        hidden_size: the number of hidden size\n\n    * Kwargs:\n        dropout: the probability of dropout\n    \"\"\"\n\n    def __init__(self, input_size, hidden_size, dropout=0.1):\n        super(PositionwiseFeedForward, self).__init__()\n        self.pointwise_conv1 = PointwiseConv(input_size=input_size, num_filters=hidden_size)\n        self.pointwise_conv2 = PointwiseConv(input_size=hidden_size, num_filters=input_size)\n        self.activation_fn = F.relu\n        self.dropout = nn.Dropout(p=dropout)\n\n    def forward(self, x):\n        x = self.pointwise_conv1(x)\n        x = self.activation_fn(x)\n        x = self.pointwise_conv2(x)\n        x = self.dropout(x)\n        return x\n"
  },
  {
    "path": "claf/modules/layer/residual.py",
    "content": "import torch\nimport torch.nn as nn\n\nfrom claf.modules.layer.normalization import LayerNorm\n\n\nclass ResidualConnection(nn.Module):\n    \"\"\"\n    ResidualConnection\n        in Deep Residual Learning for Image Recognition (https://arxiv.org/abs/1512.03385)\n\n    => f(x) + x\n\n    * Args:\n        dim: the number of dimension\n\n    * Kwargs:\n        layer_dropout: layer dropout probability (stochastic depth)\n        dropout: dropout probability\n    \"\"\"\n\n    def __init__(self, dim, layer_dropout=None, layernorm=False):\n        super(ResidualConnection, self).__init__()\n\n        self.survival = None\n        if layer_dropout < 1:\n            self.survival = torch.FloatTensor([layer_dropout])\n        if layernorm:\n            self.norm = LayerNorm(dim)\n        else:\n            self.norm = lambda x: x\n\n    def forward(self, x, sub_layer_fn):\n        # implementation of stochastic depth\n        if self.training and self.survival is not None:\n            survival_prob = torch.bernoulli(self.survival).item()\n            if survival_prob == 1:\n                return x + sub_layer_fn(self.norm(x))\n            else:\n                return x\n        else:\n            return x + sub_layer_fn(self.norm(x))\n"
  },
  {
    "path": "claf/modules/layer/scalar_mix.py",
    "content": "\"\"\"\nThis code is from allenai/allennlp\n(https://github.com/allenai/allennlp/blob/master/allennlp/modules/scalar_mix.py)\n\"\"\"\n\nfrom typing import List\n\nimport torch\nfrom torch.nn import ParameterList, Parameter\n\n\nclass ScalarMix(torch.nn.Module):  # pragma: no cover\n    \"\"\"\n    Computes a parameterised scalar mixture of N tensors, ``mixture = gamma * sum(s_k * tensor_k)``\n    where ``s = softmax(w)``, with ``w`` and ``gamma`` scalar parameters.\n    In addition, if ``do_layer_norm=True`` then apply layer normalization to each tensor\n    before weighting.\n    \"\"\"\n\n    def __init__(\n        self,\n        mixture_size: int,\n        do_layer_norm: bool = False,\n        initial_scalar_parameters: List[float] = None,\n        trainable: bool = True,\n    ) -> None:\n        super(ScalarMix, self).__init__()\n        self.mixture_size = mixture_size\n        self.do_layer_norm = do_layer_norm\n\n        if initial_scalar_parameters is None:\n            initial_scalar_parameters = [0.0] * mixture_size\n        elif len(initial_scalar_parameters) != mixture_size:\n            raise ValueError(\n                \"Length of initial_scalar_parameters {} differs \"\n                \"from mixture_size {}\".format(initial_scalar_parameters, mixture_size)\n            )\n\n        self.scalar_parameters = ParameterList(\n            [\n                Parameter(\n                    torch.FloatTensor([initial_scalar_parameters[i]]), requires_grad=trainable\n                )\n                for i in range(mixture_size)\n            ]\n        )\n        self.gamma = Parameter(torch.FloatTensor([1.0]), requires_grad=trainable)\n\n    def forward(\n        self,\n        tensors: List[torch.Tensor],  # pylint: disable=arguments-differ\n        mask: torch.Tensor = None,\n    ) -> torch.Tensor:\n        \"\"\"\n        Compute a weighted average of the ``tensors``.  The input tensors an be any shape\n        with at least two dimensions, but must all be the same shape.\n        When ``do_layer_norm=True``, the ``mask`` is required input.  If the ``tensors`` are\n        dimensioned  ``(dim_0, ..., dim_{n-1}, dim_n)``, then the ``mask`` is dimensioned\n        ``(dim_0, ..., dim_{n-1})``, as in the typical case with ``tensors`` of shape\n        ``(batch_size, timesteps, dim)`` and ``mask`` of shape ``(batch_size, timesteps)``.\n        When ``do_layer_norm=False`` the ``mask`` is ignored.\n        \"\"\"\n        if len(tensors) != self.mixture_size:\n            raise ValueError(\n                \"{} tensors were passed, but the module was initialized to \"\n                \"mix {} tensors.\".format(len(tensors), self.mixture_size)\n            )\n\n        def _do_layer_norm(tensor, broadcast_mask, num_elements_not_masked):\n            tensor_masked = tensor * broadcast_mask\n            mean = torch.sum(tensor_masked) / num_elements_not_masked\n            variance = (\n                torch.sum(((tensor_masked - mean) * broadcast_mask) ** 2) / num_elements_not_masked\n            )\n            return (tensor - mean) / torch.sqrt(variance + 1E-12)\n\n        normed_weights = torch.nn.functional.softmax(\n            torch.cat([parameter for parameter in self.scalar_parameters]), dim=0\n        )\n        normed_weights = torch.split(normed_weights, split_size_or_sections=1)\n\n        if not self.do_layer_norm:\n            pieces = []\n            for weight, tensor in zip(normed_weights, tensors):\n                pieces.append(weight * tensor)\n            return self.gamma * sum(pieces)\n\n        else:\n            mask_float = mask.float()\n            broadcast_mask = mask_float.unsqueeze(-1)\n            input_dim = tensors[0].size(-1)\n            num_elements_not_masked = torch.sum(mask_float) * input_dim\n\n            pieces = []\n            for weight, tensor in zip(normed_weights, tensors):\n                pieces.append(\n                    weight * _do_layer_norm(tensor, broadcast_mask, num_elements_not_masked)\n                )\n            return self.gamma * sum(pieces)\n"
  },
  {
    "path": "claf/nsml.py",
    "content": "\n\"\"\" NSML is NAVER SMART MACHINE LEARNING PLATFORM for internal (NAVER Corp)\"\"\"\n\nIS_ON_NSML = False\nDATASET_PATH = None\nSESSION_NAME = \"\"\n\n\ntry:\n    from nsml import *\nexcept ImportError:\n    pass\n"
  },
  {
    "path": "claf/tokens/__init__.py",
    "content": "\nfrom claf.decorator import register\nfrom claf.tokens import indexer, embedding\nfrom claf.tokens.linguistic import POSTag, NER\nfrom claf.tokens.token_maker import TokenMaker\nfrom claf.tokens.tokenizer import PassText\n\n\ndef basic_embedding_fn(embedding_config, module):\n    def wrapper(vocab):\n        embedding_config[\"vocab\"] = vocab\n        return module(**embedding_config)\n\n    return wrapper\n\n\n@register(f\"token:{TokenMaker.FEATURE_TYPE}\")\nclass FeatureTokenMaker(TokenMaker):\n    \"\"\"\n    Feature Token\n\n    Do not use Embedding function.\n    Just pass indexed_feature\n\n    example.\n        hello -> ['hello', 'world'] -> [3, 5] -> tensor\n\n    consisting of\n        - tokenizer: Tokenizer (need to define unit)\n        - indexer: WordIndexer\n        - embedding: None\n        - vocab: Vocab\n    \"\"\"\n\n    def __init__(self, tokenizers, indexer_config, embedding_config, vocab_config):\n        tokenizer = PassText()\n        do_tokenize = indexer_config.get(\"do_tokenize\", False)\n        if do_tokenize:\n            text_unit = indexer_config.get(\"unit\", None)\n            if text_unit is None:\n                raise ValueError(\"When use 'do_tokenize', 'unit' is required. \")\n\n            del indexer_config[\"unit\"]\n            tokenizer = tokenizers[text_unit]\n\n        super(FeatureTokenMaker, self).__init__(\n            TokenMaker.FEATURE_TYPE,\n            tokenizer=tokenizer,\n            indexer=indexer.WordIndexer(tokenizer, **indexer_config),\n            embedding_fn=None,\n            vocab_config=vocab_config,\n        )\n\n\n@register(f\"token:{TokenMaker.BERT_TYPE}\")\nclass BertTokenMaker(TokenMaker):\n    \"\"\"\n    BERT Token\n    Pre-training of Deep Bidirectional Transformers for Language Understanding\n\n    example.\n        hello -> ['[CLS]', 'he', '##llo', [SEP]] -> [1, 4, 7, 2] -> BERT -> tensor\n\n    consisting of\n        - tokenizer: WordTokenizer\n        - indexer: WordIndexer\n        - embedding: ELMoEmbedding (Language Modeling BiLSTM)\n        - vocab: Vocab\n    \"\"\"\n\n    def __init__(self, tokenizers, indexer_config, embedding_config, vocab_config):\n        tokenizer = tokenizers[\"subword\"]\n        super(BertTokenMaker, self).__init__(\n            TokenMaker.BERT_TYPE,\n            tokenizer=tokenizer,\n            indexer=indexer.BertIndexer(tokenizer, **indexer_config),\n            embedding_fn=basic_embedding_fn(embedding_config, embedding.BertEmbedding),\n            vocab_config=vocab_config,\n        )\n\n\n@register(f\"token:{TokenMaker.CHAR_TYPE}\")\nclass CharTokenMaker(TokenMaker):\n    \"\"\"\n    Character Token\n\n    Character-level Convolutional Networks for Text Classification\n    (https://arxiv.org/abs/1509.01626)\n\n    example.\n        hello -> ['h', 'e', 'l', 'l', 'o'] -> [2, 3, 4, 4, 5] -> CharCNN -> tensor\n\n    consisting of\n        - tokenizer: CharTokenizer\n        - indexer: CharIndexer\n        - embedding: CharEmbedding (CharCNN)\n        - vocab: Vocab\n    \"\"\"\n\n    def __init__(self, tokenizers, indexer_config, embedding_config, vocab_config):\n        super(CharTokenMaker, self).__init__(\n            TokenMaker.CHAR_TYPE,\n            tokenizer=tokenizers[\"char\"],\n            indexer=indexer.CharIndexer(tokenizers[\"char\"], **indexer_config),\n            embedding_fn=basic_embedding_fn(embedding_config, embedding.CharEmbedding),\n            vocab_config=vocab_config,\n        )\n\n\n@register(f\"token:{TokenMaker.COVE_TYPE}\")\nclass CoveTokenMaker(TokenMaker):\n    \"\"\"\n    CoVe Token\n\n    Learned in Translation: Contextualized Word Vectors (McCann et. al. 2017)\n    (https://github.com/salesforce/cove)\n\n    example.\n        hello -> ['hello'] -> [2] -> CoVe -> tensor\n\n    consisting of\n        - tokenizer: WordTokenizer\n        - indexer: WordIndexer\n        - embedding: CoveEmbedding (Machine Translation LSTM)\n        - vocab: Vocab\n    \"\"\"\n\n    def __init__(self, tokenizers, indexer_config, embedding_config, vocab_config):\n        super(CoveTokenMaker, self).__init__(\n            TokenMaker.CHAR_TYPE,\n            tokenizer=tokenizers[\"word\"],\n            indexer=indexer.WordIndexer(tokenizers[\"word\"], **indexer_config),\n            embedding_fn=basic_embedding_fn(embedding_config, embedding.CoveEmbedding),\n            vocab_config=vocab_config,\n        )\n\n\n@register(f\"token:{TokenMaker.ELMO_TYPE}\")\nclass ElmoTokenMaker(TokenMaker):\n    \"\"\"\n    ELMo Token\n    Embedding from Language Modeling\n\n    Deep contextualized word representations\n    (https://github.com/allenai/allennlp/blob/master/allennlp/modules/elmo.py)\n\n    example.\n        hello -> ['h', 'e', 'l', 'l', 'o'] -> [2, 3, 4, 4, 5] -> ELMo -> tensor\n\n    consisting of\n        - tokenizer: WordTokenizer\n        - indexer: WordIndexer\n        - embedding: ELMoEmbedding (Language Modeling BiLSTM)\n        - vocab: Vocab\n    \"\"\"\n\n    def __init__(self, tokenizers, indexer_config, embedding_config, vocab_config):\n        super(ElmoTokenMaker, self).__init__(\n            TokenMaker.WORD_TYPE,\n            tokenizer=tokenizers[\"word\"],\n            indexer=indexer.ELMoIndexer(tokenizers[\"word\"], **indexer_config),\n            embedding_fn=basic_embedding_fn(embedding_config, embedding.ELMoEmbedding),\n            vocab_config=\"elmo\",\n        )\n\n\n@register(f\"token:{TokenMaker.EXACT_MATCH_TYPE}\")\nclass ExactMatchTokenMaker(TokenMaker):\n    \"\"\"\n    Exact Match Token (Sparse Feature)\n\n    Three simple binary features, indicating whether p_i can be exactly matched\n    to one question word in q, either in its original, lowercase or lemma form.\n\n    example.\n        c: i do, q: i -> ['i', 'do'] -> [1, 0] -> tensor\n\n    consisting of\n        - tokenizer: WordTokenizer\n        - indexer: WordIndexer\n        - embedding: SparseFeature\n        - vocab: Vocab\n    \"\"\"\n\n    def __init__(self, tokenizers, indexer_config, embedding_config, vocab_config):\n        super(ExactMatchTokenMaker, self).__init__(\n            TokenMaker.EXACT_MATCH_TYPE,\n            tokenizer=tokenizers[\"word\"],\n            indexer=indexer.ExactMatchIndexer(tokenizers[\"word\"], **indexer_config),\n            embedding_fn=self._embedding_fn(embedding_config, indexer_config),\n            vocab_config=vocab_config,\n        )\n\n    def _embedding_fn(self, embedding_config, indexer_config):\n        def wrapper(vocab):\n            embed_type = embedding_config.get(\"type\", \"sparse\")\n            if \"type\" in embedding_config:\n                del embedding_config[\"type\"]\n\n            binary_classes = [\"False\", \"True\"]\n\n            feature_count = 1  # origin\n            embedding_config[\"classes\"] = [binary_classes]\n\n            if indexer_config.get(\"lower\", False):\n                feature_count += 1\n                embedding_config[\"classes\"].append(binary_classes)\n            if indexer_config.get(\"lemma\", False):\n                feature_count += 1\n                embedding_config[\"classes\"].append(binary_classes)\n\n            return embedding.SparseFeature(\n                vocab, embed_type, feature_count, params=embedding_config\n            )\n\n        return wrapper\n\n\n@register(f\"token:{TokenMaker.WORD_TYPE}\")\nclass WordTokenMaker(TokenMaker):\n    \"\"\"\n    Word Token (default)\n\n        i do -> ['i', 'do'] -> [1, 2] -> Embedding Matrix -> tensor\n\n    consisting of\n        - tokenizer: WordTokenizer\n        - indexer: WordIndexer\n        - embedding: WordEmbedding\n        - vocab: Vocab\n    \"\"\"\n\n    def __init__(self, tokenizers, indexer_config, embedding_config, vocab_config):\n        super(WordTokenMaker, self).__init__(\n            TokenMaker.WORD_TYPE,\n            tokenizer=tokenizers[\"word\"],\n            indexer=indexer.WordIndexer(tokenizers[\"word\"], **indexer_config),\n            embedding_fn=basic_embedding_fn(embedding_config, embedding.WordEmbedding),\n            vocab_config=vocab_config,\n        )\n\n\n@register(f\"token:{TokenMaker.FREQUENT_WORD_TYPE}\")\nclass FrequentWordTokenMaker(TokenMaker):\n    \"\"\"\n    Frequent-Tuning Word Token\n\n    word token + pre-trained word embeddings fixed and only fine-tune the N most frequent\n\n    example.\n        i do -> ['i', 'do'] -> [1, 2] -> Embedding Matrix -> tensor\n        finetuning only 'do'\n\n    consisting of\n        - tokenizer: WordTokenizer\n        - indexer: WordIndexer\n        - embedding: FrequentTuningWordEmbedding\n        - vocab: Vocab\n    \"\"\"\n\n    def __init__(self, tokenizers, indexer_config, embedding_config, vocab_config):\n        super(FrequentWordTokenMaker, self).__init__(\n            TokenMaker.FREQUENT_WORD_TYPE,\n            tokenizer=tokenizers[\"word\"],\n            indexer=indexer.WordIndexer(tokenizers[\"word\"], **indexer_config),\n            embedding_fn=basic_embedding_fn(\n                embedding_config, embedding.FrequentTuningWordEmbedding\n            ),\n            vocab_config=vocab_config,\n        )\n\n\n@register(f\"token:{TokenMaker.LINGUISTIC_TYPE}\")\nclass LinguisticTokenMaker(TokenMaker):\n    \"\"\"\n    Exact Match Token (Sparse Feature)\n\n    Three simple binary features, indicating whether p_i can be exactly matched\n    to one question word in q, either in its original, lowercase or lemma form.\n\n    example.\n        c: i do, q: i -> ['i', 'do'] -> [1, 0] -> tensor\n\n    consisting of\n        - tokenizer: WordTokenizer\n        - indexer: WordIndexer\n        - embedding: SparseFeature\n        - vocab: Vocab\n    \"\"\"\n\n    def __init__(self, tokenizers, indexer_config, embedding_config, vocab_config):\n        super(LinguisticTokenMaker, self).__init__(\n            TokenMaker.LINGUISTIC_TYPE,\n            tokenizer=tokenizers[\"word\"],\n            indexer=indexer.LinguisticIndexer(tokenizers[\"word\"], **indexer_config),\n            embedding_fn=self._embedding_fn(embedding_config, indexer_config),\n            vocab_config=vocab_config,\n        )\n\n    def _embedding_fn(self, embedding_config, indexer_config):\n        def wrapper(vocab):\n            embed_type = embedding_config.get(\"type\", \"sparse\")\n            if \"type\" in embedding_config:\n                del embedding_config[\"type\"]\n\n            feature_count = 0\n            embedding_config[\"classes\"] = []\n\n            if indexer_config.get(\"pos_tag\", False):\n                feature_count += 1\n                embedding_config[\"classes\"].append(POSTag.classes)\n            if indexer_config.get(\"ner\", False):\n                feature_count += 1\n                embedding_config[\"classes\"].append(NER.classes)\n            return embedding.SparseFeature(\n                vocab, embed_type, feature_count, params=embedding_config\n            )\n\n        return wrapper\n"
  },
  {
    "path": "claf/tokens/cove.py",
    "content": "\"\"\"\nThis code is from salesforce/cove\n(https://github.com/salesforce/cove/blob/master/cove/encoder.py)\n\"\"\"\n\nimport torch\nfrom torch import nn\n\nfrom claf.data.data_handler import CachePath, DataHandler\n\n\nclass MTLSTM(nn.Module):\n    def __init__(\n        self, word_embedding, pretrained_path=None, requires_grad=False, residual_embeddings=False\n    ):\n        \"\"\"Initialize an MTLSTM.\n\n        Arguments:\n            n_vocab (bool): If not None, initialize MTLSTM with an embedding matrix with n_vocab vectors\n            vectors (Float Tensor): If not None, initiapize embedding matrix with specified vectors\n            residual_embedding (bool): If True, concatenate the input embeddings with MTLSTM outputs during forward\n        \"\"\"\n        super(MTLSTM, self).__init__()\n        self.word_embedding = word_embedding\n        self.rnn = nn.LSTM(300, 300, num_layers=2, bidirectional=True, batch_first=True)\n\n        data_handler = DataHandler(cache_path=CachePath.PRETRAINED_VECTOR)\n        cove_weight_path = data_handler.read(pretrained_path, return_path=True)\n\n        if torch.cuda.is_available():\n            checkpoint = torch.load(cove_weight_path)\n        else:\n            checkpoint = torch.load(cove_weight_path, map_location=\"cpu\")\n\n        self.rnn.load_state_dict(checkpoint)\n        self.residual_embeddings = residual_embeddings\n        self.requires_grad = requires_grad\n\n    def forward(self, inputs):\n        \"\"\"A pretrained MT-LSTM (McCann et. al. 2017).\n        This LSTM was trained with 300d 840B GloVe on the WMT 2017 machine translation dataset.\n\n        Arguments:\n            inputs (Tensor): If MTLSTM handles embedding, a Long Tensor of size (batch_size, timesteps).\n                             Otherwise, a Float Tensor of size (batch_size, timesteps, features).\n            lengths (Long Tensor): (batch_size, lengths) lenghts of each sequence for handling padding\n            hidden (Float Tensor): initial hidden state of the LSTM\n        \"\"\"\n        embedded_inputs = self.word_embedding(inputs)\n        encoded_inputs, _ = self.rnn(embedded_inputs)\n        if not self.requires_grad:\n            encoded_inputs.detach()\n\n        outputs = encoded_inputs\n        if self.residual_embeddings:\n            outputs = torch.cat([embedded_inputs, encoded_inputs], 2)\n\n        return outputs\n"
  },
  {
    "path": "claf/tokens/elmo.py",
    "content": "\"\"\"\nThis code is from allenai/allennlp\n(https://github.com/allenai/allennlp/blob/master/allennlp/modules/elmo.py)\n\"\"\"\n\nimport json\nimport logging\nfrom typing import Union, List, Dict, Any, Optional, Tuple\nimport warnings\n\nimport numpy\nfrom overrides import overrides\nimport torch\nfrom torch.nn.utils.rnn import PackedSequence, pad_packed_sequence\nfrom torch.nn.modules import Dropout\n\n\nwith warnings.catch_warnings():  # pragma: no cover\n    warnings.filterwarnings(\"ignore\", category=FutureWarning)\n    import h5py\n\nfrom claf.modules.layer import Highway, ScalarMix\nfrom claf.modules.encoder import _EncoderBase, LstmCellWithProjection\n\n\nlogger = logging.getLogger(__name__)  # pylint: disable=invalid-name\n\n# pylint: disable=attribute-defined-outside-init\n\n\nclass Elmo(torch.nn.Module):  # pragma: no cover\n    \"\"\"\n    Compute ELMo representations using a pre-trained bidirectional language model.\n    See \"Deep contextualized word representations\", Peters et al. for details.\n    This module takes character id input and computes ``num_output_representations`` different layers\n    of ELMo representations.  Typically ``num_output_representations`` is 1 or 2.  For example, in\n    the case of the SRL model in the above paper, ``num_output_representations=1`` where ELMo was included at\n    the input token representation layer.  In the case of the SQuAD model, ``num_output_representations=2``\n    as ELMo was also included at the GRU output layer.\n    In the implementation below, we learn separate scalar weights for each output layer,\n    but only run the biLM once on each input sequence for efficiency.\n    Parameters\n    ----------\n    options_file : ``str``, required.\n        ELMo JSON options file\n    weight_file : ``str``, required.\n        ELMo hdf5 weight file\n    num_output_representations: ``int``, required.\n        The number of ELMo representation layers to output.\n    requires_grad: ``bool``, optional\n        If True, compute gradient of ELMo parameters for fine tuning.\n    do_layer_norm : ``bool``, optional, (default=False).\n        Should we apply layer normalization (passed to ``ScalarMix``)?\n    dropout : ``float``, optional, (default = 0.5).\n        The dropout to be applied to the ELMo representations.\n    vocab_to_cache : ``List[str]``, optional, (default = 0.5).\n        A list of words to pre-compute and cache character convolutions\n        for. If you use this option, Elmo expects that you pass word\n        indices of shape (batch_size, timesteps) to forward, instead\n        of character indices. If you use this option and pass a word which\n        wasn't pre-cached, this will break.\n    module : ``torch.nn.Module``, optional, (default = None).\n        If provided, then use this module instead of the pre-trained ELMo biLM.\n        If using this option, then pass ``None`` for both ``options_file``\n        and ``weight_file``.  The module must provide a public attribute\n        ``num_layers`` with the number of internal layers and its ``forward``\n        method must return a ``dict`` with ``activations`` and ``mask`` keys\n        (see `_ElmoBilm`` for an example).  Note that ``requires_grad`` is also\n        ignored with this option.\n    \"\"\"\n\n    def __init__(\n        self,\n        options_file: str,\n        weight_file: str,\n        num_output_representations: int,\n        requires_grad: bool = False,\n        do_layer_norm: bool = False,\n        dropout: float = 0.5,\n        vocab_to_cache: List[str] = None,\n        module: torch.nn.Module = None,\n    ) -> None:\n        super(Elmo, self).__init__()\n\n        logging.info(\"Initializing ELMo\")\n        if module is not None:\n            if options_file is not None or weight_file is not None:\n                raise ValueError(\"Don't provide options_file or weight_file with module\")\n            self._elmo_lstm = module\n        else:\n            self._elmo_lstm = _ElmoBiLm(\n                options_file,\n                weight_file,\n                requires_grad=requires_grad,\n                vocab_to_cache=vocab_to_cache,\n            )\n        self._has_cached_vocab = vocab_to_cache is not None\n        self._dropout = Dropout(p=dropout)\n        self._scalar_mixes: Any = []\n        for k in range(num_output_representations):\n            scalar_mix = ScalarMix(self._elmo_lstm.num_layers, do_layer_norm=do_layer_norm)\n            self.add_module(\"scalar_mix_{}\".format(k), scalar_mix)\n            self._scalar_mixes.append(scalar_mix)\n\n    def get_output_dim(self):\n        return self._elmo_lstm.get_output_dim()\n\n    def forward(\n        self,\n        inputs: torch.Tensor,\n        word_inputs: torch.Tensor = None,  # pylint: disable=arguments-differ\n    ) -> Dict[str, Union[torch.Tensor, List[torch.Tensor]]]:\n        \"\"\"\n        Parameters\n        ----------\n        inputs: ``torch.Tensor``, required.\n        Shape ``(batch_size, timesteps, 50)`` of character ids representing the current batch.\n        word_inputs : ``torch.Tensor``, required.\n            If you passed a cached vocab, you can in addition pass a tensor of shape\n            ``(batch_size, timesteps)``, which represent word ids which have been pre-cached.\n        Returns\n        -------\n        Dict with keys:\n        ``'elmo_representations'``: ``List[torch.Tensor]``\n            A ``num_output_representations`` list of ELMo representations for the input sequence.\n            Each representation is shape ``(batch_size, timesteps, embedding_dim)``\n        ``'mask'``:  ``torch.Tensor``\n            Shape ``(batch_size, timesteps)`` long tensor with sequence mask.\n        \"\"\"\n        # reshape the input if needed\n        original_shape = inputs.size()\n        if len(original_shape) > 3:\n            timesteps, num_characters = original_shape[-2:]\n            reshaped_inputs = inputs.view(-1, timesteps, num_characters)\n        else:\n            reshaped_inputs = inputs\n\n        if word_inputs is not None:\n            original_word_size = word_inputs.size()\n            if self._has_cached_vocab and len(original_word_size) > 2:\n                reshaped_word_inputs = word_inputs.view(-1, original_word_size[-1])\n                logger.warning(\n                    \"Word inputs were passed to ELMo but it does not have a cached vocab.\"\n                )\n                reshaped_word_inputs = None\n            else:\n                reshaped_word_inputs = word_inputs\n        else:\n            reshaped_word_inputs = word_inputs\n\n        # run the biLM\n        bilm_output = self._elmo_lstm(reshaped_inputs, reshaped_word_inputs)\n        layer_activations = bilm_output[\"activations\"]\n        mask_with_bos_eos = bilm_output[\"mask\"]\n\n        # compute the elmo representations\n        representations = []\n        for i in range(len(self._scalar_mixes)):\n            scalar_mix = getattr(self, \"scalar_mix_{}\".format(i))\n            representation_with_bos_eos = scalar_mix(layer_activations, mask_with_bos_eos)\n            representation_without_bos_eos, mask_without_bos_eos = remove_sentence_boundaries(\n                representation_with_bos_eos, mask_with_bos_eos\n            )\n            representations.append(self._dropout(representation_without_bos_eos))\n\n        # reshape if necessary\n        if word_inputs is not None and len(original_word_size) > 2:\n            mask = mask_without_bos_eos.view(original_word_size)\n            elmo_representations = [\n                representation.view(original_word_size + (-1,))\n                for representation in representations\n            ]\n        elif len(original_shape) > 3:\n            mask = mask_without_bos_eos.view(original_shape[:-1])\n            elmo_representations = [\n                representation.view(original_shape[:-1] + (-1,))\n                for representation in representations\n            ]\n        else:\n            mask = mask_without_bos_eos\n            elmo_representations = representations\n\n        return {\"elmo_representations\": elmo_representations, \"mask\": mask}\n\n    @classmethod\n    def from_params(cls, params) -> \"Elmo\":\n        # Add files to archive\n        params.add_file_to_archive(\"options_file\")\n        params.add_file_to_archive(\"weight_file\")\n\n        options_file = params.pop(\"options_file\")\n        weight_file = params.pop(\"weight_file\")\n        requires_grad = params.pop(\"requires_grad\", False)\n        num_output_representations = params.pop(\"num_output_representations\")\n        do_layer_norm = params.pop_bool(\"do_layer_norm\", False)\n        dropout = params.pop_float(\"dropout\", 0.5)\n        params.assert_empty(cls.__name__)\n\n        return cls(\n            options_file=options_file,\n            weight_file=weight_file,\n            num_output_representations=num_output_representations,\n            requires_grad=requires_grad,\n            do_layer_norm=do_layer_norm,\n            dropout=dropout,\n        )\n\n\ndef remove_sentence_boundaries(\n    tensor: torch.Tensor, mask: torch.Tensor\n) -> Tuple[torch.Tensor, torch.Tensor]:  # pragma: no cover\n    \"\"\"\n    Remove begin/end of sentence embeddings from the batch of sentences.\n    Given a batch of sentences with size ``(batch_size, timesteps, dim)``\n    this returns a tensor of shape ``(batch_size, timesteps - 2, dim)`` after removing\n    the beginning and end sentence markers.  The sentences are assumed to be padded on the right,\n    with the beginning of each sentence assumed to occur at index 0 (i.e., ``mask[:, 0]`` is assumed\n    to be 1).\n    Returns both the new tensor and updated mask.\n    This function is the inverse of ``add_sentence_boundary_token_ids``.\n    Parameters\n    ----------\n    tensor : ``torch.Tensor``\n        A tensor of shape ``(batch_size, timesteps, dim)``\n    mask : ``torch.Tensor``\n         A tensor of shape ``(batch_size, timesteps)``\n    Returns\n    -------\n    tensor_without_boundary_tokens : ``torch.Tensor``\n        The tensor after removing the boundary tokens of shape ``(batch_size, timesteps - 2, dim)``\n    new_mask : ``torch.Tensor``\n        The new mask for the tensor of shape ``(batch_size, timesteps - 2)``.\n    \"\"\"\n    # TODO: matthewp, profile this transfer\n    sequence_lengths = mask.sum(dim=1).detach().cpu().numpy()\n    tensor_shape = list(tensor.data.shape)\n    new_shape = list(tensor_shape)\n    new_shape[1] = tensor_shape[1] - 2\n    tensor_without_boundary_tokens = tensor.new_zeros(*new_shape)\n    new_mask = tensor.new_zeros((new_shape[0], new_shape[1]), dtype=torch.long)\n    for i, j in enumerate(sequence_lengths):\n        if j > 2:\n            tensor_without_boundary_tokens[i, : (j - 2), :] = tensor[i, 1 : (j - 1), :]\n            new_mask[i, : (j - 2)] = 1\n\n    return tensor_without_boundary_tokens, new_mask\n\n\nclass _ElmoBiLm(torch.nn.Module):  # pragma: no cover\n    \"\"\"\n    Run a pre-trained bidirectional language model, outputing the activations at each\n    layer for weighting together into an ELMo representation (with\n    ``allennlp.modules.seq2seq_encoders.Elmo``).  This is a lower level class, useful\n    for advanced uses, but most users should use ``allennlp.modules.seq2seq_encoders.Elmo``\n    directly.\n    Parameters\n    ----------\n    options_file : ``str``\n        ELMo JSON options file\n    weight_file : ``str``\n        ELMo hdf5 weight file\n    requires_grad: ``bool``, optional\n        If True, compute gradient of ELMo parameters for fine tuning.\n    vocab_to_cache : ``List[str]``, optional, (default = 0.5).\n        A list of words to pre-compute and cache character convolutions\n        for. If you use this option, _ElmoBiLm expects that you pass word\n        indices of shape (batch_size, timesteps) to forward, instead\n        of character indices. If you use this option and pass a word which\n        wasn't pre-cached, this will break.\n    \"\"\"\n\n    def __init__(\n        self,\n        options_file: str,\n        weight_file: str,\n        requires_grad: bool = False,\n        vocab_to_cache: List[str] = None,\n    ) -> None:\n        super(_ElmoBiLm, self).__init__()\n\n        self._token_embedder = _ElmoCharacterEncoder(\n            options_file, weight_file, requires_grad=requires_grad\n        )\n\n        self._requires_grad = requires_grad\n        if requires_grad and vocab_to_cache:\n            logging.warning(\n                \"You are fine tuning ELMo and caching char CNN word vectors. \"\n                \"This behaviour is not guaranteed to be well defined, particularly. \"\n                \"if not all of your inputs will occur in the vocabulary cache.\"\n            )\n        # This is an embedding, used to look up cached\n        # word vectors built from character level cnn embeddings.\n        self._word_embedding = None\n        self._bos_embedding: torch.Tensor = None\n        self._eos_embedding: torch.Tensor = None\n\n        with open(options_file, \"r\") as fin:\n            options = json.load(fin)\n        if not options[\"lstm\"].get(\"use_skip_connections\"):\n            raise ValueError(\"We only support pretrained biLMs with residual connections\")\n        self._elmo_lstm = ElmoLstm(\n            input_size=options[\"lstm\"][\"projection_dim\"],\n            hidden_size=options[\"lstm\"][\"projection_dim\"],\n            cell_size=options[\"lstm\"][\"dim\"],\n            num_layers=options[\"lstm\"][\"n_layers\"],\n            memory_cell_clip_value=options[\"lstm\"][\"cell_clip\"],\n            state_projection_clip_value=options[\"lstm\"][\"proj_clip\"],\n            requires_grad=requires_grad,\n        )\n        self._elmo_lstm.load_weights(weight_file)\n        # Number of representation layers including context independent layer\n        self.num_layers = options[\"lstm\"][\"n_layers\"] + 1\n\n    def get_output_dim(self):\n        return 2 * self._token_embedder.get_output_dim()\n\n    def forward(\n        self,\n        inputs: torch.Tensor,\n        word_inputs: torch.Tensor = None,  # pylint: disable=arguments-differ\n    ) -> Dict[str, Union[torch.Tensor, List[torch.Tensor]]]:\n        \"\"\"\n        Parameters\n        ----------\n        inputs: ``torch.Tensor``, required.\n            Shape ``(batch_size, timesteps, 50)`` of character ids representing the current batch.\n        word_inputs : ``torch.Tensor``, required.\n            If you passed a cached vocab, you can in addition pass a tensor of shape ``(batch_size, timesteps)``,\n            which represent word ids which have been pre-cached.\n        Returns\n        -------\n        Dict with keys:\n        ``'activations'``: ``List[torch.Tensor]``\n            A list of activations at each layer of the network, each of shape\n            ``(batch_size, timesteps + 2, embedding_dim)``\n        ``'mask'``:  ``torch.Tensor``\n            Shape ``(batch_size, timesteps + 2)`` long tensor with sequence mask.\n        Note that the output tensors all include additional special begin and end of sequence\n        markers.\n        \"\"\"\n        if self._word_embedding is not None and word_inputs is not None:\n            try:\n                mask_without_bos_eos = (word_inputs > 0).long()\n                # The character cnn part is cached - just look it up.\n                embedded_inputs = self._word_embedding(word_inputs)  # type: ignore\n                # shape (batch_size, timesteps + 2, embedding_dim)\n                type_representation, mask = add_sentence_boundary_token_ids(\n                    embedded_inputs, mask_without_bos_eos, self._bos_embedding, self._eos_embedding\n                )\n            except RuntimeError:\n                # Back off to running the character convolutions,\n                # as we might not have the words in the cache.\n                token_embedding = self._token_embedder(inputs)\n                mask = token_embedding[\"mask\"]\n                type_representation = token_embedding[\"token_embedding\"]\n        else:\n            token_embedding = self._token_embedder(inputs)\n            mask = token_embedding[\"mask\"]\n            type_representation = token_embedding[\"token_embedding\"]\n        lstm_outputs = self._elmo_lstm(type_representation, mask)\n\n        # Prepare the output.  The first layer is duplicated.\n        # Because of minor differences in how masking is applied depending\n        # on whether the char cnn layers are cached, we'll be defensive and\n        # multiply by the mask here. It's not strictly necessary, as the\n        # mask passed on is correct, but the values in the padded areas\n        # of the char cnn representations can change.\n        output_tensors = [\n            torch.cat([type_representation, type_representation], dim=-1)\n            * mask.float().unsqueeze(-1)\n        ]\n        for layer_activations in torch.chunk(lstm_outputs, lstm_outputs.size(0), dim=0):\n            output_tensors.append(layer_activations.squeeze(0))\n\n        return {\"activations\": output_tensors, \"mask\": mask}\n\n\ndef add_sentence_boundary_token_ids(\n    tensor: torch.Tensor, mask: torch.Tensor, sentence_begin_token: Any, sentence_end_token: Any\n) -> Tuple[torch.Tensor, torch.Tensor]:  # pragma: no cover\n    \"\"\"\n    Add begin/end of sentence tokens to the batch of sentences.\n    Given a batch of sentences with size ``(batch_size, timesteps)`` or\n    ``(batch_size, timesteps, dim)`` this returns a tensor of shape\n    ``(batch_size, timesteps + 2)`` or ``(batch_size, timesteps + 2, dim)`` respectively.\n    Returns both the new tensor and updated mask.\n    Parameters\n    ----------\n    tensor : ``torch.Tensor``\n        A tensor of shape ``(batch_size, timesteps)`` or ``(batch_size, timesteps, dim)``\n    mask : ``torch.Tensor``\n         A tensor of shape ``(batch_size, timesteps)``\n    sentence_begin_token: Any (anything that can be broadcast in torch for assignment)\n        For 2D input, a scalar with the <S> id. For 3D input, a tensor with length dim.\n    sentence_end_token: Any (anything that can be broadcast in torch for assignment)\n        For 2D input, a scalar with the </S> id. For 3D input, a tensor with length dim.\n    Returns\n    -------\n    tensor_with_boundary_tokens : ``torch.Tensor``\n        The tensor with the appended and prepended boundary tokens. If the input was 2D,\n        it has shape (batch_size, timesteps + 2) and if the input was 3D, it has shape\n        (batch_size, timesteps + 2, dim).\n    new_mask : ``torch.Tensor``\n        The new mask for the tensor, taking into account the appended tokens\n        marking the beginning and end of the sentence.\n    \"\"\"\n    # TODO: matthewp, profile this transfer\n    sequence_lengths = mask.sum(dim=1).detach().cpu().numpy()\n    tensor_shape = list(tensor.data.shape)\n    new_shape = list(tensor_shape)\n    new_shape[1] = tensor_shape[1] + 2\n    tensor_with_boundary_tokens = tensor.new_zeros(*new_shape)\n    if len(tensor_shape) == 2:\n        tensor_with_boundary_tokens[:, 1:-1] = tensor\n        tensor_with_boundary_tokens[:, 0] = sentence_begin_token\n        for i, j in enumerate(sequence_lengths):\n            tensor_with_boundary_tokens[i, j + 1] = sentence_end_token\n        new_mask = (tensor_with_boundary_tokens != 0).long()\n    elif len(tensor_shape) == 3:\n        tensor_with_boundary_tokens[:, 1:-1, :] = tensor\n        for i, j in enumerate(sequence_lengths):\n            tensor_with_boundary_tokens[i, 0, :] = sentence_begin_token\n            tensor_with_boundary_tokens[i, j + 1, :] = sentence_end_token\n        new_mask = ((tensor_with_boundary_tokens > 0).long().sum(dim=-1) > 0).long()\n    else:\n        raise ValueError(\"add_sentence_boundary_token_ids only accepts 2D and 3D input\")\n\n    return tensor_with_boundary_tokens, new_mask\n\n\ndef _make_bos_eos(\n    character: int,\n    padding_character: int,\n    beginning_of_word_character: int,\n    end_of_word_character: int,\n    max_word_length: int,\n):  # pragma: no cover\n    char_ids = [padding_character] * max_word_length\n    char_ids[0] = beginning_of_word_character\n    char_ids[1] = character\n    char_ids[2] = end_of_word_character\n    return char_ids\n\n\nclass _ElmoCharacterEncoder(torch.nn.Module):  # pragma: no cover\n    \"\"\"\n    Compute context sensitive token representation using pretrained biLM.\n    This embedder has input character ids of size (batch_size, sequence_length, 50)\n    and returns (batch_size, sequence_length + 2, embedding_dim), where embedding_dim\n    is specified in the options file (typically 512).\n    We add special entries at the beginning and end of each sequence corresponding\n    to <S> and </S>, the beginning and end of sentence tokens.\n    Note: this is a lower level class useful for advanced usage.  Most users should\n    use ``ElmoTokenEmbedder`` or ``allennlp.modules.Elmo`` instead.\n    Parameters\n    ----------\n    options_file : ``str``\n        ELMo JSON options file\n    weight_file : ``str``\n        ELMo hdf5 weight file\n    requires_grad: ``bool``, optional\n        If True, compute gradient of ELMo parameters for fine tuning.\n    The relevant section of the options file is something like:\n    .. example-code::\n        .. code-block:: python\n            {'char_cnn': {\n                'activation': 'relu',\n                'embedding': {'dim': 4},\n                'filters': [[1, 4], [2, 8], [3, 16], [4, 32], [5, 64]],\n                'max_characters_per_token': 50,\n                'n_characters': 262,\n                'n_highway': 2\n                }\n            }\n    \"\"\"\n\n    def __init__(self, options_file: str, weight_file: str, requires_grad: bool = False) -> None:\n        super(_ElmoCharacterEncoder, self).__init__()\n\n        with open(options_file, \"r\") as fin:\n            self._options = json.load(fin)\n        self._weight_file = weight_file\n\n        self.output_dim = self._options[\"lstm\"][\"projection_dim\"]\n        self.requires_grad = requires_grad\n\n        self._load_weights()\n\n        max_word_length = 50\n\n        # char ids 0-255 come from utf-8 encoding bytes\n        # assign 256-300 to special chars\n        beginning_of_sentence_character = 256  # <begin sentence>\n        end_of_sentence_character = 257  # <end sentence>\n        beginning_of_word_character = 258  # <begin word>\n        end_of_word_character = 259  # <end word>\n        padding_character = 260  # <padding>\n\n        beginning_of_sentence_characters = _make_bos_eos(\n            beginning_of_sentence_character,\n            padding_character,\n            beginning_of_word_character,\n            end_of_word_character,\n            max_word_length,\n        )\n        end_of_sentence_characters = _make_bos_eos(\n            end_of_sentence_character,\n            padding_character,\n            beginning_of_word_character,\n            end_of_word_character,\n            max_word_length,\n        )\n\n        # Cache the arrays for use in forward -- +1 due to masking.\n        self._beginning_of_sentence_characters = torch.from_numpy(\n            numpy.array(beginning_of_sentence_characters) + 1\n        )\n        self._end_of_sentence_characters = torch.from_numpy(\n            numpy.array(end_of_sentence_characters) + 1\n        )\n\n    def get_output_dim(self):\n        return self.output_dim\n\n    @overrides\n    def forward(\n        self, inputs: torch.Tensor\n    ) -> Dict[str, torch.Tensor]:  # pylint: disable=arguments-differ\n        \"\"\"\n        Compute context insensitive token embeddings for ELMo representations.\n        Parameters\n        ----------\n        inputs: ``torch.Tensor``\n            Shape ``(batch_size, sequence_length, 50)`` of character ids representing the\n            current batch.\n        Returns\n        -------\n        Dict with keys:\n        ``'token_embedding'``: ``torch.Tensor``\n            Shape ``(batch_size, sequence_length + 2, embedding_dim)`` tensor with context\n            insensitive token representations.\n        ``'mask'``:  ``torch.Tensor``\n            Shape ``(batch_size, sequence_length + 2)`` long tensor with sequence mask.\n        \"\"\"\n        # Add BOS/EOS\n        mask = ((inputs > 0).long().sum(dim=-1) > 0).long()\n        character_ids_with_bos_eos, mask_with_bos_eos = add_sentence_boundary_token_ids(\n            inputs, mask, self._beginning_of_sentence_characters, self._end_of_sentence_characters\n        )\n\n        # the character id embedding\n        max_chars_per_token = self._options[\"char_cnn\"][\"max_characters_per_token\"]\n        # (batch_size * sequence_length, max_chars_per_token, embed_dim)\n        character_embedding = torch.nn.functional.embedding(\n            character_ids_with_bos_eos.view(-1, max_chars_per_token), self._char_embedding_weights\n        )\n\n        # run convolutions\n        cnn_options = self._options[\"char_cnn\"]\n        if cnn_options[\"activation\"] == \"tanh\":\n            activation = torch.nn.functional.tanh\n        elif cnn_options[\"activation\"] == \"relu\":\n            activation = torch.nn.functional.relu\n        else:\n            raise ValueError(\"Unknown activation\")\n\n        # (batch_size * sequence_length, embed_dim, max_chars_per_token)\n        character_embedding = torch.transpose(character_embedding, 1, 2)\n        convs = []\n        for i in range(len(self._convolutions)):\n            conv = getattr(self, \"char_conv_{}\".format(i))\n            convolved = conv(character_embedding)\n            # (batch_size * sequence_length, n_filters for this width)\n            convolved, _ = torch.max(convolved, dim=-1)\n            convolved = activation(convolved)\n            convs.append(convolved)\n\n        # (batch_size * sequence_length, n_filters)\n        token_embedding = torch.cat(convs, dim=-1)\n\n        # apply the highway layers (batch_size * sequence_length, n_filters)\n        token_embedding = self._highways(token_embedding)\n\n        # final projection  (batch_size * sequence_length, embedding_dim)\n        token_embedding = self._projection(token_embedding)\n\n        # reshape to (batch_size, sequence_length, embedding_dim)\n        batch_size, sequence_length, _ = character_ids_with_bos_eos.size()\n\n        return {\n            \"mask\": mask_with_bos_eos,\n            \"token_embedding\": token_embedding.view(batch_size, sequence_length, -1),\n        }\n\n    def _load_weights(self):\n        self._load_char_embedding()\n        self._load_cnn_weights()\n        self._load_highway()\n        self._load_projection()\n\n    def _load_char_embedding(self):\n        with h5py.File(self._weight_file, \"r\") as fin:\n            char_embed_weights = fin[\"char_embed\"][...]\n\n        weights = numpy.zeros(\n            (char_embed_weights.shape[0] + 1, char_embed_weights.shape[1]), dtype=\"float32\"\n        )\n        weights[1:, :] = char_embed_weights\n\n        self._char_embedding_weights = torch.nn.Parameter(\n            torch.FloatTensor(weights), requires_grad=self.requires_grad\n        )\n\n    def _load_cnn_weights(self):\n        cnn_options = self._options[\"char_cnn\"]\n        filters = cnn_options[\"filters\"]\n        char_embed_dim = cnn_options[\"embedding\"][\"dim\"]\n\n        convolutions = []\n        for i, (width, num) in enumerate(filters):\n            conv = torch.nn.Conv1d(\n                in_channels=char_embed_dim, out_channels=num, kernel_size=width, bias=True\n            )\n            # load the weights\n            with h5py.File(self._weight_file, \"r\") as fin:\n                weight = fin[\"CNN\"][\"W_cnn_{}\".format(i)][...]\n                bias = fin[\"CNN\"][\"b_cnn_{}\".format(i)][...]\n\n            w_reshaped = numpy.transpose(weight.squeeze(axis=0), axes=(2, 1, 0))\n            if w_reshaped.shape != tuple(conv.weight.data.shape):\n                raise ValueError(\"Invalid weight file\")\n            conv.weight.data.copy_(torch.FloatTensor(w_reshaped))\n            conv.bias.data.copy_(torch.FloatTensor(bias))\n\n            conv.weight.requires_grad = self.requires_grad\n            conv.bias.requires_grad = self.requires_grad\n\n            convolutions.append(conv)\n            self.add_module(\"char_conv_{}\".format(i), conv)\n\n        self._convolutions = convolutions\n\n    def _load_highway(self):\n        # pylint: disable=protected-access\n        # the highway layers have same dimensionality as the number of cnn filters\n        cnn_options = self._options[\"char_cnn\"]\n        filters = cnn_options[\"filters\"]\n        n_filters = sum(f[1] for f in filters)\n        n_highway = cnn_options[\"n_highway\"]\n\n        # create the layers, and load the weights\n        self._highways = Highway(n_filters, n_highway, activation=torch.nn.functional.relu)\n        for k in range(n_highway):\n            # The AllenNLP highway is one matrix multplication with concatenation of\n            # transform and carry weights.\n            with h5py.File(self._weight_file, \"r\") as fin:\n                # The weights are transposed due to multiplication order assumptions in tf\n                # vs pytorch (tf.matmul(X, W) vs pytorch.matmul(W, X))\n                w_transform = numpy.transpose(fin[\"CNN_high_{}\".format(k)][\"W_transform\"][...])\n                # -1.0 since AllenNLP is g * x + (1 - g) * f(x) but tf is (1 - g) * x + g * f(x)\n                w_carry = -1.0 * numpy.transpose(fin[\"CNN_high_{}\".format(k)][\"W_carry\"][...])\n                weight = numpy.concatenate([w_transform, w_carry], axis=0)\n                self._highways._layers[k].weight.data.copy_(torch.FloatTensor(weight))\n                self._highways._layers[k].weight.requires_grad = self.requires_grad\n\n                b_transform = fin[\"CNN_high_{}\".format(k)][\"b_transform\"][...]\n                b_carry = -1.0 * fin[\"CNN_high_{}\".format(k)][\"b_carry\"][...]\n                bias = numpy.concatenate([b_transform, b_carry], axis=0)\n                self._highways._layers[k].bias.data.copy_(torch.FloatTensor(bias))\n                self._highways._layers[k].bias.requires_grad = self.requires_grad\n\n    def _load_projection(self):\n        cnn_options = self._options[\"char_cnn\"]\n        filters = cnn_options[\"filters\"]\n        n_filters = sum(f[1] for f in filters)\n\n        self._projection = torch.nn.Linear(n_filters, self.output_dim, bias=True)\n        with h5py.File(self._weight_file, \"r\") as fin:\n            weight = fin[\"CNN_proj\"][\"W_proj\"][...]\n            bias = fin[\"CNN_proj\"][\"b_proj\"][...]\n            self._projection.weight.data.copy_(torch.FloatTensor(numpy.transpose(weight)))\n            self._projection.bias.data.copy_(torch.FloatTensor(bias))\n\n            self._projection.weight.requires_grad = self.requires_grad\n            self._projection.bias.requires_grad = self.requires_grad\n\n\nclass ElmoLstm(_EncoderBase):  # pragma: no cover\n    \"\"\"\n    A stacked, bidirectional LSTM which uses\n    :class:`~allennlp.modules.lstm_cell_with_projection.LstmCellWithProjection`'s\n    with highway layers between the inputs to layers.\n    The inputs to the forward and backward directions are independent - forward and backward\n    states are not concatenated between layers.\n    Additionally, this LSTM maintains its `own` state, which is updated every time\n    ``forward`` is called. It is dynamically resized for different batch sizes and is\n    designed for use with non-continuous inputs (i.e inputs which aren't formatted as a stream,\n    such as text used for a language modelling task, which is how stateful RNNs are typically used).\n    This is non-standard, but can be thought of as having an \"end of sentence\" state, which is\n    carried across different sentences.\n    Parameters\n    ----------\n    input_size : ``int``, required\n        The dimension of the inputs to the LSTM.\n    hidden_size : ``int``, required\n        The dimension of the outputs of the LSTM.\n    cell_size : ``int``, required.\n        The dimension of the memory cell of the\n        :class:`~allennlp.modules.lstm_cell_with_projection.LstmCellWithProjection`.\n    num_layers : ``int``, required\n        The number of bidirectional LSTMs to use.\n    requires_grad: ``bool``, optional\n        If True, compute gradient of ELMo parameters for fine tuning.\n    recurrent_dropout_probability: ``float``, optional (default = 0.0)\n        The dropout probability to be used in a dropout scheme as stated in\n        `A Theoretically Grounded Application of Dropout in Recurrent Neural Networks\n        <https://arxiv.org/abs/1512.05287>`_ .\n    state_projection_clip_value: ``float``, optional, (default = None)\n        The magnitude with which to clip the hidden_state after projecting it.\n    memory_cell_clip_value: ``float``, optional, (default = None)\n        The magnitude with which to clip the memory cell.\n    \"\"\"\n\n    def __init__(\n        self,\n        input_size: int,\n        hidden_size: int,\n        cell_size: int,\n        num_layers: int,\n        requires_grad: bool = False,\n        recurrent_dropout_probability: float = 0.0,\n        memory_cell_clip_value: Optional[float] = None,\n        state_projection_clip_value: Optional[float] = None,\n    ) -> None:\n        super(ElmoLstm, self).__init__(stateful=True)\n\n        # Required to be wrapped with a :class:`PytorchSeq2SeqWrapper`.\n        self.input_size = input_size\n        self.hidden_size = hidden_size\n        self.num_layers = num_layers\n        self.cell_size = cell_size\n        self.requires_grad = requires_grad\n\n        forward_layers = []\n        backward_layers = []\n\n        lstm_input_size = input_size\n        go_forward = True\n        for layer_index in range(num_layers):\n            forward_layer = LstmCellWithProjection(\n                lstm_input_size,\n                hidden_size,\n                cell_size,\n                go_forward,\n                recurrent_dropout_probability,\n                memory_cell_clip_value,\n                state_projection_clip_value,\n            )\n            backward_layer = LstmCellWithProjection(\n                lstm_input_size,\n                hidden_size,\n                cell_size,\n                not go_forward,\n                recurrent_dropout_probability,\n                memory_cell_clip_value,\n                state_projection_clip_value,\n            )\n            lstm_input_size = hidden_size\n\n            self.add_module(\"forward_layer_{}\".format(layer_index), forward_layer)\n            self.add_module(\"backward_layer_{}\".format(layer_index), backward_layer)\n            forward_layers.append(forward_layer)\n            backward_layers.append(backward_layer)\n        self.forward_layers = forward_layers\n        self.backward_layers = backward_layers\n\n    def forward(\n        self, inputs: torch.Tensor, mask: torch.LongTensor  # pylint: disable=arguments-differ\n    ) -> torch.Tensor:\n        \"\"\"\n        Parameters\n        ----------\n        inputs : ``torch.Tensor``, required.\n            A Tensor of shape ``(batch_size, sequence_length, hidden_size)``.\n        mask : ``torch.LongTensor``, required.\n            A binary mask of shape ``(batch_size, sequence_length)`` representing the\n            non-padded elements in each sequence in the batch.\n        Returns\n        -------\n        A ``torch.Tensor`` of shape (num_layers, batch_size, sequence_length, hidden_size),\n        where the num_layers dimension represents the LSTM output from that layer.\n        \"\"\"\n        batch_size, total_sequence_length = mask.size()\n        stacked_sequence_output, final_states, restoration_indices = self.sort_and_run_forward(\n            self._lstm_forward, inputs, mask\n        )\n\n        num_layers, num_valid, returned_timesteps, encoder_dim = stacked_sequence_output.size()\n        # Add back invalid rows which were removed in the call to sort_and_run_forward.\n        if num_valid < batch_size:\n            zeros = stacked_sequence_output.new_zeros(\n                num_layers, batch_size - num_valid, returned_timesteps, encoder_dim\n            )\n            stacked_sequence_output = torch.cat([stacked_sequence_output, zeros], 1)\n\n            # The states also need to have invalid rows added back.\n            new_states = []\n            for state in final_states:\n                state_dim = state.size(-1)\n                zeros = state.new_zeros(num_layers, batch_size - num_valid, state_dim)\n                new_states.append(torch.cat([state, zeros], 1))\n            final_states = new_states\n\n        # It's possible to need to pass sequences which are padded to longer than the\n        # max length of the sequence to a Seq2StackEncoder. However, packing and unpacking\n        # the sequences mean that the returned tensor won't include these dimensions, because\n        # the RNN did not need to process them. We add them back on in the form of zeros here.\n        sequence_length_difference = total_sequence_length - returned_timesteps\n        if sequence_length_difference > 0:\n            zeros = stacked_sequence_output.new_zeros(\n                num_layers,\n                batch_size,\n                sequence_length_difference,\n                stacked_sequence_output[0].size(-1),\n            )\n            stacked_sequence_output = torch.cat([stacked_sequence_output, zeros], 2)\n\n        self._update_states(final_states, restoration_indices)\n\n        # Restore the original indices and return the sequence.\n        # Has shape (num_layers, batch_size, sequence_length, hidden_size)\n        return stacked_sequence_output.index_select(1, restoration_indices)\n\n    def _lstm_forward(\n        self,\n        inputs: PackedSequence,\n        initial_state: Optional[Tuple[torch.Tensor, torch.Tensor]] = None,\n    ) -> Tuple[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]]:\n        \"\"\"\n        Parameters\n        ----------\n        inputs : ``PackedSequence``, required.\n            A batch first ``PackedSequence`` to run the stacked LSTM over.\n        initial_state : ``Tuple[torch.Tensor, torch.Tensor]``, optional, (default = None)\n            A tuple (state, memory) representing the initial hidden state and memory\n            of the LSTM, with shape (num_layers, batch_size, 2 * hidden_size) and\n            (num_layers, batch_size, 2 * cell_size) respectively.\n        Returns\n        -------\n        output_sequence : ``torch.FloatTensor``\n            The encoded sequence of shape (num_layers, batch_size, sequence_length, hidden_size)\n        final_states: ``Tuple[torch.FloatTensor, torch.FloatTensor]``\n            The per-layer final (state, memory) states of the LSTM, with shape\n            (num_layers, batch_size, 2 * hidden_size) and  (num_layers, batch_size, 2 * cell_size)\n            respectively. The last dimension is duplicated because it contains the state/memory\n            for both the forward and backward layers.\n        \"\"\"\n        if initial_state is None:\n            hidden_states: List[Optional[Tuple[torch.Tensor, torch.Tensor]]] = [None] * len(\n                self.forward_layers\n            )\n        elif initial_state[0].size()[0] != len(self.forward_layers):\n            raise ValueError(\n                \"Initial states were passed to forward() but the number of \"\n                \"initial states does not match the number of layers.\"\n            )\n        else:\n            hidden_states = list(zip(initial_state[0].split(1, 0), initial_state[1].split(1, 0)))\n\n        inputs, batch_lengths = pad_packed_sequence(inputs, batch_first=True)\n        forward_output_sequence = inputs\n        backward_output_sequence = inputs\n\n        final_states = []\n        sequence_outputs = []\n        for layer_index, state in enumerate(hidden_states):\n            forward_layer = getattr(self, \"forward_layer_{}\".format(layer_index))\n            backward_layer = getattr(self, \"backward_layer_{}\".format(layer_index))\n\n            forward_cache = forward_output_sequence\n            backward_cache = backward_output_sequence\n\n            if state is not None:\n                forward_hidden_state, backward_hidden_state = state[0].split(self.hidden_size, 2)\n                forward_memory_state, backward_memory_state = state[1].split(self.cell_size, 2)\n                forward_state = (forward_hidden_state, forward_memory_state)\n                backward_state = (backward_hidden_state, backward_memory_state)\n            else:\n                forward_state = None\n                backward_state = None\n\n            forward_output_sequence, forward_state = forward_layer(\n                forward_output_sequence, batch_lengths, forward_state\n            )\n            backward_output_sequence, backward_state = backward_layer(\n                backward_output_sequence, batch_lengths, backward_state\n            )\n            # Skip connections, just adding the input to the output.\n            if layer_index != 0:\n                forward_output_sequence += forward_cache\n                backward_output_sequence += backward_cache\n\n            sequence_outputs.append(\n                torch.cat([forward_output_sequence, backward_output_sequence], -1)\n            )\n            # Append the state tuples in a list, so that we can return\n            # the final states for all the layers.\n            final_states.append(\n                (\n                    torch.cat([forward_state[0], backward_state[0]], -1),\n                    torch.cat([forward_state[1], backward_state[1]], -1),\n                )\n            )\n\n        stacked_sequence_outputs: torch.FloatTensor = torch.stack(sequence_outputs)\n        # Stack the hidden state and memory for each layer into 2 tensors of shape\n        # (num_layers, batch_size, hidden_size) and (num_layers, batch_size, cell_size)\n        # respectively.\n        final_hidden_states, final_memory_states = zip(*final_states)\n        final_state_tuple: Tuple[torch.FloatTensor, torch.FloatTensor] = (\n            torch.cat(final_hidden_states, 0),\n            torch.cat(final_memory_states, 0),\n        )\n        return stacked_sequence_outputs, final_state_tuple\n\n    def load_weights(self, weight_file: str) -> None:\n        \"\"\"\n        Load the pre-trained weights from the file.\n        \"\"\"\n        requires_grad = self.requires_grad\n\n        with h5py.File(weight_file, \"r\") as fin:\n            for i_layer, lstms in enumerate(zip(self.forward_layers, self.backward_layers)):\n                for j_direction, lstm in enumerate(lstms):\n                    # lstm is an instance of LSTMCellWithProjection\n                    cell_size = lstm.cell_size\n\n                    dataset = fin[\"RNN_%s\" % j_direction][\"RNN\"][\"MultiRNNCell\"][\n                        \"Cell%s\" % i_layer\n                    ][\"LSTMCell\"]\n\n                    # tensorflow packs together both W and U matrices into one matrix,\n                    # but pytorch maintains individual matrices.  In addition, tensorflow\n                    # packs the gates as input, memory, forget, output but pytorch\n                    # uses input, forget, memory, output.  So we need to modify the weights.\n                    tf_weights = numpy.transpose(dataset[\"W_0\"][...])\n                    torch_weights = tf_weights.copy()\n\n                    # split the W from U matrices\n                    input_size = lstm.input_size\n                    input_weights = torch_weights[:, :input_size]\n                    recurrent_weights = torch_weights[:, input_size:]\n                    tf_input_weights = tf_weights[:, :input_size]\n                    tf_recurrent_weights = tf_weights[:, input_size:]\n\n                    # handle the different gate order convention\n                    for torch_w, tf_w in [\n                        [input_weights, tf_input_weights],\n                        [recurrent_weights, tf_recurrent_weights],\n                    ]:\n                        torch_w[(1 * cell_size) : (2 * cell_size), :] = tf_w[\n                            (2 * cell_size) : (3 * cell_size), :\n                        ]\n                        torch_w[(2 * cell_size) : (3 * cell_size), :] = tf_w[\n                            (1 * cell_size) : (2 * cell_size), :\n                        ]\n\n                    lstm.input_linearity.weight.data.copy_(torch.FloatTensor(input_weights))\n                    lstm.state_linearity.weight.data.copy_(torch.FloatTensor(recurrent_weights))\n                    lstm.input_linearity.weight.requires_grad = requires_grad\n                    lstm.state_linearity.weight.requires_grad = requires_grad\n\n                    # the bias weights\n                    tf_bias = dataset[\"B\"][...]\n                    # tensorflow adds 1.0 to forget gate bias instead of modifying the\n                    # parameters...\n                    tf_bias[(2 * cell_size) : (3 * cell_size)] += 1\n                    torch_bias = tf_bias.copy()\n                    torch_bias[(1 * cell_size) : (2 * cell_size)] = tf_bias[\n                        (2 * cell_size) : (3 * cell_size)\n                    ]\n                    torch_bias[(2 * cell_size) : (3 * cell_size)] = tf_bias[\n                        (1 * cell_size) : (2 * cell_size)\n                    ]\n                    lstm.state_linearity.bias.data.copy_(torch.FloatTensor(torch_bias))\n                    lstm.state_linearity.bias.requires_grad = requires_grad\n\n                    # the projection weights\n                    proj_weights = numpy.transpose(dataset[\"W_P_0\"][...])\n                    lstm.state_projection.weight.data.copy_(torch.FloatTensor(proj_weights))\n                    lstm.state_projection.weight.requires_grad = requires_grad\n"
  },
  {
    "path": "claf/tokens/embedding/__init__.py",
    "content": "\nfrom .bert_embedding import BertEmbedding\nfrom .char_embedding import CharEmbedding\nfrom .cove_embedding import CoveEmbedding\nfrom .elmo_embedding import ELMoEmbedding\nfrom .frequent_word_embedding import FrequentTuningWordEmbedding\nfrom .sparse_feature import SparseFeature\nfrom .word_embedding import WordEmbedding\n\n\n__all__ = [\n    \"BertEmbedding\",\n    \"CharEmbedding\",\n    \"CoveEmbedding\",\n    \"ELMoEmbedding\",\n    \"FrequentTuningWordEmbedding\",\n    \"SparseFeature\",\n    \"WordEmbedding\",\n]\n"
  },
  {
    "path": "claf/tokens/embedding/base.py",
    "content": "\nimport torch\n\n\nclass TokenEmbedding(torch.nn.Module):\n    \"\"\"\n    Token Embedding\n\n    It can be embedding matrix, language model (ELMo), neural machine translation model (CoVe) and features.\n\n    * Args:\n        vocab: Vocab (rqa.tokens.vocab)\n    \"\"\"\n\n    def __init__(self, vocab):\n        super(TokenEmbedding, self).__init__()\n\n        self.vocab = vocab\n\n    def forward(self, tokens):\n        \"\"\" embedding look-up \"\"\"\n        raise NotImplementedError\n\n    def get_output_dim(self):\n        \"\"\" get embedding dimension \"\"\"\n        raise NotImplementedError\n\n    def get_vocab_size(self):\n        return len(self.vocab)\n"
  },
  {
    "path": "claf/tokens/embedding/bert_embedding.py",
    "content": "\nfrom overrides import overrides\n\nfrom transformers import BertModel\n\nimport claf.modules.functional as f\n\nfrom .base import TokenEmbedding\n\n\nclass BertEmbedding(TokenEmbedding):\n    \"\"\"\n    BERT Embedding(Encoder)\n\n    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n    (https://arxiv.org/abs/1810.04805)\n\n    * Args:\n        vocab: Vocab (claf.tokens.vocab)\n\n    * Kwargs:\n        pretrained_model_name: ...\n        use_as_embedding: ...\n        trainable: Finetune or fixed\n    \"\"\"\n\n    def __init__(self, vocab, pretrained_model_name=None, trainable=False, unit=\"subword\"):\n        super(BertEmbedding, self).__init__(vocab)\n        self.trainable = trainable\n\n        self.pad_index = vocab.get_index(vocab.pad_token)\n        self.sep_index = vocab.get_index(vocab.sep_token)\n\n        if unit != \"subword\":\n            raise NotImplementedError(\"BertEmbedding is only available 'subword' unit, right now.\")\n\n        self.bert_model = BertModel.from_pretrained(pretrained_model_name)  # BertModel with config\n\n    @overrides\n    def forward(self, inputs):\n        if inputs.size(1) > self.bert_model.config.max_position_embeddings:\n            raise ValueError(\n                f\"max_seq_length in this bert_model is '{self.bert_model.config.max_position_embeddings}'. (input seq_length: {inputs.size(1)})\"\n            )\n\n        # TODO: add text_unit option\n        # current: sub_word (default) / later: sub_words --(average)--> word\n        attention_mask = (inputs != self.pad_index).long()\n        sequence_output, pooled_output = self.bert_model(\n            inputs, attention_mask=attention_mask, output_all_encoded_layers=False\n        )\n        sequence_output = f.masked_zero(sequence_output, attention_mask)\n\n        if not self.trainable:\n            sequence_output = sequence_output.detach()\n            pooled_output = pooled_output.detach()\n\n        sequence_output = self.remove_cls_sep_token(inputs, sequence_output)\n        return sequence_output\n\n    @overrides\n    def get_output_dim(self):\n        return self.bert_model.config.hidden_size\n\n    def remove_cls_sep_token(self, inputs, outputs):\n        seq_mask = inputs.eq(self.sep_index).eq(0)\n        outputs = f.masked_zero(outputs, seq_mask)\n        return outputs[:, 1:-1, :]  # B, S_L, D\n"
  },
  {
    "path": "claf/tokens/embedding/char_embedding.py",
    "content": "\nfrom overrides import overrides\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom claf.modules.activation import get_activation_fn\n\nfrom .base import TokenEmbedding\n\n\nclass CharEmbedding(TokenEmbedding):\n    \"\"\"\n    Character Embedding (CharCNN)\n    (https://arxiv.org/abs/1509.01626)\n\n    * Args:\n        vocab: Vocab (claf.tokens.vocab)\n\n    * Kwargs:\n        dropout: The number of dropout probability\n        embed_dim: The number of embedding dimension\n        kernel_sizes: The list of kernel size (n-gram)\n        num_filter: The number of cnn filter\n        activation: Activation Function (eg. ReLU)\n    \"\"\"\n\n    def __init__(\n        self, vocab, dropout=0.2, embed_dim=16, kernel_sizes=[5], num_filter=100, activation=\"relu\"\n    ):\n        super(CharEmbedding, self).__init__(vocab)\n\n        self.embed_dim = embed_dim\n        self.num_filter = num_filter\n\n        self.weight = self._init_weight(trainable=True)\n        self.convs = [\n            nn.Conv1d(\n                in_channels=1,\n                out_channels=num_filter,\n                kernel_size=embed_dim * kernel_size,\n                stride=embed_dim,\n            )\n            for kernel_size in kernel_sizes\n        ]  # kernel_size = n-gram\n        for i, conv in enumerate(self.convs):\n            self.add_module(f\"conv_{i}\", conv)\n\n        self.activation_fn = get_activation_fn(activation)()\n        self.dropout = nn.Dropout(p=dropout)\n\n        self.projection = None\n        if len(kernel_sizes) > 1:\n            maxpool_output_dim = len(kernel_sizes) * num_filter\n            self.projection = nn.Linear(maxpool_output_dim, num_filter)\n\n    def _init_weight(self, trainable=False):\n        weight = torch.FloatTensor(self.get_vocab_size(), self.embed_dim)\n        weight = torch.nn.Parameter(weight, requires_grad=trainable)\n        torch.nn.init.xavier_uniform_(weight)\n        return weight\n\n    @overrides\n    def forward(self, chars):\n        mask_chars = (chars != 0).long()\n\n        B, W_L, C_L = chars.size()  # (batch_size, word_maxlen, char_maxlen)\n        chars = chars.view(B, W_L * C_L)\n\n        char_embedds = F.embedding(chars, self.weight)\n        char_embedds = char_embedds.view(B, W_L, C_L, -1)\n\n        # Masking\n        char_embedds = char_embedds * mask_chars.unsqueeze(-1).float()\n        char_embedds = char_embedds.view(B * W_L, 1, -1)\n\n        conv_outputs = []\n        for i in range(len(self.convs)):\n            conv = getattr(self, f\"conv_{i}\")\n            output = self.activation_fn(conv(char_embedds))\n            pooled = F.max_pool1d(output, output.size(2)).squeeze(2)\n\n            conv_outputs.append(pooled)\n\n        encoded = conv_outputs[0]\n        if len(conv_outputs) > 1:\n            encoded = torch.cat(conv_outputs, dim=1)\n        encoded = encoded.view(B, W_L, -1)\n\n        if self.projection:\n            encoded = self.projection(encoded)\n        return self.dropout(encoded)\n\n    @overrides\n    def get_output_dim(self):\n        return self.num_filter\n"
  },
  {
    "path": "claf/tokens/embedding/cove_embedding.py",
    "content": "\n\nfrom overrides import overrides\n\nimport torch.nn as nn\n\nfrom claf.tokens.cove import MTLSTM\n\nfrom .base import TokenEmbedding\nfrom .word_embedding import WordEmbedding\n\n\nclass CoveEmbedding(TokenEmbedding):\n    \"\"\"\n    Cove Embedding\n\n    Learned in Translation: Contextualized Word Vectors\n    (http://papers.nips.cc/paper/7209-learned-in-translation-contextualized-word-vectors.pdf)\n\n    * Args:\n        vocab: Vocab (claf.tokens.vocab)\n\n    * Kwargs:\n        dropout: The number of dropout probability\n        pretrained_path: pretrained vector path (eg. GloVe)\n        trainable: finetune or fixed\n        project_dim: The number of project (linear) dimension\n    \"\"\"\n\n    def __init__(\n        self,\n        vocab,\n        glove_pretrained_path=None,\n        model_pretrained_path=None,\n        dropout=0.2,\n        trainable=False,\n        project_dim=None,\n    ):\n        super(CoveEmbedding, self).__init__(vocab)\n\n        self.embed_dim = 600  # MTLSTM (hidden_size=300 + bidirectional => 600)\n        word_embedding = WordEmbedding(\n            vocab, dropout=0, embed_dim=300, pretrained_path=glove_pretrained_path\n        )\n        self.cove = MTLSTM(\n            word_embedding, pretrained_path=model_pretrained_path, requires_grad=trainable\n        )\n\n        if dropout and dropout > 0:\n            self.dropout = nn.Dropout(p=dropout)\n        else:\n            self.dropout = lambda x: x\n\n        self.project_dim = project_dim\n        self.project_linear = None\n        if project_dim:\n            self.project_linear = nn.Linear(self.elmo.get_output_dim(), project_dim)\n\n    @overrides\n    def forward(self, words):\n        embedded_words = self.cove(words)\n        return self.dropout(embedded_words)\n\n    @overrides\n    def get_output_dim(self):\n        if self.project_linear:\n            return self.project_dim\n        return self.embed_dim\n"
  },
  {
    "path": "claf/tokens/embedding/elmo_embedding.py",
    "content": "\nfrom overrides import overrides\n\nimport torch.nn as nn\n\nfrom claf.data.data_handler import CachePath, DataHandler\nfrom claf.tokens.elmo import Elmo\n\nfrom .base import TokenEmbedding\n\n\nDEFAULT_OPTIONS_FILE = \"elmo_2x4096_512_2048cnn_2xhighway_options.json\"\nDEFAULT_WEIGHT_FILE = \"elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5\"\nHIDDEN_SIZE = 1024\n\n\nclass ELMoEmbedding(TokenEmbedding):\n    \"\"\"\n    ELMo Embedding\n    Embedding From Language Model\n\n    Deep contextualized word representations\n    (https://arxiv.org/abs/1802.0536)\n\n    * Args:\n        vocab: Vocab (claf.tokens.vocab)\n\n    * Kwargs:\n        options_file: ELMo model config file path\n        weight_file: ELMo model weight file path\n        do_layer_norm: Should we apply layer normalization (passed to ``ScalarMix``)?\n            default is False\n        dropout: The number of dropout probability\n        trainable: Finetune or fixed\n        project_dim: The number of project (linear) dimension\n    \"\"\"\n\n    def __init__(\n        self,\n        vocab,\n        options_file=DEFAULT_OPTIONS_FILE,\n        weight_file=DEFAULT_WEIGHT_FILE,\n        do_layer_norm=False,\n        dropout=0.5,\n        trainable=False,\n        project_dim=None,\n    ):\n        super(ELMoEmbedding, self).__init__(vocab)\n        data_handler = DataHandler(cache_path=CachePath.PRETRAINED_VECTOR)\n        option_path = data_handler.read(options_file, return_path=True)\n        weight_path = data_handler.read(weight_file, return_path=True)\n\n        self.elmo = Elmo(option_path, weight_path, 1, requires_grad=trainable, dropout=dropout)\n\n        self.project_dim = project_dim\n        self.project_linear = None\n        if project_dim:\n            self.project_linear = nn.Linear(self.elmo.get_output_dim(), project_dim)\n\n    @overrides\n    def forward(self, chars):\n        elmo_output = self.elmo(chars)\n        elmo_representations = elmo_output[\"elmo_representations\"][0]\n\n        if self.project_linear:\n            elmo_representations = self.project_linear(elmo_representations)\n        return elmo_representations\n\n    @overrides\n    def get_output_dim(self):\n        if self.project_linear:\n            return self.project_dim\n        return self.elmo.get_output_dim()\n"
  },
  {
    "path": "claf/tokens/embedding/frequent_word_embedding.py",
    "content": "\nfrom overrides import overrides\nimport torch\nimport torch.nn as nn\n\nimport claf.modules.functional as f\n\nfrom .base import TokenEmbedding\nfrom .word_embedding import WordEmbedding\n\n\nclass FrequentTuningWordEmbedding(TokenEmbedding):\n    \"\"\"\n    Frequent Word Finetuning Embedding\n    Finetuning embedding matrix, according to 'threshold_index'\n\n    * Args:\n        vocab: Vocab (claf.tokens.vocab)\n\n    * Kwargs:\n        dropout: The number of dropout probability\n        embed_dim: The number of embedding dimension\n        padding_idx: If given, pads the output with the embedding vector at padding_idx\n            (initialized to zeros) whenever it encounters the index.\n        max_norm: If given, will renormalize the embedding vectors to have a norm lesser\n            than this before extracting. Note: this will modify weight in-place.\n        norm_type: The p of the p-norm to compute for the max_norm option. Default 2.\n        scale_grad_by_freq: if given, this will scale gradients by the inverse of\n            frequency of the words in the mini-batch. Default False.\n        sparse: if True, gradient w.r.t. weight will be a sparse tensor.\n            See Notes under torch.nn.Embedding for more details regarding sparse gradients.\n        pretrained_path: pretrained vector path (eg. GloVe)\n        trainable: finetune or fixed\n    \"\"\"\n\n    def __init__(\n        self,\n        vocab,\n        dropout=0.2,\n        embed_dim=100,\n        padding_idx=None,\n        max_norm=None,\n        norm_type=2,\n        scale_grad_by_freq=False,\n        sparse=False,\n        pretrained_path=None,\n    ):\n        super(FrequentTuningWordEmbedding, self).__init__(vocab)\n\n        self.threshold_index = vocab.threshold_index\n\n        self.embed_dim = embed_dim\n        self.fine_tune_word_embedding = WordEmbedding(\n            vocab,\n            dropout=0,\n            embed_dim=embed_dim,\n            padding_idx=padding_idx,\n            max_norm=max_norm,\n            norm_type=norm_type,\n            scale_grad_by_freq=scale_grad_by_freq,\n            sparse=sparse,\n            pretrained_path=pretrained_path,\n        )\n        self.fixed_word_embedding = WordEmbedding(\n            vocab,\n            dropout=0,\n            embed_dim=embed_dim,\n            padding_idx=padding_idx,\n            max_norm=max_norm,\n            norm_type=norm_type,\n            scale_grad_by_freq=scale_grad_by_freq,\n            sparse=sparse,\n            pretrained_path=pretrained_path,\n        )\n\n        if dropout > 0:\n            self.dropout = nn.Dropout(p=dropout)\n        else:\n            self.dropout = lambda x: x\n\n    @overrides\n    def forward(self, words, frequent_tuning=False):\n        if frequent_tuning and self.training:\n\n            padding_mask = words.eq(0).long()\n\n            # Fine-tuning - N the most frequent\n            fine_tune_mask = torch.lt(words, self.threshold_index) * padding_mask.eq(\n                0\n            )  # < threshold_index\n            fine_tune_words = words * fine_tune_mask.long()\n\n            fine_tune_embedded = self.fine_tune_word_embedding(fine_tune_words)\n            fine_tune_embedded = f.masked_zero(fine_tune_embedded, fine_tune_mask)\n\n            # Fixed - under N frequent\n            fixed_mask = torch.ge(words, self.threshold_index)  # >= threshold_index\n\n            fixed_embedeed = self.fixed_word_embedding(words).detach()  # Fixed\n            fixed_embedeed = f.masked_zero(fixed_embedeed, fixed_mask)\n\n            embedded_words = fine_tune_embedded + fixed_embedeed\n        else:\n            embedded_words = self.fixed_word_embedding(words)\n\n        return self.dropout(embedded_words)\n\n    @overrides\n    def get_output_dim(self):\n        return self.embed_dim\n"
  },
  {
    "path": "claf/tokens/embedding/sparse_feature.py",
    "content": "\nfrom overrides import overrides\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom claf.tokens.vocabulary import Vocab\n\nfrom .base import TokenEmbedding\nfrom .word_embedding import WordEmbedding\n\n\nclass SparseFeature(TokenEmbedding):\n    \"\"\"\n    Sparse Feature\n\n    1. Sparse to Embedding\n    2. One Hot Encoding\n\n    * Args:\n        vocab: Vocab (claf.tokens.vocab)\n        embed_type: The type of embedding [one_hot|embedding]\n        feature_count: The number of feature count\n\n    * Kwargs:\n        params: additional parameters for embedding module\n    \"\"\"\n\n    def __init__(self, vocab, embed_type, feature_count, params={}):\n        super(SparseFeature, self).__init__(vocab)\n\n        self.feature_count = feature_count\n\n        if embed_type == \"embedding\":\n            embed_module = SparseToEmbedding\n        else:\n            embed_module = OneHotEncoding\n\n        self.embed_modules = nn.ModuleList(\n            [embed_module(i, vocab.token_name, **params) for i in range(feature_count)]\n        )\n\n        indexs = torch.arange(feature_count).long()\n        indexs = indexs.view(feature_count, 1)\n        self.indexs = nn.Parameter(indexs, requires_grad=False)\n\n    @overrides\n    def forward(self, inputs):\n        embedded_inputs = []\n\n        for i in range(len(self.embed_modules)):\n            tensors = torch.index_select(inputs, -1, self.indexs[i]).squeeze(-1)\n            embedded = self.embed_modules[i](tensors)\n\n            embedded_inputs.append(embedded)\n        return torch.cat(embedded_inputs, dim=-1)\n\n    @overrides\n    def get_output_dim(self):\n        return sum(e.get_output_dim() for e in self.embed_modules)\n\n\nclass SparseToEmbedding(nn.Module):\n    \"\"\"\n    Sparse to Embedding\n\n    * Args:\n        token_name: token_name\n\n    * Kwargs:\n        dropout: The number of dropout probability\n        embed_dim: The number of embedding dimension\n        padding_idx: If given, pads the output with the embedding vector at padding_idx\n            (initialized to zeros) whenever it encounters the index.\n        max_norm: If given, will renormalize the embedding vectors to have a norm lesser\n            than this before extracting. Note: this will modify weight in-place.\n        norm_type: The p of the p-norm to compute for the max_norm option. Default 2.\n        scale_grad_by_freq: if given, this will scale gradients by the inverse of\n            frequency of the words in the mini-batch. Default False.\n        sparse: if True, gradient w.r.t. weight will be a sparse tensor.\n            See Notes under torch.nn.Embedding for more details regarding sparse gradients.\n        pretrained_path: pretrained vector path (eg. GloVe)\n        trainable: finetune or fixed\n    \"\"\"\n\n    def __init__(\n        self,\n        index,\n        token_name,\n        classes,\n        dropout=0,\n        embed_dim=15,\n        trainable=True,\n        padding_idx=None,\n        max_norm=None,\n        norm_type=2,\n        scale_grad_by_freq=False,\n        sparse=False,\n    ):\n        super(SparseToEmbedding, self).__init__()\n\n        self.embed_dim = embed_dim\n\n        vocab = Vocab(token_name)\n        vocab.init()\n        for c in classes[index]:\n            vocab.add(c)\n\n        embedding_params = {\n            \"vocab\": vocab,\n            \"dropout\": dropout,\n            \"embed_dim\": embed_dim,\n            \"trainable\": trainable,\n            \"padding_idx\": padding_idx,\n            \"max_norm\": max_norm,\n            \"norm_type\": norm_type,\n            \"scale_grad_by_freq\": scale_grad_by_freq,\n            \"sparse\": sparse,\n        }\n\n        self.embedding = WordEmbedding(**embedding_params)\n\n    @overrides\n    def forward(self, inputs):\n        return self.embedding(inputs)\n\n    def get_output_dim(self):\n        return self.embed_dim\n\n\nclass OneHotEncoding(nn.Module):\n    \"\"\"\n    Sparse to one-hot encoding\n\n    * Args:\n        vocab: Vocab (claf.tokens.vocab)\n\n    \"\"\"\n\n    def __init__(self, index, token_name, classes):\n        super(OneHotEncoding, self).__init__()\n\n        vocab = Vocab(token_name)\n        vocab.init()\n        for c in classes[index]:\n            vocab.add(c)\n\n        num_class = len(vocab)\n        self.num_class = num_class\n\n        one_hot_encoding = torch.eye(num_class)\n        self.one_hots = nn.Parameter(one_hot_encoding, requires_grad=False)\n\n    @overrides\n    def forward(self, inputs):\n        if self.num_class == 4:\n            inputs = inputs - 2  # make 0, 1 binary_feature\n            return inputs.float().unsqueeze(-1)\n\n        return F.embedding(inputs, self.one_hots)\n\n    def get_output_dim(self):\n        if self.num_class == 4:  # binary_feature\n            return 1  # 0 or 1\n\n        return self.num_class\n"
  },
  {
    "path": "claf/tokens/embedding/word_embedding.py",
    "content": "\nimport logging\nfrom overrides import overrides\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom claf.data.data_handler import CachePath, DataHandler\n\nfrom .base import TokenEmbedding\n\nlogger = logging.getLogger(__name__)\n\n\nclass WordEmbedding(TokenEmbedding):\n    \"\"\"\n    Word Embedding\n    Default Token Embedding\n\n    * Args:\n        vocab: Vocab (claf.tokens.vocab)\n\n    * Kwargs:\n        dropout: The number of dropout probability\n        embed_dim: The number of embedding dimension\n        padding_idx: If given, pads the output with the embedding vector at padding_idx\n            (initialized to zeros) whenever it encounters the index.\n        max_norm: If given, will renormalize the embedding vectors to have a norm lesser\n            than this before extracting. Note: this will modify weight in-place.\n        norm_type: The p of the p-norm to compute for the max_norm option. Default 2.\n        scale_grad_by_freq: if given, this will scale gradients by the inverse of\n            frequency of the words in the mini-batch. Default False.\n        sparse: if True, gradient w.r.t. weight will be a sparse tensor.\n            See Notes under torch.nn.Embedding for more details regarding sparse gradients.\n        pretrained_path: pretrained vector path (eg. GloVe)\n        trainable: finetune or fixed\n    \"\"\"\n\n    def __init__(\n        self,\n        vocab,\n        dropout=0.2,\n        embed_dim=100,\n        padding_idx=None,\n        max_norm=None,\n        norm_type=2,\n        scale_grad_by_freq=False,\n        sparse=False,\n        pretrained_path=None,\n        trainable=True,\n    ):\n        super(WordEmbedding, self).__init__(vocab)\n        self.data_handler = DataHandler(cache_path=CachePath.PRETRAINED_VECTOR)\n\n        self.embed_dim = embed_dim\n        if dropout and dropout > 0:\n            self.dropout = nn.Dropout(p=dropout)\n        else:\n            self.dropout = lambda x: x\n\n        if pretrained_path:\n            weight = self._read_pretrained_file(pretrained_path)\n            self.weight = torch.nn.Parameter(weight, requires_grad=trainable)\n        else:\n            self.weight = self._init_weight(trainable=trainable)\n\n        # nn.functional.embedding = optional paramters\n        #  (padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse)\n        # check - https://pytorch.org/docs/master/nn.html#torch.nn.functional.embeddin\\\n        #    ://pytorch.org/docs/master/nn.html#torch.nn.functional.embedding\n        self.padding_idx = padding_idx\n        self.max_norm = max_norm\n        self.norm_type = norm_type\n        self.scale_grad_by_freq = scale_grad_by_freq\n        self.sparse = sparse\n\n    def _init_weight(self, trainable=True):\n        weight = torch.FloatTensor(self.get_vocab_size(), self.embed_dim)\n        weight = torch.nn.Parameter(weight, requires_grad=trainable)\n        torch.nn.init.xavier_uniform_(weight)\n        return weight\n\n    @overrides\n    def forward(self, words):\n        input_size = words.size()\n        if len(input_size) > 2:\n            words = words.view(-1, input_size[-1])\n\n        embedded_words = F.embedding(\n            words,\n            self.weight,\n            padding_idx=self.padding_idx,\n            max_norm=self.max_norm,\n            norm_type=self.norm_type,\n            scale_grad_by_freq=self.scale_grad_by_freq,\n            sparse=self.sparse,\n        )\n\n        if len(input_size) > 2:\n            embedded_size = list(input_size) + [embedded_words.size(-1)]\n            embedded_words = embedded_words.view(*embedded_size)\n        return self.dropout(embedded_words)\n\n    def _read_pretrained_file(self, file_path):\n        words_to_keep = set(self.vocab.get_all_tokens())\n        vocab_size = self.get_vocab_size()\n        embeddings = {}\n\n        # First we read the embeddings from the file, only keeping vectors for the words we need.\n        logger.info(\"Reading embeddings from file\")\n        file_path = self.data_handler.read(file_path, return_path=True)\n        with open(file_path, \"rb\") as embeddings_file:\n            for line in embeddings_file:\n                fields = line.decode(\"utf-8\").rstrip().split(\" \")\n\n                if len(fields) - 1 != self.embed_dim:\n                    logger.info(\n                        f\"Found line with wrong number of dimensions (expected {self.embed_dim}, was {len(fields)}): {line}\"\n                    )\n                    continue\n\n                word = fields[0]\n                if word in words_to_keep:\n                    vector = np.asarray(fields[1:], dtype=\"float32\")\n                    embeddings[word] = vector\n\n        if not embeddings:\n            raise ValueError(\n                \"No embeddings of correct dimension found. check input dimension value\"\n            )\n\n        all_embeddings = np.asarray(list(embeddings.values()))\n        embeddings_mean = float(np.mean(all_embeddings))\n        embeddings_std = float(np.std(all_embeddings))\n        # Now we initialize the weight matrix for an embedding layer, starting with random vectors,\n        # then filling in the word vectors we just read.\n        logger.info(\"Initializing pre-trained embedding layer\")\n        embedding_matrix = torch.FloatTensor(vocab_size, self.embed_dim).normal_(\n            embeddings_mean, embeddings_std\n        )\n\n        match_count = 0\n        for i in range(0, vocab_size):\n            word = self.vocab.get_token(i)\n            if word in embeddings:\n                embedding_matrix[i] = torch.FloatTensor(embeddings[word])\n                match_count += 1\n            else:\n                # f\"Word {word} was not found in the embedding file. Initialising randomly.\"\n                pass\n        logger.info(f\"Match embedding vocab size: {match_count}.  [{match_count}/{vocab_size}]\")\n        return embedding_matrix\n\n    @overrides\n    def get_output_dim(self):\n        return self.embed_dim\n"
  },
  {
    "path": "claf/tokens/hangul.py",
    "content": "#!/usr/bin/env python\n# encoding: utf-8\n\n\"\"\"\nHangulpy.py\nCopyright (C) 2012 Ryan Rho, Hyunwoo Cho\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\"\"\"\n\nimport string\nimport re\n\n################################################################################\n# Hangul Unicode Variables\n################################################################################\n\n# Code = 0xAC00 + (Chosung_index * NUM_JOONGSUNGS * NUM_JONGSUNGS) + (Joongsung_index * NUM_JONGSUNGS) + (Jongsung_index)\nCHOSUNGS = [\n    \"ㄱ\",\n    \"ㄲ\",\n    \"ㄴ\",\n    \"ㄷ\",\n    \"ㄸ\",\n    \"ㄹ\",\n    \"ㅁ\",\n    \"ㅂ\",\n    \"ㅃ\",\n    \"ㅅ\",\n    \"ㅆ\",\n    \"ㅇ\",\n    \"ㅈ\",\n    \"ㅉ\",\n    \"ㅊ\",\n    \"ㅋ\",\n    \"ㅌ\",\n    \"ㅍ\",\n    \"ㅎ\",\n]\nJOONGSUNGS = [\n    \"ㅏ\",\n    \"ㅐ\",\n    \"ㅑ\",\n    \"ㅒ\",\n    \"ㅓ\",\n    \"ㅔ\",\n    \"ㅕ\",\n    \"ㅖ\",\n    \"ㅗ\",\n    \"ㅘ\",\n    \"ㅙ\",\n    \"ㅚ\",\n    \"ㅛ\",\n    \"ㅜ\",\n    \"ㅝ\",\n    \"ㅞ\",\n    \"ㅟ\",\n    \"ㅠ\",\n    \"ㅡ\",\n    \"ㅢ\",\n    \"ㅣ\",\n]\nJONGSUNGS = [\n    \"\",\n    \"ㄱ\",\n    \"ㄲ\",\n    \"ㄳ\",\n    \"ㄴ\",\n    \"ㄵ\",\n    \"ㄶ\",\n    \"ㄷ\",\n    \"ㄹ\",\n    \"ㄺ\",\n    \"ㄻ\",\n    \"ㄼ\",\n    \"ㄽ\",\n    \"ㄾ\",\n    \"ㄿ\",\n    \"ㅀ\",\n    \"ㅁ\",\n    \"ㅂ\",\n    \"ㅄ\",\n    \"ㅅ\",\n    \"ㅆ\",\n    \"ㅇ\",\n    \"ㅈ\",\n    \"ㅊ\",\n    \"ㅋ\",\n    \"ㅌ\",\n    \"ㅍ\",\n    \"ㅎ\",\n]\n\nNUM_CHOSUNGS = 19\nNUM_JOONGSUNGS = 21\nNUM_JONGSUNGS = 28\n\nFIRST_HANGUL_UNICODE = 0xAC00  # '가'\nLAST_HANGUL_UNICODE = 0xD7A3  # '힣'\n\n################################################################################\n# Boolean Hangul functions\n################################################################################\n\n\ndef is_hangul(phrase):  # pragma: no cover\n    \"\"\"Check whether the phrase is Hangul.\n    This method ignores white spaces, punctuations, and numbers.\n    @param phrase a target string\n    @return True if the phrase is Hangul. False otherwise.\"\"\"\n\n    # If the input is only one character, test whether the character is Hangul.\n    if len(phrase) == 1:\n        return is_all_hangul(phrase)\n\n    # Remove all white spaces, punctuations, numbers.\n    exclude = set(string.whitespace + string.punctuation + \"0123456789\")\n    phrase = \"\".join(ch for ch in phrase if ch not in exclude)\n\n    return is_all_hangul(phrase)\n\n\ndef is_all_hangul(phrase):  # pragma: no cover\n    \"\"\"Check whether the phrase contains all Hangul letters\n    @param phrase a target string\n    @return True if the phrase only consists of Hangul. False otherwise.\"\"\"\n\n    for unicode_value in map(lambda letter: ord(letter), phrase):\n        if unicode_value < FIRST_HANGUL_UNICODE or unicode_value > LAST_HANGUL_UNICODE:\n            # Check whether the letter is chosungs, joongsungs, or jongsungs.\n            if unicode_value not in map(lambda v: ord(v), CHOSUNGS + JOONGSUNGS + JONGSUNGS[1:]):\n                return False\n    return True\n\n\ndef has_jongsung(letter):  # pragma: no cover\n    \"\"\"Check whether this letter contains Jongsung\"\"\"\n    if len(letter) != 1:\n        raise Exception(\"The target string must be one letter.\")\n    if not is_hangul(letter):\n        raise NotHangulException(\"The target string must be Hangul\")\n\n    unicode_value = ord(letter)\n    return (unicode_value - FIRST_HANGUL_UNICODE) % NUM_JONGSUNGS > 0\n\n\ndef has_batchim(letter):  # pragma: no cover\n    \"\"\"This method is the same as has_jongsung()\"\"\"\n    return has_jongsung(letter)\n\n\ndef has_approximant(letter):  # pragma: no cover\n    \"\"\"Approximant makes complex vowels, such as ones starting with y or w.\n    In Korean there is a unique approximant euㅡ making uiㅢ, but ㅢ does not make many irregularities.\"\"\"\n    if len(letter) != 1:\n        raise Exception(\"The target string must be one letter.\")\n    if not is_hangul(letter):\n        raise NotHangulException(\"The target string must be Hangul\")\n\n    jaso = decompose(letter)\n    diphthong = (2, 3, 6, 7, 9, 10, 12, 14, 15, 17)\n    # [u'ㅑ',u'ㅒ',',u'ㅕ',u'ㅖ',u'ㅘ',u'ㅙ',u'ㅛ',u'ㅝ',u'ㅞ',u'ㅠ']\n    # excluded 'ㅢ' because y- and w-based complex vowels are irregular.\n    # vowels with umlauts (ㅐ, ㅔ, ㅚ, ㅟ) are not considered complex vowels.\n    return jaso[1] in diphthong\n\n\n################################################################################\n# Decomposition & Combination\n################################################################################\n\n\ndef compose(chosung, joongsung, jongsung=\"\"):  # pragma: no cover\n    \"\"\"This function returns a Hangul letter by composing the specified chosung, joongsung, and jongsung.\n    @param chosung\n    @param joongsung\n    @param jongsung the terminal Hangul letter. This is optional if you do not need a jongsung.\"\"\"\n\n    if jongsung is None:\n        jongsung = \"\"\n\n    try:\n        chosung_index = CHOSUNGS.index(chosung)\n        joongsung_index = JOONGSUNGS.index(joongsung)\n        jongsung_index = JONGSUNGS.index(jongsung)\n    except Exception as e:\n        raise NotHangulException(\n            \"No valid Hangul character can be generated using given combination of chosung, joongsung, and jongsung.\"\n        )\n\n    return chr(\n        0xAC00\n        + chosung_index * NUM_JOONGSUNGS * NUM_JONGSUNGS\n        + joongsung_index * NUM_JONGSUNGS\n        + jongsung_index\n    )\n\n\ndef decompose(hangul_letter):  # pragma: no cover\n    \"\"\"This function returns letters by decomposing the specified Hangul letter.\"\"\"\n\n    if len(hangul_letter) < 1:\n        raise NotLetterException(\"\")\n    elif not is_hangul(hangul_letter):\n        raise NotHangulException(\"\")\n\n    code = ord(hangul_letter) - FIRST_HANGUL_UNICODE\n    jongsung_index = int(code % NUM_JONGSUNGS)\n    code /= NUM_JONGSUNGS\n    joongsung_index = int(code % NUM_JOONGSUNGS)\n    code /= NUM_JOONGSUNGS\n    chosung_index = int(code)\n\n    return (CHOSUNGS[chosung_index], JOONGSUNGS[joongsung_index], JONGSUNGS[jongsung_index])\n\n\n################################################################################\n# Josa functions\n################################################################################\n\n\ndef josa_en(word):  # pragma: no cover\n    \"\"\"add josa either '은' or '는' at the end of this word\"\"\"\n    word = word.strip()\n    if not is_hangul(word):\n        raise NotHangulException(\"\")\n\n    last_letter = word[-1]\n    josa = \"은\" if has_jongsung(last_letter) else \"는\"\n    return word + josa\n\n\ndef josa_eg(word):  # pragma: no cover\n    \"\"\"add josa either '이' or '가' at the end of this word\"\"\"\n    word = word.strip()\n    if not is_hangul(word):\n        raise NotHangulException(\"\")\n\n    last_letter = word[-1]\n    josa = \"이\" if has_jongsung(last_letter) else \"가\"\n    return word + josa\n\n\ndef josa_el(word):  # pragma: no cover\n    \"\"\"add josa either '을' or '를' at the end of this word\"\"\"\n    word = word.strip()\n    if not is_hangul(word):\n        raise NotHangulException(\"\")\n\n    last_letter = word[-1]\n    josa = \"을\" if has_jongsung(last_letter) else \"를\"\n    return word + josa\n\n\ndef josa_ro(word):  # pragma: no cover\n    \"\"\"add josa either '으로' or '로' at the end of this word\"\"\"\n    word = word.strip()\n    if not is_hangul(word):\n        raise NotHangulException(\"\")\n\n    last_letter = word[-1]\n    if not has_jongsung(last_letter):\n        josa = \"로\"\n    elif (ord(last_letter) - FIRST_HANGUL_UNICODE) % NUM_JONGSUNGS == 9:  # ㄹ\n        josa = \"로\"\n    else:\n        josa = \"으로\"\n\n    return word + josa\n\n\ndef josa_gwa(word):  # pragma: no cover\n    \"\"\"add josa either '과' or '와' at the end of this word\"\"\"\n    word = word.strip()\n    if not is_hangul(word):\n        raise NotHangulException(\"\")\n\n    last_letter = word[-1]\n    josa = \"과\" if has_jongsung(last_letter) else \"와\"\n    return word + josa\n\n\ndef josa_ida(word):  # pragma: no cover\n    \"\"\"add josa either '이다' or '다' at the end of this word\"\"\"\n    word = word.strip()\n    if not is_hangul(word):\n        raise NotHangulException(\"\")\n\n    last_letter = word[-1]\n    josa = \"이다\" if has_jongsung(last_letter) else \"다\"\n    return word + josa\n\n\n################################################################################\n# Prefixes and suffixes\n# Practice area; need more organization\n################################################################################\n\n\ndef add_ryul(word):  # pragma: no cover\n    \"\"\"add suffix either '률' or '율' at the end of this word\"\"\"\n    word = word.strip()\n    if not is_hangul(word):\n        raise NotHangulException(\"\")\n\n    last_letter = word[-1]\n    if not has_jongsung(last_letter):\n        ryul = \"율\"\n    elif (ord(last_letter) - FIRST_HANGUL_UNICODE) % NUM_JONGSUNGS == 4:  # ㄴ\n        ryul = \"율\"\n    else:\n        ryul = \"률\"\n\n    return word + ryul\n\n\n################################################################################\n# The formatter, or ultimately, a template system\n# Practice area; need more organization\n################################################################################\n\n\ndef ili(word):  # pragma: no cover\n    \"\"\"convert {가} or {이} to their correct respective particles automagically.\"\"\"\n    word = word.strip()\n    if not is_hangul(word):\n        raise NotHangulException(\"\")\n\n    last_letter = word[word.find(\"{가}\") - 1]\n    word = word.replace(\"{가}\", (\"이\" if has_jongsung(last_letter) else \"가\"))\n\n    last_letter = word[word.find(\"{이}\") - 1]\n    word = word.replace(\"{이}\", (\"이\" if has_jongsung(last_letter) else \"가\"))\n    return word\n\n\n################################################################################\n# Exceptions\n################################################################################\n\n\nclass NotHangulException(Exception):  # pragma: no cover\n    pass\n\n\nclass NotLetterException(Exception):  # pragma: no cover\n    pass\n\n\nclass NotWordException(Exception):  # pragma: no cover\n    pass\n"
  },
  {
    "path": "claf/tokens/indexer/__init__.py",
    "content": "\nfrom .bert_indexer import BertIndexer\nfrom .char_indexer import CharIndexer\nfrom .elmo_indexer import ELMoIndexer\nfrom .exact_match_indexer import ExactMatchIndexer\nfrom .linguistic_indexer import LinguisticIndexer\nfrom .word_indexer import WordIndexer\n\n\n__all__ = [\n    \"BertIndexer\",\n    \"CharIndexer\",\n    \"ELMoIndexer\",\n    \"ExactMatchIndexer\",\n    \"LinguisticIndexer\",\n    \"WordIndexer\",\n]\n"
  },
  {
    "path": "claf/tokens/indexer/base.py",
    "content": "class TokenIndexer:\n    \"\"\"\n    Token Indexer\n\n    indexing tokens (eg. 'hi' -> 4)\n    \"\"\"\n\n    def __init__(self, tokenizer):\n        self.param_key = None\n        self.tokenizer = tokenizer\n\n    def index(self, token):\n        \"\"\" indexing function \"\"\"\n        raise NotImplementedError\n\n    def set_vocab(self, vocab):\n        self.vocab = vocab\n"
  },
  {
    "path": "claf/tokens/indexer/bert_indexer.py",
    "content": "\nfrom overrides import overrides\n\nfrom .base import TokenIndexer\n\n\nclass BertIndexer(TokenIndexer):\n    \"\"\"\n    Bert Token Indexer\n\n    * Property\n        vocab: Vocab (claf.tokens.vocabulary)\n\n    * Args:\n        tokenizer: SubwordTokenizer\n\n    * Kwargs:\n        lowercase: word token to lowercase\n        insert_start: insert start_token to first\n        insert_end: append end_token\n    \"\"\"\n\n    def __init__(self, tokenizer, do_tokenize=True):\n        super(BertIndexer, self).__init__(tokenizer)\n        self.do_tokenize = do_tokenize\n\n    @overrides\n    def index(self, text):\n        input_type = type(text)\n        if input_type == str:\n            return self._index_text(text)\n        elif input_type == list:\n            texts = text  # List of text case\n            return [self._index_text(text) for text in texts]\n        else:\n            raise ValueError(f\"Not supported type: {type(text)}\")\n\n    def _index_text(self, text):\n        if self.do_tokenize:\n            tokens = self.tokenizer.tokenize(text)\n        else:\n            tokens = [text]\n\n        indexed_tokens = [self.vocab.get_index(token) for token in tokens]\n\n        # Insert CLS_TOKEN ans SEP_TOKEN\n        insert_start = self.vocab.get_index(self.vocab.cls_token)\n        indexed_tokens.insert(0, insert_start)\n\n        insert_end = self.vocab.get_index(self.vocab.sep_token)\n        indexed_tokens.append(insert_end)\n        return indexed_tokens\n"
  },
  {
    "path": "claf/tokens/indexer/char_indexer.py",
    "content": "\nfrom overrides import overrides\n\nfrom .base import TokenIndexer\n\n\nclass CharIndexer(TokenIndexer):\n    \"\"\"\n    Character Token Indexer\n\n    * Property\n        vocab: Vocab (claf.tokens.vocabulary)\n\n    * Args:\n        tokenizer: CharTokenizer\n\n    * Kwargs:\n        insert_char_start: insert start index (eg. ['h', 'i'] -> ['<s>', 'h', 'i'] )\n            default is None\n        insert_char_end: insert end index (eg. ['h', 'i'] -> ['h', 'i', '</s>'] )\n            default is None\n    \"\"\"\n\n    def __init__(self, tokenizer, insert_char_start=None, insert_char_end=None):\n        super(CharIndexer, self).__init__(tokenizer)\n\n        self.insert_char_start = insert_char_start\n        self.insert_char_end = insert_char_end\n\n    @overrides\n    def index(self, text):\n        indexed_tokens = [self.index_token(token) for token in self.tokenizer.tokenize(text)]\n        return indexed_tokens\n\n    def index_token(self, chars):\n        char_ids = [self.vocab.get_index(char) for char in chars]\n\n        if self.insert_char_start is not None:\n            char_ids.insert(0, self.vocab.get_index(self.vocab.start_token))\n        if self.insert_char_end is not None:\n            char_ids.append(self.vocab.get_index(self.vocab.end_token))\n        return char_ids\n"
  },
  {
    "path": "claf/tokens/indexer/elmo_indexer.py",
    "content": "\"\"\"\nThis code is from allenai/allennlp\n(https://github.com/allenai/allennlp/blob/master/allennlp/data/token_indexers/elmo_indexer.py)\n\"\"\"\n\nfrom overrides import overrides\n\nfrom .base import TokenIndexer\n\n\ndef _make_bos_eos(\n    character: int,\n    padding_character: int,\n    beginning_of_word_character: int,\n    end_of_word_character: int,\n    max_word_length: int,\n):\n    char_ids = [padding_character] * max_word_length\n    char_ids[0] = beginning_of_word_character\n    char_ids[1] = character\n    char_ids[2] = end_of_word_character\n    return char_ids\n\n\nclass ELMoIndexer(TokenIndexer):\n    \"\"\"\n    Maps individual tokens to sequences of character ids, compatible with ELMo.\n    To be consistent with previously trained models, we include it here as special of existing\n    character indexers.\n    \"\"\"\n\n    max_word_length = 50\n\n    # char ids 0-255 come from utf-8 encoding bytes\n    # assign 256-300 to special chars\n    beginning_of_sentence_character = 256  # <begin sentence>\n    end_of_sentence_character = 257  # <end sentence>\n    beginning_of_word_character = 258  # <begin word>\n    end_of_word_character = 259  # <end word>\n    padding_character = 260  # <padding><Paste>\n\n    beginning_of_sentence_characters = _make_bos_eos(\n        beginning_of_sentence_character,\n        padding_character,\n        beginning_of_word_character,\n        end_of_word_character,\n        max_word_length,\n    )\n\n    end_of_sentence_characters = _make_bos_eos(\n        end_of_sentence_character,\n        padding_character,\n        beginning_of_word_character,\n        end_of_word_character,\n        max_word_length,\n    )\n\n    BOS_TOKEN = \"<S>\"\n    EOS_TOKEN = \"</S>\"\n\n    def __init__(self, tokenizer):\n        super(ELMoIndexer, self).__init__(tokenizer)\n\n    @overrides\n    def index(self, text):\n        indexed_tokens = [self.index_token(token) for token in self.tokenizer.tokenize(text)]\n        return indexed_tokens\n\n    def index_token(self, word):\n        if word == self.BOS_TOKEN:\n            char_ids = self.beginning_of_sentence_characters\n        elif word == self.EOS_TOKEN:\n            char_ids = self.end_of_sentence_characters\n        else:\n            word_encodeds = word.encode(\"utf-8\", \"ignore\")[: (self.max_word_length - 2)]\n            char_ids = [char_id for char_id in word_encodeds]\n            char_ids = [self.beginning_of_word_character] + char_ids + [self.end_of_word_character]\n        return [c + 1 for c in char_ids]\n"
  },
  {
    "path": "claf/tokens/indexer/exact_match_indexer.py",
    "content": "\n\nfrom overrides import overrides\nfrom nltk.stem import WordNetLemmatizer\n\nfrom .base import TokenIndexer\n\n\nclass ExactMatchIndexer(TokenIndexer):\n    \"\"\"\n    Exact Match Token Indexer\n\n    * Property\n        vocab: Vocab (claf.tokens.vocabulary)\n\n    * Args:\n        tokenizer: WordTokenizer\n\n    * Kwargs:\n        lower: add lower feature. default is True (0 or 1)\n        lemma: add lemma case feature. feature is True (0 or 1)\n    \"\"\"\n\n    def __init__(self, tokenizer, lower=True, lemma=True):\n        super(ExactMatchIndexer, self).__init__(tokenizer)\n\n        self.param_key = \"question\"\n        self.lemmatizer = WordNetLemmatizer()\n\n        self.lower = lower\n        self.lemma = lemma\n\n    @overrides\n    def index(self, text, query_text):\n        tokenized_query_text = self.tokenizer.tokenize(query_text)\n        query_tokens = {\n            \"origin\": set(tokenized_query_text),\n            \"lower\": set([token.lower() for token in tokenized_query_text]),\n            \"lemma\": set(\n                [self.lemmatizer.lemmatize(token.lower()) for token in tokenized_query_text]\n            ),\n        }\n\n        indexed_tokens = [\n            self.index_token(token, query_tokens) for token in self.tokenizer.tokenize(text)\n        ]\n        return indexed_tokens\n\n    def index_token(self, token, query_tokens):\n        em_feature = []\n\n        # 1. origin\n        origin_case = 1 if token in query_tokens[\"origin\"] else 0\n        em_feature.append(origin_case + 2)\n\n        # 2. lower\n        if self.lower:\n            lower_case = 1 if token.lower() in query_tokens[\"lower\"] else 0\n            em_feature.append(lower_case + 2)\n\n        # 3. lemma\n        if self.lemma:\n            lemma_case = (\n                1 if self.lemmatizer.lemmatize(token.lower()) in query_tokens[\"lemma\"] else 0\n            )\n            em_feature.append(lemma_case + 2)\n        return em_feature\n"
  },
  {
    "path": "claf/tokens/indexer/linguistic_indexer.py",
    "content": "\nfrom overrides import overrides\nimport spacy\n\nfrom claf.tokens.linguistic import POSTag, NER\n\nfrom .base import TokenIndexer\n\n\nclass LinguisticIndexer(TokenIndexer):\n    \"\"\"\n    Linguistic Token Indexer\n\n    * Property\n        vocab: Vocab (claf.tokens.vocabulary)\n\n    * Args:\n        tokenizer: WordTokenizer\n\n    * Kwargs:\n        pos_tag: POS Tagging\n        ner: Named Entity Recognition\n        dep: Dependency Parser\n    \"\"\"\n\n    def __init__(self, tokenizer, pos_tag=None, ner=None, dep=None):\n        super(LinguisticIndexer, self).__init__(tokenizer)\n\n        self.spacy_model = None\n\n        # Features\n        self.use_pos_tag = pos_tag\n        self.pos_to_index = {t: i for i, t in enumerate(POSTag.classes)}\n\n        self.use_ner = ner\n        self.ner_to_index = {t: i for i, t in enumerate(NER.classes)}\n\n        self.use_dep = dep\n        if dep:\n            raise NotImplementedError(\"Dependency Parser feature\")\n\n    @overrides\n    def index(self, text):\n        package = self.tokenizer.name\n        return getattr(self, f\"_{package}\")(text)\n\n    \"\"\" Need to match with Tokenizer's package \"\"\"\n\n    def _mecab_ko(self, text):\n        raise NotImplementedError(\"Linguistic Feature with mecab package\")\n\n    def _nltk_en(self, text):\n        raise NotImplementedError(\"Linguistic Feature with nltk package\")\n\n    def _spacy_en(self, text):\n        if self.spacy_model is None:\n            from claf.tokens.tokenizer.utils import load_spacy_model_for_tokenizer\n\n            disables = [\"vectors\", \"textcat\", \"parser\"]\n            if not self.use_pos_tag:\n                disables.apppend(\"tagger\")\n            if not self.use_ner:\n                disables.apppend(\"ner\")\n\n            self.spacy_model = spacy.load(\"en_core_web_sm\", disable=disables)\n            self.spacy_model.tokenizer = load_spacy_model_for_tokenizer(\n                self.tokenizer.extra_split_chars_re\n            )\n\n        sent_tokenizer = self.tokenizer.sent_tokenizer\n        sentences = sent_tokenizer.tokenize(text)\n\n        ner_entities = {}\n        docs = []\n        for sentence in sentences:\n            doc = self.spacy_model(sentence)\n            docs.append(doc)\n\n            if self.use_ner:\n                for e in doc.ents:\n                    ner_entities[e.text] = e.label_\n\n        linguistic_features = []\n        for doc in docs:\n            for token in doc:\n                if token.is_space:\n                    continue\n\n                feature = []\n                if self.use_pos_tag:\n                    feature.append(self.pos_to_index[token.pos_])\n                if self.use_ner:\n                    feature.append(self.ner_to_index[ner_entities.get(token.text, \"NONE\")])\n\n                linguistic_features.append(feature)\n        return linguistic_features\n"
  },
  {
    "path": "claf/tokens/indexer/word_indexer.py",
    "content": "\nfrom overrides import overrides\n\nfrom .base import TokenIndexer\n\n\nclass WordIndexer(TokenIndexer):\n    \"\"\"\n    Word Token Indexer\n\n    * Property\n        vocab: Vocab (claf.tokens.vocabulary)\n\n    * Args:\n        tokenizer: WordTokenizer\n\n    * Kwargs:\n        lowercase: word token to lowercase\n        insert_start: insert start_token to first\n        insert_end: append end_token\n    \"\"\"\n\n    def __init__(\n        self, tokenizer, do_tokenize=True, lowercase=False, insert_start=None, insert_end=None\n    ):\n        super(WordIndexer, self).__init__(tokenizer)\n\n        self.do_tokenize = do_tokenize\n        self.lowercase = lowercase\n\n        self.insert_start = insert_start\n        self.insert_end = insert_end\n\n    @overrides\n    def index(self, text):\n        input_type = type(text)\n        if input_type == str:\n            indexed_tokens = self._index_text(text)\n        elif input_type == list:\n            indexed_tokens = self._index_list_of_text(text)\n        else:\n            raise ValueError(f\"Not supported type: {type(text)}\")\n\n        if self.insert_start is not None:\n            insert_start = self.vocab.get_index(self.vocab.start_token)\n            indexed_tokens.insert(0, insert_start)\n        if self.insert_end is not None:\n            insert_end = self.vocab.get_index(self.vocab.end_token)\n            indexed_tokens.append(insert_end)\n        return indexed_tokens\n\n    def _index_text(self, text):\n        if not self.do_tokenize:\n            raise ValueError(\"input text type is 'str'. 'do_tokenize' is required.\")\n\n        return [self._index_token(token) for token in self.tokenizer.tokenize(text)]\n\n    def _index_list_of_text(self, list_of_text):\n        if self.do_tokenize:\n            indexed_tokens = [\n                [self._index_token(token) for token in self.tokenizer.tokenize(text)]\n                for text in list_of_text\n            ]\n        else:\n            indexed_tokens = [self._index_token(text) for text in list_of_text]\n        return indexed_tokens\n\n    def _index_token(self, token):\n        if self.lowercase:\n            token = token.lower()\n\n        return self.vocab.get_index(token)\n"
  },
  {
    "path": "claf/tokens/linguistic.py",
    "content": "class POSTag:\n    \"\"\"\n        Universal POS tags expends by spacy\n        (https://spacy.io/api/annotation#section-pos-tagging)\n    \"\"\"\n\n    classes = [\n        \"ADJ\",  # adjectives\n        \"ADP\",  # adpositions (prepositions and postpositions)\n        \"ADV\",  # adverbs\n        \"AUX\",  # auxiliary (spacy)\n        \"CONJ\",  # conjunctions\n        \"CCONJ\",  # coordinating conjunction (spacy)\n        \"DET\",  # determiners\n        \"INTJ\",  # interjection (spacy)\n        \"NOUN\",  # nouns (common and proper)\n        \"NUM\",  # cardinal numbers\n        \"PART\",  # particles or other function words  (spacy)\n        \"PRON\",  # pronouns\n        \"PROPN\",  # proper noun\n        \"PUNCT\",  # punctuation\n        \"SCONJ\",  # subordinating conjunction\n        \"SYM\",  # symbol\n        \"VERB\",  # verbs (all tenses and modes)\n        \"X\",  # other: foreign words, typos, abbreviations\n        \"SPACE\",  # space\n    ]\n\n\nclass NER:\n    \"\"\"\n        Named Entity Recognition\n\n        Models trained on the OntoNotes 5 corpus support\n        the following entity types:\n        (https://spacy.io/api/annotation#section-dependency-parsing)\n    \"\"\"\n\n    classes = [\n        \"NONE\",  # None\n        \"PERSON\",  # People, including fictional.\n        \"NORP\",  # Nationalities or religious or political groups.\n        \"FAC\",  # Buildings, airports, highways, bridges, etc.\n        \"ORG\",  # Companies, agencies, institutions, etc.\n        \"GPE\",  # Countries, cities, states.\n        \"LOC\",  # Non-GPE locations, mountain ranges, bodies of water.\n        \"PRODUCT\",  # Objects, vehicles, foods, etc. (Not services.)\n        \"EVENT\",  # Named hurricanes, battles, wars, sports events, etc.\n        \"WORK_OF_ART\",  # Titles of books, songs, etc.\n        \"LAW\",  # Named documents made into laws.\n        \"LANGUAGE\",  # Any named language.\n        \"DATE\",  # Absolute or relative dates or periods.\n        \"TIME\",  # Times smaller than a day.\n        \"PERCENT\",  # Percentage, including \"%\".\n        \"MONEY\",  # Monetary values, including unit.\n        \"QUANTITY\",  # Measurements, as of weight or distance.\n        \"ORDINAL\",  # \"first\", \"second\", etc.\n        \"CARDINAL\",  # Numerals that do not fall under another type.\n    ]\n"
  },
  {
    "path": "claf/tokens/text_handler.py",
    "content": "\nfrom collections import Counter\nimport logging\nimport time\n\nfrom tqdm import tqdm\n\nfrom claf.data.data_handler import CachePath, DataHandler\nfrom claf.data.utils import padding_tokens, transpose\nfrom claf.tokens.token_maker import TokenMaker\nfrom claf.tokens.vocabulary import Vocab\nfrom claf import utils as common_utils\n\nlogger = logging.getLogger(__name__)\n\n\nclass TextHandler:\n    \"\"\"\n    Text Handler\n\n    - voacb and token_counter\n    - raw_features -> indexed_features\n    - raw_features -> tensor\n\n    * Args:\n        token_makers: Dictionary consisting of\n            - key: token_name\n            - value: TokenMaker (claf.tokens.token_maker)\n\n    * Kwargs:\n        lazy_indexing: Apply `Lazy Evaluation` to text indexing\n    \"\"\"\n\n    def __init__(self, token_makers, lazy_indexing=True):\n        self.token_makers = token_makers\n        self.lazy_indexing = lazy_indexing\n\n        self.data_handler = DataHandler(cache_path=CachePath.TOKEN_COUNTER)\n\n    def build_vocabs(self, token_counters):\n        logger.info(\"Start build vocab\")\n        vocab_start_time = time.time()\n\n        vocabs = {}\n        for token_name, token_maker in self.token_makers.items():\n            is_defined_config = type(token_maker.vocab_config) == dict\n            if is_defined_config:\n                token_counter = token_counters[token_name]\n                vocab = self._build_vocab_with_config(token_name, token_maker, token_counter)\n            else:\n                vocab = Vocab(token_name)\n                vocab.init()\n\n            vocabs[token_name] = vocab\n            logger.info(\n                f\" => {token_name} vocab size: {len(vocab)}  (use predefine vocab: {vocab.pretrained_path is not None})\"\n            )\n\n        vocab_elapased_time = time.time() - vocab_start_time\n        logger.info(f\"Complete build vocab...  elapsed_time: {vocab_elapased_time}\\n\")\n\n        # Setting Indexer (vocab)\n        for token_name, token_maker in self.token_makers.items():\n            token_maker.set_vocab(vocabs[token_name])\n        return vocabs\n\n    def _build_vocab_with_config(self, token_name, token_maker, token_counter):\n        token_maker.vocab_config[\"token_name\"] = token_name\n        vocab = Vocab(**token_maker.vocab_config)\n\n        if vocab.pretrained_path is not None:\n            vocab.build_with_pretrained_file(token_counter)\n        else:\n            vocab.build(token_counter)\n        return vocab\n\n    def is_all_vocab_use_pretrained(self):\n        for token_name, token_maker in self.token_makers.items():\n            if token_maker.vocab_config.get(\"pretrained_path\", None) is None:\n                return False\n            if token_maker.vocab_config.get(\"pretrained_token\", \"\") != Vocab.PRETRAINED_ALL:\n                return False\n        return True\n\n    def make_token_counters(self, texts, config=None):\n        token_counters = {}\n        for token_name, token_maker in self.token_makers.items():\n            token_vocab_config = token_maker.vocab_config\n            if type(token_vocab_config) == dict:\n                if token_vocab_config.get(\"pretrained_token\", None) == Vocab.PRETRAINED_ALL:\n                    texts = [\n                        \"\"\n                    ]  # do not use token_counter from dataset -> make empty token_counter\n\n            token_counter = self._make_token_counter(\n                texts, token_maker.tokenizer, config=config, desc=f\"{token_name}-vocab\"\n            )\n            logger.info(f\" * {token_name} token_counter size: {len(token_counter)}\")\n\n            token_counters[token_name] = token_counter\n        return token_counters\n\n    def _make_token_counter(self, texts, tokenizer, config=None, desc=None):\n        tokenizer_name = tokenizer.name\n\n        cache_token_counter = None\n        if config is not None:\n            data_reader_config = config.data_reader\n            cache_token_counter = self.data_handler.cache_token_counter(\n                data_reader_config, tokenizer_name\n            )\n\n        if cache_token_counter:\n            return cache_token_counter\n        else:\n            tokens = [\n                token for text in tqdm(texts, desc=desc) for token in tokenizer.tokenize(text)\n            ]\n            flatten_list = list(common_utils.flatten(tokens))\n            token_counter = Counter(flatten_list)\n\n            if config is not None:  # Cache TokenCounter\n                self.data_handler.cache_token_counter(\n                    data_reader_config, tokenizer_name, obj=token_counter\n                )\n            return token_counter\n\n    def index(self, datas, text_columns):\n        logger.info(f\"Start token indexing, Lazy: {self.lazy_indexing}\")\n        indexing_start_time = time.time()\n\n        for data_type, data in datas.items():\n            if type(data) == list:\n                # Multi-Data Indexing\n                for d in data:\n                    self._index_features(\n                        d.features, text_columns, desc=f\"indexing features ({data_type})\"\n                    )\n            else:\n                self._index_features(\n                    data.features, text_columns, desc=f\"indexing features ({data_type})\"\n                )\n\n        indexing_elapased_time = time.time() - indexing_start_time\n        logger.info(f\"Complete token indexing... elapsed_time: {indexing_elapased_time} \\n\")\n\n    def _index_features(self, features, text_columns, desc=None, suppress_tqdm=False):\n        for feature in tqdm(features, desc=desc, disable=suppress_tqdm):\n            for key, text in feature.items():\n                if key not in text_columns:\n                    continue\n\n                # Set data_type (text => {\"text\": ..., \"token1\": ..., ...})\n                if type(feature[key]) != dict:\n                    feature[key] = {\"text\": text}\n                if type(text) == dict:\n                    text = text[\"text\"]\n\n                for token_name, token_maker in self.token_makers.items():\n                    param_key = token_maker.indexer.param_key\n                    if param_key == key:\n                        continue\n\n                    feature[key][token_name] = self._index_token(token_maker, text, feature)\n\n    def _index_token(self, token_maker, text, data):\n        def index():\n            indexer = token_maker.indexer\n            params = {}\n            if token_maker.type_name == TokenMaker.EXACT_MATCH_TYPE:\n                param_text = data[indexer.param_key]\n                if type(param_text) == dict:\n                    param_text = param_text[\"text\"]\n                params[\"query_text\"] = param_text\n            return indexer.index(text, **params)\n\n        if self.lazy_indexing:\n            return index\n        else:\n            return index()\n\n    def raw_to_tensor_fn(self, data_reader, cuda_device=None, helper={}):\n        def raw_to_tensor(inputs):\n            is_one = True  # batch_size 1 flag\n            feature, _helper = data_reader.read_one_example(inputs)\n\n            nonlocal helper\n            helper.update(_helper)\n\n            if type(feature) == list:\n                is_one = False\n                features = feature\n            else:\n                features = [feature]\n\n            self._index_features(features, data_reader.text_columns, suppress_tqdm=True)\n\n            if is_one:\n                indexed_features = features[0]\n            else:  # when features > 1, need to transpose (dict_of_list -> list_of_dict)\n                indexed_features = {}\n                for key in features[0]:\n                    feature_with_key = [feature[key] for feature in features]\n                    indexed_features[key] = transpose(feature_with_key, skip_keys=[\"text\"])\n\n            for key in indexed_features:\n                for token_name in self.token_makers:\n                    if token_name not in indexed_features[key]:\n                        continue\n\n                    indexed_values = indexed_features[key][token_name]\n                    if is_one:\n                        indexed_values = [indexed_values]\n\n                    tensor = padding_tokens(indexed_values, token_name=token_name)\n                    if cuda_device is not None and type(tensor) != list:\n                        tensor = tensor.cuda(cuda_device)\n                    indexed_features[key][token_name] = tensor\n\n            for key in indexed_features:\n                if \"text\" in indexed_features[key]:\n                    del indexed_features[key][\"text\"]\n\n            return indexed_features, helper\n\n        return raw_to_tensor\n"
  },
  {
    "path": "claf/tokens/token_embedder/__init__.py",
    "content": "\nfrom .basic_embedder import BasicTokenEmbedder\nfrom .reading_comprehension_embedder import RCTokenEmbedder\n\n\n__all__ = [\"BasicTokenEmbedder\", \"RCTokenEmbedder\"]\n"
  },
  {
    "path": "claf/tokens/token_embedder/base.py",
    "content": "\n\nimport torch\n\n\nclass TokenEmbedder(torch.nn.Module):\n    \"\"\"\n    Token Embedder\n\n    Take a tensor(indexed token) look up Embedding modules.\n\n    * Args:\n        token_makers: dictionary of TokenMaker (claf.token_makers.token)\n    \"\"\"\n\n    def __init__(self, token_makers):\n        super(TokenEmbedder, self).__init__()\n\n        self.embed_dims = {}\n\n        self.vocabs = {\n            token_name: token_maker.vocab for token_name, token_maker in token_makers.items()\n        }\n        self.add_embedding_modules(token_makers)\n\n    def add_embedding_modules(self, token_makers):\n        \"\"\" add embedding module to TokenEmbedder \"\"\"\n        self.token_names = []\n        for token_name, token_maker in token_makers.items():\n            self.token_names.append(token_name)\n\n            vocab = token_maker.vocab\n            embedding = token_maker.embedding_fn(vocab)\n            self.add_module(token_name, embedding)\n\n            self.embed_dims[token_name] = embedding.get_output_dim()\n\n    def get_embed_dim(self):\n        raise NotImplementedError\n\n    def forward(self, inputs, params={}):\n        raise NotImplementedError\n"
  },
  {
    "path": "claf/tokens/token_embedder/basic_embedder.py",
    "content": "\nfrom overrides import overrides\n\nimport torch\n\nfrom .base import TokenEmbedder\n\n\nclass BasicTokenEmbedder(TokenEmbedder):\n    \"\"\"\n    Basic Token Embedder\n\n    Take a tensor(indexed token) look up Embedding modules.\n    Output is concatenating all embedded tensors.\n\n    * Args:\n        token_makers: dictionary of TokenMaker (claf.tokens.token_maker)\n    \"\"\"\n\n    def __init__(self, token_makers):\n        super(BasicTokenEmbedder, self).__init__(token_makers)\n\n    @overrides\n    def get_embed_dim(self, except_keys=[]):\n        return sum(self.embed_dims.values())\n\n    @overrides\n    def forward(self, inputs, except_keys=[], params={}):\n        token_names = [name for name in self.token_names if name not in except_keys]\n        if set(token_names) != set(inputs.keys()):\n            raise ValueError(\n                f\"Mismatch token_names  inputs: {inputs.keys()}, embeddings: {self.token_names}\"\n            )\n\n        embedded_tokens = []\n        for token_name, tensors in inputs.items():\n            embedding = getattr(self, token_name)\n\n            embedded_token = embedding(tensors, **params)\n            embedded_tokens.append(embedded_token)\n\n        output = torch.cat(embedded_tokens, dim=-1)\n        return output\n"
  },
  {
    "path": "claf/tokens/token_embedder/reading_comprehension_embedder.py",
    "content": "\nfrom overrides import overrides\nimport torch\n\nimport claf.modules.functional as f\nimport claf.modules.attention as attention\n\nfrom .base import TokenEmbedder\n\n\nclass RCTokenEmbedder(TokenEmbedder):\n    \"\"\"\n    Reading Comprehension Token Embedder\n\n    Take a tensor(indexed token) look up Embedding modules.\n    Inputs are seperated context and query for individual token setting.\n\n    * Args:\n        token_makers: dictionary of TokenMaker (claf.tokens.token_maker)\n        vocabs: dictionary of vocab\n            {\"token_name\": Vocab (claf.token_makers.vocaburary), ...}\n    \"\"\"\n\n    EXCLUSIVE_TOKENS = [\"exact_match\"]  # only context\n\n    def __init__(self, token_makers):\n        super(RCTokenEmbedder, self).__init__(token_makers)\n\n        self.context_embed_dim = sum(self.embed_dims.values())\n        self.query_embed_dim = sum(self._filter(self.embed_dims, exclusive=False).values())\n\n        self.align_attention = attention.SeqAttnMatch(self.query_embed_dim)\n\n    @overrides\n    def get_embed_dim(self):\n        return self.context_embed_dim, self.query_embed_dim\n\n    @overrides\n    def forward(self, context, query, context_params={}, query_params={}, query_align=False):\n        \"\"\"\n        * Args:\n            context: context inputs (eg. {\"token_name1\": tensor, \"token_name2\": tensor, ...})\n            query: query inputs (eg. {\"token_name1\": tensor, \"token_name2\": tensor, ...})\n\n        * Kwargs:\n            context_params: custom context parameters\n            query_params: query context parameters\n            query_align: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij\n                captures the similarity between pi and each question words q_j.\n                these features add soft alignments between similar but non-identical words (e.g., car and vehicle)\n                it only apply to 'context_embed'.\n        \"\"\"\n\n        if set(self.token_names) != set(context.keys()):\n            raise ValueError(\n                f\"Mismatch token_names  inputs: {context.keys()}, embeddings: {self.token_names}\"\n            )\n\n        context_tokens, query_tokens = {}, {}\n        for token_name, context_tensors in context.items():\n            embedding = getattr(self, token_name)\n\n            context_tokens[token_name] = embedding(\n                context_tensors, **context_params.get(token_name, {})\n            )\n            if token_name in query:\n                query_tokens[token_name] = embedding(\n                    query[token_name], **query_params.get(token_name, {})\n                )\n\n        # query_align_embedding\n        if query_align:\n            common_context = self._filter(context_tokens, exclusive=False)\n            embedded_common_context = torch.cat(list(common_context.values()), dim=-1)\n            exclusive_context = self._filter(context_tokens, exclusive=True)\n\n            embedded_exclusive_context = None\n            if exclusive_context != {}:\n                embedded_exclusive_context = torch.cat(list(exclusive_context.values()), dim=-1)\n\n            query_mask = f.get_mask_from_tokens(query_tokens)\n            embedded_query = torch.cat(list(query_tokens.values()), dim=-1)\n\n            embedded_aligned_query = self.align_attention(\n                embedded_common_context, embedded_query, query_mask\n            )\n\n            # Merge context embedded\n            embedded_context = [embedded_common_context, embedded_aligned_query]\n            if embedded_exclusive_context is not None:\n                embedded_context.append(embedded_exclusive_context)\n\n            context_output = torch.cat(embedded_context, dim=-1)\n            query_output = embedded_query\n        else:\n            context_output = torch.cat(list(context_tokens.values()), dim=-1)\n            query_output = torch.cat(list(query_tokens.values()), dim=-1)\n\n        return context_output, query_output\n\n    def _filter(self, token_data, exclusive=False):\n        if exclusive:\n            return {k: v for k, v in token_data.items() if k in self.EXCLUSIVE_TOKENS}\n        else:\n            return {k: v for k, v in token_data.items() if k not in self.EXCLUSIVE_TOKENS}\n"
  },
  {
    "path": "claf/tokens/token_maker.py",
    "content": "class TokenMaker:\n    \"\"\"\n    Token Maker (Data Transfer Object)\n\n    Token Maker consists of Tokenizer, Indexer, Embedding and Vocab\n\n    * Kwargs:\n        tokenizer: Tokenizer (claf.tokens.tokenizer.base)\n        indexer: TokenIndexer (claf.tokens.indexer.base)\n        embedding_fn: wrapper function of TokenEmbedding (claf.tokens.embedding.base)\n        vocab_config: config dict of Vocab (claf.tokens.vocaburary)\n    \"\"\"\n\n    # Token Type List\n    FEATURE_TYPE = \"feature\"  # Do not use embedding, pass indexed_feature\n\n    BERT_TYPE = \"bert\"\n    CHAR_TYPE = \"char\"\n    COVE_TYPE = \"cove\"\n    ELMO_TYPE = \"elmo\"\n    EXACT_MATCH_TYPE = \"exact_match\"\n    WORD_TYPE = \"word\"\n    FREQUENT_WORD_TYPE = \"frequent_word\"\n    LINGUISTIC_TYPE = \"linguistic\"\n\n    def __init__(\n        self, token_type, tokenizer=None, indexer=None, embedding_fn=None, vocab_config=None\n    ):\n        self.type_name = token_type\n        self._tokenizer = tokenizer\n        self._indexer = indexer\n        self._embedding_fn = embedding_fn\n        self._vocab_config = vocab_config\n\n    @property\n    def tokenizer(self):\n        return self._tokenizer\n\n    @tokenizer.setter\n    def tokenizer(self, tokenizer):\n        self._tokenizer = tokenizer\n\n    @property\n    def indexer(self):\n        return self._indexer\n\n    @indexer.setter\n    def indexer(self, indexer):\n        self._indexer = indexer\n\n    @property\n    def embedding_fn(self):\n        return self._embedding_fn\n\n    @embedding_fn.setter\n    def embedding_fn(self, embedding_fn):\n        self._embedding_fn = embedding_fn\n\n    @property\n    def vocab_config(self):\n        return self._vocab_config\n\n    @vocab_config.setter\n    def vocab_config(self, vocab_config):\n        self._vocab_config = vocab_config\n\n    @property\n    def vocab(self):\n        return self._vocab\n\n    @vocab.setter\n    def vocab(self, vocab):\n        self._vocab = vocab\n\n    def set_vocab(self, vocab):\n        self._indexer.set_vocab(vocab)\n        self._vocab = vocab\n"
  },
  {
    "path": "claf/tokens/tokenizer/__init__.py",
    "content": "\nfrom .pass_text import PassText\n\nfrom .bpe import BPETokenizer\nfrom .char import CharTokenizer\nfrom .subword import SubwordTokenizer\nfrom .word import WordTokenizer\nfrom .sent import SentTokenizer\n\n\n__all__ = [\"PassText\", \"BPETokenizer\", \"CharTokenizer\", \"SubwordTokenizer\", \"WordTokenizer\", \"SentTokenizer\"]\n"
  },
  {
    "path": "claf/tokens/tokenizer/base.py",
    "content": "class Tokenizer:\n    \"\"\"\n    Tokenizer Base Class\n    \"\"\"\n\n    MAX_TO_KEEP_CACHE = 3\n\n    def __init__(self, name, cache_name):\n        self.cache = {}  # dict: {text: tokenized_tokens}\n        self.name = name\n        self.cache_name = cache_name\n\n    def tokenize(self, text, unit=\"text\"):\n        if type(text) == str and text in self.cache:\n            return self.cache[text]\n\n        tokenized_tokens = self._tokenize(text, unit=\"text\")\n\n        # Cache\n        if len(self.cache) <= self.MAX_TO_KEEP_CACHE:\n            self.cache[text] = tokenized_tokens\n        else:\n            first_key = next(iter(self.cache.keys()))\n            del self.cache[first_key]\n\n        return tokenized_tokens\n\n    def _tokenize(self, text, unit=\"text\"):\n        \"\"\" splitting text into tokens. \"\"\"\n        if type(text) != str:\n            raise ValueError(f\"text type is must be str. not {type(text)}\")\n\n        return getattr(self, f\"_{self.name}\")(text, unit=unit)\n"
  },
  {
    "path": "claf/tokens/tokenizer/bpe.py",
    "content": "\nfrom transformers import RobertaTokenizer\n\nfrom claf.data.data_handler import CachePath, DataHandler\n\nfrom .base import Tokenizer\n\n\nclass BPETokenizer(Tokenizer):\n    \"\"\"\n    BPTE(Byte-Pair Encoding) Tokenizer\n    text -> ...\n    * Args:\n        name: tokenizer name [roberta]\n    \"\"\"\n\n    def __init__(self, name, config={}):\n        super(BPETokenizer, self).__init__(name, f\"bpe-{name}\")\n        self.data_handler = DataHandler(CachePath.VOCAB)\n        self.config = config\n\n        self.bpe_tokenizer = None\n\n    \"\"\" Tokenizers \"\"\"\n\n    def _roberta(self, text, unit=\"text\"):\n        \"\"\"\n        ex)\n        \"\"\"\n        if self.bpe_tokenizer is None:\n            vocab_path = self.data_handler.read(self.config[\"vocab_path\"], return_path=True)\n            merges_path = self.data_handler.read(self.config[\"merges_path\"], return_path=True)\n            del self.config[\"vocab_path\"]\n            del self.config[\"merges_path\"]\n\n            self.bpe_tokenizer = RobertaTokenizer(vocab_path, merges_path, **self.config)\n\n        return self.bpe_tokenizer._tokenize(text)\n\n"
  },
  {
    "path": "claf/tokens/tokenizer/char.py",
    "content": "\nfrom claf.tokens import hangul as hg\n\nfrom .base import Tokenizer\n\n\nclass CharTokenizer(Tokenizer):\n    \"\"\"\n    Character Tokenizer\n\n    text -> word tokens -> [char tokens]\n\n    * Args:\n        name: tokenizer name [character|decompose_ko]\n        word_tokenizer: word tokenizer object\n    \"\"\"\n\n    def __init__(self, name, word_tokenizer, config={}):\n        super(CharTokenizer, self).__init__(name, f\"char-{name}+{word_tokenizer.cache_name}\")\n        self.config = config\n        self.word_tokenizer = word_tokenizer\n\n    \"\"\" Tokenizers \"\"\"\n\n    def _character(self, text, unit=\"text\"):\n        \"\"\"\n        ex) Hello World -> ['Hello', 'World'] -> [['H', 'e', 'l', 'l', 'o'], ['W', 'o', 'r', 'l', 'd']]\n        \"\"\"\n        if unit == \"word\":\n            return [char for char in text]\n        else:\n            return [[char for char in word] for word in self.word_tokenizer.tokenize(text)]\n\n    def _jamo_ko(self, text, unit=\"text\"):\n        \"\"\"\n        ex) 안녕 세상 -> ['안녕', '세상'] -> [['ㅇ', 'ㅏ', 'ㄴ', 'ㄴ', 'ㅕ', 'ㅇ'], ['ㅅ', 'ㅔ', 'ㅅ', 'ㅏ', 'ㅇ']]\n        \"\"\"\n\n        def decompose(char):\n            if hg.is_hangul(char):\n                try:\n                    return [c for c in hg.decompose(char) if c != \"\"]\n                except IndexError:  # Case: ㅋㅋㅋㅋ\n                    return [char]\n            else:\n                return [char]\n\n        tokens = []\n        if unit == \"word\":\n            chars = []\n            for char in text:\n                chars.extend(decompose(char))\n            tokens.append(chars)\n        else:\n            for word in self.word_tokenizer.tokenize(text):\n                chars = []\n                for char in word:\n                    chars.extend(decompose(char))\n                tokens.append(chars)\n        return tokens\n"
  },
  {
    "path": "claf/tokens/tokenizer/pass_text.py",
    "content": "class PassText:\n    \"\"\"\n    Pass text without tokenize\n    \"\"\"\n\n    def __init__(self):\n        self.name = \"pass\"\n        self.cache_name = \"pass\"\n\n    def tokenize(self, text):\n        return text\n"
  },
  {
    "path": "claf/tokens/tokenizer/sent.py",
    "content": "\nimport nltk.data\n\nfrom .base import Tokenizer\n\n\nclass SentTokenizer(Tokenizer):\n    \"\"\"\n    Sentence Tokenizer\n\n    text -> [sent tokens]\n\n    * Args:\n        name: tokenizer name [punkt]\n    \"\"\"\n\n    def __init__(self, name, config={}):\n        super(SentTokenizer, self).__init__(name, f\"sent-{name}\")\n        self.config = config\n\n    \"\"\" Tokenizers \"\"\"\n\n    def _punkt(self, text, unit=\"text\"):\n        \"\"\"\n        ex) Hello World. This is punkt tokenizer -> ['Hello World', 'This is punkt tokenizer']\n        \"\"\"\n        sent_tokenizer = nltk.data.load(\"tokenizers/punkt/english.pickle\")\n        return sent_tokenizer.tokenize(text)\n"
  },
  {
    "path": "claf/tokens/tokenizer/subword.py",
    "content": "\nfrom transformers import WordpieceTokenizer\nfrom transformers.tokenization_bert import load_vocab\n\n\nfrom claf.data.data_handler import CachePath, DataHandler\n\nfrom .base import Tokenizer\n\n\nclass SubwordTokenizer(Tokenizer):\n    \"\"\"\n    Subword Tokenizer\n\n    text -> [word tokens] -> [[sub word tokens], ...]\n\n    * Args:\n        name: tokenizer name [wordpiece]\n    \"\"\"\n\n    def __init__(self, name, word_tokenizer, config={}):\n        super(SubwordTokenizer, self).__init__(name, f\"subword-{name}+{word_tokenizer.cache_name}\")\n        self.data_handler = DataHandler(CachePath.VOCAB)\n        self.config = config\n        self.word_tokenizer = word_tokenizer\n        self.subword_tokenizer = None\n\n    \"\"\" Tokenizers \"\"\"\n\n    def _wordpiece(self, text, unit=\"text\"):\n        \"\"\"\n        ex) Hello World -> ['Hello', 'World'] -> ['He', '##llo', 'Wo', '##rld']\n        \"\"\"\n        if self.subword_tokenizer is None:\n            vocab_path = self.data_handler.read(self.config[\"vocab_path\"], return_path=True)\n            vocab = load_vocab(vocab_path)\n            self.subword_tokenizer = WordpieceTokenizer(\n                vocab, unk_token=self.config.get(\"unk_token\", \"[UNK]\"))\n\n        tokens = []\n\n        if unit == \"word\":\n            for sub_token in self.subword_tokenizer.tokenize(text):\n                tokens.append(sub_token)\n        else:\n            for token in self.word_tokenizer.tokenize(text):\n                for sub_token in self.subword_tokenizer.tokenize(token):\n                    tokens.append(sub_token)\n\n        return tokens\n"
  },
  {
    "path": "claf/tokens/tokenizer/utils.py",
    "content": "\nimport spacy\n\n\ndef create_tokenizer_with_regex(nlp, split_regex):\n    prefixes_re = spacy.util.compile_prefix_regex(nlp.Defaults.prefixes)\n    infix_re = split_regex\n    suffix_re = spacy.util.compile_suffix_regex(nlp.Defaults.suffixes)\n\n    return spacy.tokenizer.Tokenizer(\n        nlp.vocab,\n        nlp.Defaults.tokenizer_exceptions,\n        prefix_search=prefixes_re.search,\n        infix_finditer=infix_re.finditer,\n        suffix_search=suffix_re.search,\n        token_match=None,\n    )\n\n\ndef load_spacy_model_for_tokenizer(split_regex):\n    model = spacy.load(\"en_core_web_sm\", disable=[\"vectors\", \"textcat\", \"tagger\", \"parser\", \"ner\"])\n\n    if split_regex is not None:\n        spacy_tokenizer = create_tokenizer_with_regex(model, split_regex)\n        model.tokenizer = spacy_tokenizer\n    return model\n"
  },
  {
    "path": "claf/tokens/tokenizer/word.py",
    "content": "\n\nimport re\n\nfrom overrides import overrides\n\nfrom claf import utils as common_utils\n\nfrom .base import Tokenizer\n\n\nclass WordTokenizer(Tokenizer):\n    \"\"\"\n    Word Tokenizer\n\n    * Args:\n        name: tokenizer name [treebank_en|spacy_en|mecab_ko|bert_basic]\n\n    * Kwargs:\n        flatten: return type as flatten list\n        split_with_regex: post split action. Split tokens that the tokenizer cannot split.\n    \"\"\"\n\n    def __init__(self, name, sent_tokenizer, config={}, split_with_regex=True):\n        super(WordTokenizer, self).__init__(name, f\"word-{name}+{sent_tokenizer.cache_name}\")\n        self.config = config\n        self.sent_tokenizer = sent_tokenizer\n        self.word_tokenizer = None\n\n        self.split_with_regex = split_with_regex\n        if split_with_regex:\n            self.extra_split_chars_re = self.make_split_regex_expression()\n\n    def make_split_regex_expression(self):\n        \"\"\"\n        Apply a small amount of extra splitting to the given tokens, this is in particular to avoid UNK tokens\n        due to contraction, quotation, or other forms of puncutation. I haven't really done tests to see\n        if/how much difference this makes, but it does avoid some common UNKs I noticed in SQuAD/TriviaQA\n        \"\"\"\n        extra_split_chars = (\n            \"-\",\n            \"£\",\n            \"€\",\n            \"¥\",\n            \"¢\",\n            \"₹\",\n            \"*\",\n            \"\\u2212\",\n            \"\\u2014\",\n            \"\\u2013\",\n            \"/\",\n            \"~\",\n            '\"',\n            \"'\",\n            \"\\ud01C\",\n            \"\\u2019\",\n            \"\\u201D\",\n            \"\\u2018\",\n            \"\\u00B0\",\n            \".\",\n            \":\",\n        )\n        extra_split_tokens = (\n            \"``\",\n            \"(?<=[^_])_(?=[^_])\",  # dashes w/o a preceeding or following dash, so __wow___ -> ___ wow ___\n            \"''\",\n            \"[\" + \"\".join(extra_split_chars) + \"]\",\n        )\n        return re.compile(\"(\" + \"|\".join(extra_split_tokens) + \")\")\n\n    @overrides\n    def _tokenize(self, text, unit=\"text\"):\n        \"\"\" Text -> word tokens \"\"\"\n        if type(text) != str:\n            raise ValueError(f\"text type is must be str. not {type(text)}\")\n\n        if unit == \"sentence\":\n            tokens = getattr(self, f\"_{self.name}\")(text)\n        else:\n            sentences = self.sent_tokenizer.tokenize(text)\n            tokens = [getattr(self, f\"_{self.name}\")(sentence) for sentence in sentences]\n\n        if self.split_with_regex and self.name != \"spacy_en\":\n            tokens = self._split_with_regex(tokens)\n\n        return list(common_utils.flatten(tokens))\n\n    def _split_with_regex(self, sentences):\n        for i, sentence in enumerate(sentences):\n            sentences[i] = [token for token in self._post_split_tokens(sentence)]\n        return sentences\n\n    def _post_split_tokens(self, tokens):\n        return [[x for x in self.extra_split_chars_re.split(token) if x != \"\"] for token in tokens]\n\n    \"\"\" Tokenizers \"\"\"\n\n    def _space_all(self, text):\n        def is_whitespace(c):\n            if c == \" \" or c == \"\\t\" or c == \"\\r\" or c == \"\\n\" or ord(c) == 0x202F:\n                return True\n            return False\n\n        prev_is_whitespace = True\n        tokens = []\n        for char in text:\n            if is_whitespace(char):\n                prev_is_whitespace = True\n            else:\n                if prev_is_whitespace:\n                    tokens.append(char)\n                else:\n                    tokens[-1] += char\n                prev_is_whitespace = False\n        return tokens\n\n    def _treebank_en(self, text):\n        if self.word_tokenizer is None:\n            import nltk\n\n            self.word_tokenizer = nltk.TreebankWordTokenizer()\n\n        return [\n            token.replace(\"''\", '\"').replace(\"``\", '\"')\n            for token in self.word_tokenizer.tokenize(text)\n        ]\n\n    def _spacy_en(self, text):\n        if self.word_tokenizer is None:\n            from claf.tokens.tokenizer.utils import load_spacy_model_for_tokenizer\n\n            self.word_tokenizer = load_spacy_model_for_tokenizer(self.extra_split_chars_re)\n\n        def _remove_spaces(tokens):\n            return [token.text for token in tokens if not token.is_space]\n\n        return _remove_spaces(self.word_tokenizer(text))\n\n    def _bert_basic(self, text):\n        if self.word_tokenizer is None:\n            from transformers import BasicTokenizer\n\n            self.word_tokenizer = BasicTokenizer(**self.config)\n\n        return self.word_tokenizer.tokenize(text)\n\n    def _mecab_ko(self, text):\n        if self.word_tokenizer is None:\n            from konlpy.tag import Mecab\n\n            self.word_tokenizer = Mecab()\n\n        return self.word_tokenizer.morphs(text)\n"
  },
  {
    "path": "claf/tokens/vocabulary.py",
    "content": "\nfrom collections import defaultdict\nimport json\n\nfrom claf.data.data_handler import CachePath, DataHandler\n\n\nclass VocabDict(defaultdict):\n    \"\"\"\n    Vocab DefaultDict Class\n\n    * Kwargs:\n        oov_value: out-of-vocaburary token value (eg. <unk>)\n    \"\"\"\n\n    def __init__(self, oov_value):\n        self.oov_value = oov_value\n\n    def __missing__(self, key):\n        return self.oov_value\n\n\nclass Vocab:\n    \"\"\"\n    Vocaburary Class\n\n    Vocab consists of token_to_index and index_to_token.\n\n    * Args:\n        token_name: Token name (Token and Vocab is one-to-one relationship)\n\n    * Kwargs:\n        pad_token: padding token value (eg. <pad>)\n        oov_token: out-of-vocaburary token value (eg. <unk>)\n        start_token: start token value (eg. <s>, <bos>)\n        end_token: end token value (eg. </s>, <eos>)\n        cls_token: CLS token value for BERT (eg. [CLS])\n        sep_token: SEP token value for BERT (eg. [SEP])\n        min_count: token's minimal frequent count.\n            when you define min_count, tokens remain that bigger than min_count.\n        max_vocab_size: vocaburary's maximun size.\n            when you define max_vocab_size, tokens are selected according to frequent count.\n        frequent_count: get frequent_count threshold_index.\n            (eg. frequent_count = 1000, threshold_index is the tokens that frequent_count is 999 index number.)\n        pretrained_path: pretrained vocab file path\n            (format: A\\nB\\nC\\nD\\n...)\n    \"\"\"\n\n    DEFAULT_PAD_INDEX, DEFAULT_PAD_TOKEN = 0, \"[PAD]\"\n    DEFAULT_OOV_INDEX, DEFAULT_OOV_TOKEN = 1, \"[UNK]\"\n\n    # pretrained_vocab handle methods\n    PRETRAINED_ALL = \"all\"  # Case. embedding matrix - predefine_vocab fixed\n    PRETRAINED_INTERSECT = \"intersect\"  # add token that included in predefine_vocab, else UNK_token\n\n    def __init__(\n        self,\n        token_name,\n        pad_token=None,\n        oov_token=None,\n        start_token=None,\n        end_token=None,\n        cls_token=None,\n        sep_token=None,\n        min_count=None,\n        max_vocab_size=None,\n        frequent_count=None,\n        pretrained_path=None,\n        pretrained_token=None,\n    ):\n        self.token_name = token_name\n\n        # basic token (pad and oov)\n        self.pad_index = self.DEFAULT_PAD_INDEX\n        self.pad_token = pad_token\n        if pad_token is None:\n            self.pad_token = self.DEFAULT_PAD_TOKEN\n\n        self.oov_index = self.DEFAULT_OOV_INDEX\n        self.oov_token = oov_token\n        if oov_token is None:\n            self.oov_token = self.DEFAULT_OOV_TOKEN\n\n        # special_tokens\n        self.start_token = start_token\n        self.end_token = end_token\n        self.cls_token = cls_token\n        self.sep_token = sep_token\n\n        self.min_count = min_count\n        self.max_vocab_size = max_vocab_size\n\n        self.token_counter = None\n        self.frequent_count = frequent_count\n        self.threshold_index = None\n\n        self.pretrained_path = pretrained_path\n        self.pretrained_token = pretrained_token\n        self.pretrained_token_methods = [self.PRETRAINED_ALL, self.PRETRAINED_INTERSECT]\n\n    def init(self):\n        self.token_to_index = VocabDict(self.oov_index)\n        self.index_to_token = VocabDict(self.oov_token)\n\n        # add default token (pad, oov)\n        self.add(self.pad_token)\n        self.add(self.oov_token)\n\n        special_tokens = [self.start_token, self.end_token, self.cls_token, self.sep_token]\n        for token in special_tokens:\n            if token is not None:\n                self.add(token)\n\n    def build(self, token_counter, predefine_vocab=None):\n        \"\"\"\n        build token with token_counter\n\n        * Args:\n            token_counter: (collections.Counter) token's frequent_count Counter.\n        \"\"\"\n\n        if predefine_vocab is not None:\n            if (\n                self.pretrained_token is None\n                or self.pretrained_token not in self.pretrained_token_methods\n            ):\n                raise ValueError(\n                    f\"When use 'predefine_vocab', need to set 'pretrained_token' {self.pretrained_token_methods}\"\n                )\n\n        if predefine_vocab:\n            if self.pretrained_token == self.PRETRAINED_ALL:\n                self.from_texts(predefine_vocab)\n                return\n            else:\n                predefine_vocab = set(predefine_vocab)\n\n        self.token_counter = token_counter\n        self.init()\n\n        token_counts = list(token_counter.items())\n        token_counts.sort(key=lambda x: x[1], reverse=True)  # order: DESC\n\n        if self.max_vocab_size is not None:\n            token_counts = token_counts[: self.max_vocab_size]\n\n        for token, count in token_counts:\n            if self.min_count is not None:\n                if count >= self.min_count:\n                    self.add(token, predefine_vocab=predefine_vocab)\n            else:\n                self.add(token, predefine_vocab=predefine_vocab)\n\n            if self.threshold_index is None and self.frequent_count is not None:\n                if count < self.frequent_count:\n                    self.threshold_index = len(self.token_to_index)\n\n    def build_with_pretrained_file(self, token_counter):\n        data_handler = DataHandler(CachePath.VOCAB)\n        vocab_texts = data_handler.read(self.pretrained_path)\n\n        if self.pretrained_path.endswith(\".txt\"):\n            predefine_vocab = vocab_texts.split(\"\\n\")\n        elif self.pretrained_path.endswith(\".json\"):\n            vocab_texts = json.loads(vocab_texts)  # {token: id}\n            predefine_vocab = [item[0] for item in\n                               sorted(vocab_texts.items(), key=lambda x: x[1])]\n        else:\n            raise ValueError(f\"support vocab extention. .txt or .json\")\n\n        self.build(token_counter, predefine_vocab=predefine_vocab)\n\n    def __len__(self):\n        return len(self.token_to_index)\n\n    def add(self, token, predefine_vocab=None):\n        if token in self.token_to_index:\n            return  # already added\n        if predefine_vocab:\n            if self.pretrained_token == self.PRETRAINED_INTERSECT and token not in predefine_vocab:\n                return\n\n        index = len(self.token_to_index)\n\n        self.token_to_index[token] = index\n        self.index_to_token[index] = token\n\n    def get_index(self, token):\n        return self.token_to_index[token]\n\n    def get_token(self, index):\n        return self.index_to_token[index]\n\n    def get_all_tokens(self):\n        return list(self.token_to_index.keys())\n\n    def dump(self, path):\n        with open(path, \"w\", encoding=\"utf-8\") as out_file:\n            out_file.write(self.to_text())\n\n    def load(self, path):\n        with open(path, \"r\", encoding=\"utf-8\") as in_file:\n            texts = in_file.read()\n\n        self.from_texts(texts)\n\n    def to_text(self):\n        return \"\\n\".join(self.get_all_tokens())\n\n    def from_texts(self, texts):\n        if type(texts) == list:\n            tokens = texts\n        else:\n            tokens = [token for token in texts.split(\"\\n\")]\n        tokens = [token for token in tokens if token]  # filtering empty string\n\n        # basic token (pad and oov)\n        if self.pad_token in tokens:\n            self.pad_index = tokens.index(self.pad_token)\n        else:\n            self.pad_index = len(tokens)\n            tokens.append(self.pad_token)\n\n        if self.oov_token in tokens:\n            self.oov_index = tokens.index(self.oov_token)\n        else:\n            self.oov_index = len(tokens)\n            tokens.append(self.oov_token)\n\n        self.token_to_index = VocabDict(self.oov_index)\n        self.index_to_token = VocabDict(self.oov_token)\n\n        for token in tokens:\n            self.add(token)\n        return self\n"
  },
  {
    "path": "claf/utils.py",
    "content": "\nimport logging\nimport os\nimport sys\n\nfrom claf.learn.mode import Mode\n\n\n\"\"\" Interface \"\"\"\n\n\ndef get_user_input(category):\n    print(f\"{category.capitalize()} > \", end=\"\")\n    sys.stdout.flush()\n\n    user_input = sys.stdin.readline()\n    try:\n        return eval(user_input)\n    except BaseException:\n        return str(user_input)\n\n\ndef flatten(l):\n    for item in l:\n        if isinstance(item, list):\n            for in_item in flatten(item):\n                yield in_item\n        else:\n            yield item\n\n\n\"\"\" Logging \"\"\"\n\n\ndef set_logging_config(mode, config):\n    stdout_handler = logging.StreamHandler(sys.stdout)\n\n    logging_handlers = [stdout_handler]\n    logging_level = logging.INFO\n\n    if mode == Mode.TRAIN:\n        log_path = os.path.join(\n            config.trainer.log_dir, f\"{config.data_reader.dataset}_{config.model.name}.log\"\n        )\n        os.makedirs(os.path.dirname(log_path), exist_ok=True)\n\n        file_handler = logging.FileHandler(log_path)\n        logging_handlers.append(file_handler)\n    elif mode == Mode.PREDICT:\n        logging_level = logging.WARNING\n\n    logging.basicConfig(\n        format=\"%(asctime)s (%(filename)s:%(lineno)d): [%(levelname)s] - %(message)s\",\n        handlers=logging_handlers,\n        level=logging_level,\n    )\n"
  },
  {
    "path": "docs/Makefile",
    "content": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD   = sphinx-build\nSPHINXPROJ    = rqa\nSOURCEDIR     = .\nBUILDDIR      = _build\n\n# Put it first so that \"make\" without argument is like \"make help\".\nhelp:\n\t@$(SPHINXBUILD) -M help \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n\n.PHONY: help Makefile\n\n# Catch-all target: route all unknown targets to Sphinx using the new\n# \"make mode\" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).\n%: Makefile\n\t@$(SPHINXBUILD) -M $@ \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)"
  },
  {
    "path": "docs/_build/html/.buildinfo",
    "content": "# Sphinx build info version 1\n# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.\nconfig: efcb1307cc0fb9d7a5cb183d8528bc89\ntags: 645f666f9bcd5a90fca523b33c5a78b7\n"
  },
  {
    "path": "docs/_build/html/.nojekyll",
    "content": ""
  },
  {
    "path": "docs/_build/html/_modules/claf/config/args.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.args &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.config.args</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.config.args</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">argparse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">argparse</span> <span class=\"k\">import</span> <span class=\"n\">RawTextHelpFormatter</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">import</span> <span class=\"nn\">sys</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf</span> <span class=\"k\">import</span> <span class=\"n\">nsml</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.namespace</span> <span class=\"k\">import</span> <span class=\"n\">NestedNamespace</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn.mode</span> <span class=\"k\">import</span> <span class=\"n\">Mode</span>\n\n\n<div class=\"viewcode-block\" id=\"config\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.config\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">config</span><span class=\"p\">(</span><span class=\"n\">argv</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">argv</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">argv</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:]</span>  <span class=\"c1\"># 0 is excute file_name</span>\n\n    <span class=\"n\">parser</span> <span class=\"o\">=</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">ArgumentParser</span><span class=\"p\">(</span><span class=\"n\">formatter_class</span><span class=\"o\">=</span><span class=\"n\">RawTextHelpFormatter</span><span class=\"p\">)</span>\n\n    <span class=\"n\">general</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">mode</span> <span class=\"o\">==</span> <span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">EVAL</span><span class=\"p\">:</span>\n        <span class=\"n\">evaluate</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">parse_args</span><span class=\"p\">(</span><span class=\"n\">argv</span><span class=\"p\">,</span> <span class=\"n\">namespace</span><span class=\"o\">=</span><span class=\"n\">NestedNamespace</span><span class=\"p\">())</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">mode</span> <span class=\"o\">==</span> <span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">PREDICT</span><span class=\"p\">:</span>\n        <span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">parse_args</span><span class=\"p\">(</span><span class=\"n\">argv</span><span class=\"p\">,</span> <span class=\"n\">namespace</span><span class=\"o\">=</span><span class=\"n\">NestedNamespace</span><span class=\"p\">())</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">mode</span> <span class=\"o\">==</span> <span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">MACHINE</span><span class=\"p\">:</span>\n        <span class=\"n\">machine</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">)</span>\n        <span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">parse_args</span><span class=\"p\">(</span><span class=\"n\">argv</span><span class=\"p\">,</span> <span class=\"n\">namespace</span><span class=\"o\">=</span><span class=\"n\">NestedNamespace</span><span class=\"p\">())</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">machine_config</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;--machine_config is required.&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">machine_config_path</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"s2\">&quot;machine_config&quot;</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">machine_config</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;.json&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">machine_config_path</span><span class=\"p\">,</span> <span class=\"s2\">&quot;r&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n            <span class=\"n\">defined_config</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">overwrite</span><span class=\"p\">(</span><span class=\"n\">defined_config</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">config</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">train_config</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">,</span> <span class=\"n\">input_argv</span><span class=\"o\">=</span><span class=\"n\">argv</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"train_config\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.train_config\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">train_config</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">,</span> <span class=\"n\">input_argv</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot; Add argument only for hyperparameter tuning. &quot;&quot;&quot;</span>\n\n    <span class=\"n\">data</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">)</span>\n    <span class=\"n\">token</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">)</span>\n    <span class=\"n\">model</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span><span class=\"p\">:</span>\n        <span class=\"n\">nsml_for_internal</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">)</span>\n    <span class=\"n\">trainer</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Use from config file</span>\n    <span class=\"n\">base_config</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">)</span>\n\n    <span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">parse_args</span><span class=\"p\">(</span><span class=\"n\">input_argv</span><span class=\"p\">,</span> <span class=\"n\">namespace</span><span class=\"o\">=</span><span class=\"n\">NestedNamespace</span><span class=\"p\">())</span>\n\n    <span class=\"n\">use_base_config</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">base_config</span>\n    <span class=\"c1\"># use pre-defined base_config</span>\n    <span class=\"k\">if</span> <span class=\"n\">use_base_config</span><span class=\"p\">:</span>\n        <span class=\"n\">base_config_path</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"s2\">&quot;base_config&quot;</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">base_config</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;.json&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">base_config_path</span><span class=\"p\">,</span> <span class=\"s2\">&quot;r&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n            <span class=\"n\">defined_config</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n        <span class=\"c1\"># config.overwrite(defined_config)</span>\n\n        <span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">NestedNamespace</span><span class=\"p\">()</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">load_from_json</span><span class=\"p\">(</span><span class=\"n\">defined_config</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># overwrite input argument when base_config and arguments are provided.</span>\n    <span class=\"c1\"># (eg. --base_config bidaf --learning_rate 2) -&gt; set bidaf.json then overwrite learning_rate 2)</span>\n    <span class=\"n\">input_args</span> <span class=\"o\">=</span> <span class=\"n\">get_input_arguments</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">,</span> <span class=\"n\">input_argv</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">input_args</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n        <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">use_base_config</span><span class=\"p\">:</span>\n        <span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">optimize_config</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">)</span>\n\n    <span class=\"n\">set_gpu_env</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">)</span>\n    <span class=\"n\">set_batch_size</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">config</span></div>\n\n\n<div class=\"viewcode-block\" id=\"get_input_arguments\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.get_input_arguments\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_input_arguments</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">,</span> <span class=\"n\">input_arguments</span><span class=\"p\">):</span>\n    <span class=\"n\">flat_config</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">parse_args</span><span class=\"p\">(</span><span class=\"n\">input_arguments</span><span class=\"p\">)</span>\n    <span class=\"n\">config_dict</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">convert_config2dict</span><span class=\"p\">(</span><span class=\"n\">flat_config</span><span class=\"p\">)</span>\n    <span class=\"n\">config_default_none</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"kc\">None</span> <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">config_dict</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">()}</span>\n\n    <span class=\"n\">input_parser</span> <span class=\"o\">=</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">ArgumentParser</span><span class=\"p\">(</span><span class=\"n\">parents</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">parser</span><span class=\"p\">],</span> <span class=\"n\">conflict_handler</span><span class=\"o\">=</span><span class=\"s2\">&quot;resolve&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">input_parser</span><span class=\"o\">.</span><span class=\"n\">set_defaults</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">config_default_none</span><span class=\"p\">)</span>\n\n    <span class=\"n\">input_config</span> <span class=\"o\">=</span> <span class=\"n\">input_parser</span><span class=\"o\">.</span><span class=\"n\">parse_args</span><span class=\"p\">(</span><span class=\"n\">input_arguments</span><span class=\"p\">)</span>\n    <span class=\"n\">input_config</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">convert_config2dict</span><span class=\"p\">(</span><span class=\"n\">input_config</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"s2\">&quot;base_config&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">input_config</span><span class=\"p\">:</span>\n        <span class=\"k\">del</span> <span class=\"n\">input_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;base_config&quot;</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"n\">v</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">input_config</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">v</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">}</span></div>\n\n\n<div class=\"viewcode-block\" id=\"optimize_config\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.optimize_config\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">optimize_config</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_test</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Remove unselected argument</span>\n        <span class=\"n\">token_excepts</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">names</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"s2\">&quot;names&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;types&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;tokenizer&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">delete_unselected</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">excepts</span><span class=\"o\">=</span><span class=\"n\">token_excepts</span><span class=\"p\">)</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">delete_unselected</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">excepts</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">])</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">delete_unselected</span><span class=\"p\">(</span>\n            <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">optimizer</span><span class=\"p\">,</span>\n            <span class=\"n\">excepts</span><span class=\"o\">=</span><span class=\"p\">[</span>\n                <span class=\"s2\">&quot;op_type&quot;</span><span class=\"p\">,</span>\n                <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">optimizer</span><span class=\"o\">.</span><span class=\"n\">op_type</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;learning_rate&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;lr_scheduler_type&quot;</span><span class=\"p\">,</span>\n                <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">optimizer</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_type</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;exponential_moving_average&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">config</span></div>\n\n\n<div class=\"viewcode-block\" id=\"set_gpu_env\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.set_gpu_env\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">set_gpu_env</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">):</span>\n    <span class=\"c1\"># GPU &amp; NSML</span>\n    <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">use_gpu</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;nsml&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">nsml</span> <span class=\"o\">=</span> <span class=\"n\">NestedNamespace</span><span class=\"p\">()</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">dataset_path</span> <span class=\"o\">=</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">DATASET_PATH</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">gpu_num</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">GPU_NUM</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">gpu_num</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;cuda_devices&quot;</span><span class=\"p\">,</span> <span class=\"p\">[]))</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">use_gpu</span><span class=\"p\">:</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">gpu_num</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span> <span class=\"o\">=</span> <span class=\"kc\">None</span></div>\n\n\n<div class=\"viewcode-block\" id=\"set_batch_size\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.set_batch_size\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">set_batch_size</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">):</span>\n    <span class=\"c1\"># dynamic batch_size (multi-gpu and gradient_accumulation_steps)</span>\n    <span class=\"n\">batch_size</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">iterator</span><span class=\"o\">.</span><span class=\"n\">batch_size</span>\n    <span class=\"k\">if</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">gpu_num</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n        <span class=\"n\">batch_size</span> <span class=\"o\">*=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">gpu_num</span>\n    <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">optimizer</span><span class=\"p\">,</span> <span class=\"s2\">&quot;gradient_accumulation_steps&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">batch_size</span> <span class=\"o\">=</span> <span class=\"n\">batch_size</span> <span class=\"o\">//</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">optimizer</span><span class=\"o\">.</span><span class=\"n\">gradient_accumulation_steps</span>\n    <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">iterator</span><span class=\"o\">.</span><span class=\"n\">batch_size</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">batch_size</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"arg_str2bool\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.arg_str2bool\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">arg_str2bool</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">v</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"ow\">in</span> <span class=\"p\">(</span><span class=\"s2\">&quot;yes&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;true&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;True&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;t&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;y&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;1&quot;</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">v</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"ow\">in</span> <span class=\"p\">(</span><span class=\"s2\">&quot;no&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;false&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;False&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;f&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;n&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0&quot;</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"kc\">False</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">ArgumentTypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Boolean value expected.&quot;</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\"># fmt: off</span>\n<div class=\"viewcode-block\" id=\"general\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.general\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">general</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">):</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;General&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--seed_num&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">21</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;seed_num&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Manually set seed_num (Python, Numpy, Pytorch) default is 21 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--cuda_devices&quot;</span><span class=\"p\">,</span> <span class=\"n\">nargs</span><span class=\"o\">=</span><span class=\"s2\">&quot;+&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">[],</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;cuda_devices&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Set cuda_devices ids (use GPU). if you use NSML, use GPU_NUM&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--slack_url&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;slack_url&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Slack notification (Incoming Webhook) &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"data\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.data\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">data</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">):</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Data Reader&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--dataset&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;squad&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.dataset&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Dataset Name [squad|squad2] &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--train_file_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;train-v1.1.json&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.train_file_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; train file path. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--valid_file_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;dev-v1.1.json&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.valid_file_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; validation file path. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--test_file_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.test_file_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; test file path. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # SQuAD DataSet&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--squad.context_max_length&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.squad.context_max_length&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of SQuAD Context maximum length. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # HistoryQA DataSet&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--history.context_max_length&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.history.context_max_length&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of HistoryQA Context maximum length. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # SeqCls DataSet&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--seq_cls.class_key&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.seq_cls.class_key&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Name of the label to use for classification. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--seq_cls.sequence_max_length&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.seq_cls.sequence_max_length&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum sequence length. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # SeqClsBert DataSet&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--seq_cls_bert.class_key&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.seq_cls_bert.class_key&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Name of the label to use for classification. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--seq_cls_bert.sequence_max_length&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.seq_cls_bert.sequence_max_length&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum sequence length. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # TokClsBert DataSet&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tok_cls_bert.tag_key&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.tok_cls_bert.tag_key&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Name of the label to use for classification. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tok_cls_bert.ignore_tag_idx&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.tok_cls_bert.ignore_tag_idx&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Index of the tag to ignore when calculating loss. (tag pad value) &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tok_cls_bert.sequence_max_length&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;data_reader.tok_cls_bert.sequence_max_length&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum sequence length. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Iterator&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--batch_size&quot;</span><span class=\"p\">,</span> <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">32</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;iterator.batch_size&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Maximum batch size for trainer&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"token\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.token\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">token</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">):</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Token&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--token_names&quot;</span><span class=\"p\">,</span> <span class=\"n\">nargs</span><span class=\"o\">=</span><span class=\"s2\">&quot;+&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;char&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.names&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Define tokens name&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--token_types&quot;</span><span class=\"p\">,</span> <span class=\"n\">nargs</span><span class=\"o\">=</span><span class=\"s2\">&quot;+&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;char&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.types&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Use pre-defined token</span>\n<span class=\"s2\">    (tokenizer -&gt; indexer -&gt; embedder)</span>\n\n<span class=\"s2\">    [char|cove|elmo|exact_match|frequent_word|word]&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # Vocabulary&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.pad_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.vocab.pad_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Padding Token value&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.oov_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.vocab.oov_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Out-of-Vocabulary Token value&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.start_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.vocab.start_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Start Token value&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.end_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.vocab.end_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; End Token value&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.min_count&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.vocab.min_count&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of token&#39;s min count&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.max_vocab_size&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">260</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.vocab.max_vocab_size&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of vocab&#39;s max size&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--feature.pretrained_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.feature.vocab.pretrained_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Add pretrained vocab_path&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--feature.pad_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.feature.vocab.pad_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Set pad_token&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--feature.oov_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.feature.vocab.oov_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Set oov_token&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--feature.cls_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.feature.vocab.cls_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Set cls_token&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--feature.sep_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.feature.vocab.sep_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Set sep_token&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word.pad_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word.vocab.pad_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Padding Token value&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word.oov_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word.vocab.oov_token&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Out-of-Vocabulary Token value&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word.min_count&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word.vocab.min_count&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of token&#39;s min count&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word.max_vocab_size&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word.vocab.max_vocab_size&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of vocab&#39;s max size&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--frequent_word.frequent_count&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.frequent_word.vocab.frequent_count&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The number of threshold frequent count</span>\n<span class=\"s2\">    (&gt;= threshold -&gt; fine-tune, &lt; threshold -&gt; fixed)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # Tokenizer&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tokenizer.bpe.name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;roberta&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.tokenizer.bpe.name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    BPE Tokenizer package name [roberta]</span>\n<span class=\"s2\">    Default is &#39;roberta&#39; &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tokenizer.bpe.roberta.vocab_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.tokenizer.bpe.roberta.vocab_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    RoBERTa BPE Tokenizer vocab_path</span>\n<span class=\"s2\">    Default is &#39;None&#39; &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tokenizer.bpe.roberta.merges_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.tokenizer.bpe.roberta.merges_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    RoBERTa BPE Tokenizer merges_path</span>\n<span class=\"s2\">    Default is &#39;None&#39; &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tokenizer.char.name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;character&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.tokenizer.char.name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    CharTokenizer package name [character|jamo_ko]</span>\n<span class=\"s2\">    Default is &#39;character&#39; &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tokenizer.subword.name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;wordpiece&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.tokenizer.subword.name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    SubWordTokenizer package name [wordpiece]</span>\n<span class=\"s2\">    Default is &#39;wordpiece&#39; &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tokenizer.subword.wordpiece.vocab_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.tokenizer.subword.wordpiece.vocab_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Wordpiece Tokenizer vocab_path</span>\n<span class=\"s2\">    Default is &#39;None&#39; &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tokenizer.word.name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;treebank_en&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.tokenizer.word.name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    WordTokenizer package name [treebank_en|spacy_en|mecab_ko]</span>\n<span class=\"s2\">    Default is &#39;treebank_en&#39; &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tokenizer.word.split_with_regex&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.tokenizer.word.split_with_regex&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; preprocess for SQuAD Context data (simple regex) &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tokenizer.word.bert_basic.do_lower_case&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.tokenizer.word.bert_basic.do_lower_case&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Wordpiece Tokenizer do_lower_case or not</span>\n<span class=\"s2\">    Default is &#39;True&#39; &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--tokenizer.sent.name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;punkt&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.tokenizer.sent.name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    SentTokenizer package name [punkt]</span>\n<span class=\"s2\">    Default is &#39;punkt&#39; &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # Indexer&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.insert_char_start&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.indexer.insert_char_start&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; insert first start_token to tokens&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.insert_char_end&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.indexer.insert_char_end&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; append end_token to tokens&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--exact_match.lower&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.exact_match.indexer.lower&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; add lower case feature &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--exact_match.lemma&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.exact_match.indexer.lemma&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; add lemma case feature &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--linguistic.pos_tag&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.linguistic.indexer.pos_tag&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; add POS Tagging feature &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--linguistic.ner&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.linguistic.indexer.ner&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; add Named Entity Recognition feature &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--linguistic.dep&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.linguistic.indexer.dep&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; add Dependency Parser feature &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word.lowercase&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word.indexer.lowercase&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Apply word token to lowercase&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word.insert_start&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word.indexer.insert_start&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; insert first start_token to tokens&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word.insert_end&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word.indexer.insert_end&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; append end_token to tokens&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # Embedding&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.embed_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.embedding.embed_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of Embedding dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.kernel_sizes&quot;</span><span class=\"p\">,</span> <span class=\"n\">nargs</span><span class=\"o\">=</span><span class=\"s2\">&quot;+&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">],</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.embedding.kernel_sizes&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; CharCNN kernel_sizes (n-gram)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.num_filter&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.embedding.num_filter&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of CNN filter&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.activation&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;relu&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.embedding.activation&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; CharCNN activation Function (default: ReLU)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--char.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.char.embedding.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Embedding dropout prob (default: 0.2)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--cove.glove_pretrained_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.cove.embedding.glove_pretrained_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; CoVe&#39;s word embedding pretrained_path (GloVE 840B.300d)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--cove.model_pretrained_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.cove.embedding.model_pretrained_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; CoVe Model pretrained_path &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--cove.trainable&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.cove.embedding.trainable&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; CoVe Embedding Trainable&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--cove.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.cove.embedding.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Embedding dropout prob (default: 0.2)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--cove.project_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.cove.embedding.project_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of projection dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--elmo.options_file&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;elmo_2x4096_512_2048cnn_2xhighway_options.json&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.elmo.embedding.options_file&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The option file path of ELMo&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--elmo.weight_file&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.elmo.embedding.weight_file&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The weight file path of ELMo&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--elmo.trainable&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.elmo.embedding.trainable&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; elmo Embedding Trainable&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--elmo.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.elmo.embedding.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Embedding dropout prob (default: 0.5)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--elmo.project_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.elmo.embedding.project_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of projection dimension (default is None)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word_permeability.memory_clip&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word_permeability.embedding.memory_clip&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of memory cell clip value &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word_permeability.proj_clip&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word_permeability.embedding.proj_clip&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of p clip value after projection &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word_permeability.embed_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1024</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word_permeability.embedding.embed_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of Embedding dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word_permeability.linear_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word_permeability.embedding.linear_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of linear projection dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word_permeability.trainable&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word_permeability.embedding.trainable&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; word_permeability Embedding Trainable &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word_permeability.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word_permeability.embedding.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Embedding dropout prob (default: 0.5)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word_permeability.activation&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;tanh&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word_permeability.embedding.activation&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Activation Function (default is &#39;tanh&#39;) &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word_permeability.bidirectional&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word_permeability.embedding.bidirectional&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; bidirectional use or not ([forward;backward]) (default is False) &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--frequent_word.embed_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.frequent_word.embedding.embed_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of Embedding dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--frequent_word.pretrained_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.frequent_word.embedding.pretrained_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Add pretrained Word vector model&#39;s path. (support file format like Glove)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--frequent_word.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.frequent_word.embedding.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Embedding dropout prob (default: 0.2)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word.embed_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word.embedding.embed_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of Embedding dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word.pretrained_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word.embedding.pretrained_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Add pretrained word vector model&#39;s path. (support file format like Glove)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word.trainable&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word.embedding.trainable&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Word Embedding Trainable&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--word.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;token.word.embedding.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Embedding dropout prob (default: 0.2)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"model\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.model\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">model</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">):</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Model&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;bidaf&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n\n<span class=\"s2\">    Pre-defined model</span>\n\n<span class=\"s2\">    * Reading Comprehension</span>\n<span class=\"s2\">      [bert_for_qa|bidaf|bidaf_no_answer|docqa|docqa_no_answer|dclaf|qanet|simple]</span>\n\n<span class=\"s2\">    * Regression</span>\n<span class=\"s2\">      [bert_for_reg|roberta_for_reg]</span>\n\n<span class=\"s2\">    * Semantic Parsing</span>\n<span class=\"s2\">      [sqlnet]</span>\n\n<span class=\"s2\">    * Sequence Classification</span>\n<span class=\"s2\">      [bert_for_seq_cls|roberta_for_seq_cls|structured_self_attention]</span>\n\n<span class=\"s2\">    * Token Classification</span>\n<span class=\"s2\">      [bert_for_tok_cls]</span>\n<span class=\"s2\">    &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">reading_comprehension_title</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;ㅁReading Comprehension&quot;</span>\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{reading_comprehension_title}</span><span class=\"se\">\\n</span><span class=\"s2\"> # BERT for QuestionAnswering&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bert_for_qa.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bert_for_qa.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; A str with the name of a pre-trained model to load selected in the list of (default: None):</span>\n<span class=\"s2\">                    . `bert-base-uncased`</span>\n<span class=\"s2\">                    . `bert-large-uncased`</span>\n<span class=\"s2\">                    . `bert-base-cased`</span>\n<span class=\"s2\">                    . `bert-base-multilingual`</span>\n<span class=\"s2\">                    . `bert-base-chinese` &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bert_for_qa.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bert_for_qa.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum answer&#39;s length (default: None)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot; # RoBERTa&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--roberta_for_qa.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.roberta_for_qa.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; A str with the name of a pre-trained model to load selected in the list of (default: None):</span>\n<span class=\"s2\">                    . `roberta-base`</span>\n<span class=\"s2\">                    . `roberta-large` &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--roberta_for_qa.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.roberta_for_qa.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum answer&#39;s length (default: None)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot; # BiDAF&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Aligned Question Embedding  (default: False)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum answer&#39;s length (default: None)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of BiDAF model dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf.contextual_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf.contextual_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of BiDAF model contextual_rnn&#39;s recurrent layers&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf.modeling_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf.modeling_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of BiDAF model modeling_rnn&#39;s recurrent layers&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf.predict_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf.predict_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of BiDAF model predict_rnn&#39;s recurrent layers&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of BiDAF dropout&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # BiDAF + Simple bias&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf_no_answer.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf_no_answer.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Aligned Question Embedding  (default: False)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf_no_answer.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf_no_answer.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum answer&#39;s length (default: None)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf_no_answer.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf_no_answer.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of BiDAF model dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf_no_answer.contextual_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf_no_answer.contextual_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of BiDAF model contextual_rnn&#39;s recurrent layers&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf_no_answer.modeling_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf_no_answer.modeling_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of BiDAF model modeling_rnn&#39;s recurrent layers&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf_no_answer.predict_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf_no_answer.predict_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of BiDAF model predict_rnn&#39;s recurrent layers&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bidaf_no_answer.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bidaf_no_answer.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of BiDAF dropout&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # Simple&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--simple.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.simple.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum answer&#39;s length (default: None)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--simple.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.simple.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of Simple model dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--simple.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.simple.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of Simple dropout&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # QANet&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Aligned Question Embedding  (default: False)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum answer&#39;s length (default: 30)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of QANet model dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.kernel_size_in_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.kernel_size_in_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of QANet model Embed Encoder kernel_size&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.num_head_in_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.num_head_in_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of QANet model Multi-Head Attention&#39;s head in Embedding Block&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.num_conv_block_in_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.num_conv_block_in_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of QANet model Conv Blocks in Embedding Block&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.num_embedding_encoder_block&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.num_embedding_encoder_block&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of QANet model Embedding Encoder Blocks&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.kernel_size_in_modeling&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.kernel_size_in_modeling&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of QANet model Model Encoder kernel_size&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.num_head_in_modeling&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.num_head_in_modeling&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of QANet model Multi-Head Attention&#39;s head in Modeling Block&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.num_conv_block_in_modeling&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.num_conv_block_in_modeling&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of QANet model Conv Blocks in Modeling Block&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.num_modeling_encoder_block&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.num_modeling_encoder_block&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of QANet model Modeling Encoder Blocks&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.layer_dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.9</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.layer_dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of QANet model layer dropout&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--qanet.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.qanet.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of QANet dropout&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # DocQA&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Aligned Question Embedding  (default: False)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">17</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum answer&#39;s length (default: 17)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa.rnn_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa.rnn_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of DocQA model rnn dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa.linear_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa.linear_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of DocQA model linear dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa.preprocess_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa.preprocess_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of DocQA model preprocess_rnn&#39;s recurrent layers&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa.modeling_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa.modeling_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of DocQA model modeling_rnn&#39;s recurrent layers&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa.predict_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa.predict_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of DocQA model predict_rnn&#39;s recurrent layers&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of DocQA dropout&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa.weight_init&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa.weight_init&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Weight Init&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # DocQA + No_Answer Option&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa_no_answer.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa_no_answer.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Aligned Question Embedding  (default: False)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa_no_answer.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">17</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa_no_answer.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum answer&#39;s length (default: None)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa_no_answer.rnn_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa_no_answer.rnn_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of docqa_no_answer model rnn dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa_no_answer.linear_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa_no_answer.linear_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of docqa_no_answer model linear dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa_no_answer.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa_no_answer.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of QANet dropout&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--docqa_no_answer.weight_init&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.docqa_no_answer.weight_init&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Weight Init&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # DrQA&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--drqa.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.drqa.aligned_query_embedding&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Aligned Question Embedding  (default: True)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--drqa.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.drqa.answer_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum answer&#39;s length (default: None)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--drqa.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.drqa.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of document reader model dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--drqa.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.3</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.drqa.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of document reader model dropout&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n\n    <span class=\"n\">regression_title</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;ㅁRegression&quot;</span>\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{regression_title}</span><span class=\"se\">\\n</span><span class=\"s2\"> # BERT for Regression&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bert_for_reg.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bert_for_reg.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; A str with the name of a pre-trained model to load selected in the list of (default: None):</span>\n<span class=\"s2\">                    . `bert-base-uncased`</span>\n<span class=\"s2\">                    . `bert-large-uncased`</span>\n<span class=\"s2\">                    . `bert-base-cased`</span>\n<span class=\"s2\">                    . `bert-base-multilingual`</span>\n<span class=\"s2\">                    . `bert-base-chinese` &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bert_for_reg.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bert_for_reg.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of fc layer dropout &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot; # RoBERTa&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--roberta_for_reg.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.roberta_for_reg.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; A str with the name of a pre-trained model to load selected in the list of (default: None):</span>\n<span class=\"s2\">                    . `roberta-base`</span>\n<span class=\"s2\">                    . `roberta-large` &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--roberta_for_reg.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.roberta_for_reg.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of fc layer dropout &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n\n    <span class=\"n\">semantic_parsing_title</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;ㅁSemantic Parsing&quot;</span>\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{semantic_parsing_title}</span><span class=\"se\">\\n</span><span class=\"s2\"> # SQLNet&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sqlnet.column_attention&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.sqlnet.column_attention&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Compute attention map on a question conditioned on the column names (default: True)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sqlnet.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.sqlnet.model_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of document reader model dimension&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sqlnet.rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.sqlnet.rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of SQLNet model rnn&#39;s recurrent layers&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sqlnet.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.3</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.sqlnet.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of model dropout &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sqlnet.column_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.sqlnet.column_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of maximum column&#39;s length (default: 4)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sqlnet.token_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.sqlnet.token_maxlen&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; An upper-bound N on the number of decoder tokeni &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sqlnet.conds_column_loss_alpha&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.3</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.sqlnet.conds_column_loss_alpha&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; balance the positive data versus negative data &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">sequence_classification_title</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;ㅁSequence Classification&quot;</span>\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{sequence_classification_title}</span><span class=\"se\">\\n</span><span class=\"s2\"> # BERT for Sequence Classification&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bert_for_seq_cls.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bert_for_seq_cls.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; A str with the name of a pre-trained model to load selected in the list of (default: None):</span>\n<span class=\"s2\">                    . `bert-base-uncased`</span>\n<span class=\"s2\">                    . `bert-large-uncased`</span>\n<span class=\"s2\">                    . `bert-base-cased`</span>\n<span class=\"s2\">                    . `bert-base-multilingual`</span>\n<span class=\"s2\">                    . `bert-base-chinese` &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bert_for_seq_cls.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bert_for_seq_cls.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of fc layer dropout &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot; # RoBERTa&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--roberta_for_seq_cls.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.roberta_for_seq_cls.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; A str with the name of a pre-trained model to load selected in the list of (default: None):</span>\n<span class=\"s2\">                    . `roberta-base`</span>\n<span class=\"s2\">                    . `roberta-large` &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--roberta_for_seq_cls.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.roberta_for_seq_cls.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of fc layer dropout &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{sequence_classification_title}</span><span class=\"se\">\\n</span><span class=\"s2\"> # Structured Self Attention&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--structured_self_attention.token_encoder&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;bilstm&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.structured_self_attention.token_encoder&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Token encoder type [none|bilstm] &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--structured_self_attention.encoding_rnn_hidden_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">600</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.structured_self_attention.encoding_rnn_hidden_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of hidden dimension for each token &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--structured_self_attention.encoding_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.structured_self_attention.encoding_rnn_num_layer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of layers of token encoding rnn &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--structured_self_attention.encoding_rnn_dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.structured_self_attention.encoding_rnn_dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of token encoding rnn dropout (between layers) &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--structured_self_attention.attention_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">350</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.structured_self_attention.attention_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of embedding dimension for attention &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--structured_self_attention.num_attention_heads&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.structured_self_attention.num_attention_heads&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of rows for attention (attention heads) &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--structured_self_attention.project_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">2000</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.structured_self_attention.project_dim&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of bottleneck layer embedding dimension &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--structured_self_attention.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.structured_self_attention.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of bottleneck-making fnn dropout &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--structured_self_attention.penalization_coefficient&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1.</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.structured_self_attention.penalization_coefficient&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The coefficient of penalization term &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">token_classification_title</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;ㅁToken Classification&quot;</span>\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{token_classification_title}</span><span class=\"se\">\\n</span><span class=\"s2\"> # BERT for Token Classification&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bert_for_tok_cls.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bert_for_tok_cls.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; A str with the name of a pre-trained model to load selected in the list of (default: None):</span>\n<span class=\"s2\">                    . `bert-base-uncased`</span>\n<span class=\"s2\">                    . `bert-large-uncased`</span>\n<span class=\"s2\">                    . `bert-base-cased`</span>\n<span class=\"s2\">                    . `bert-base-multilingual`</span>\n<span class=\"s2\">                    . `bert-base-chinese` &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--bert_for_tok_cls.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.bert_for_tok_cls.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of fc layer dropout &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot; # RoBERTa&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--roberta_for_tok_cls.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.roberta_for_tok_cls.pretrained_model_name&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; A str with the name of a pre-trained model to load selected in the list of (default: None):</span>\n<span class=\"s2\">                    . `roberta-base`</span>\n<span class=\"s2\">                    . `roberta-large` &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--roberta_for_tok_cls.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;model.roberta_for_tok_cls.dropout&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The prob of fc layer dropout &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"nsml_for_internal\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.nsml_for_internal\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">nsml_for_internal</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">):</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;NSML&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--pause&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;nsml.pause&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; NSML default setting&quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--iteration&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;nsml.iteration&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Start from NSML epoch count&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"trainer\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.trainer\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">trainer</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">):</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Trainer&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--num_epochs&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;trainer.num_epochs&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of training epochs&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--patience&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;trainer.early_stopping_threshold&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of early stopping threshold&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--metric_key&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;em&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;trainer.metric_key&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The key of metric for model&#39;s score&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--verbose_step_count&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;trainer.verbose_step_count&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of training verbose&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--eval_and_save_step_count&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;trainer.eval_and_save_step_count&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The number of save and evaluate step_count (e.g. &#39;epoch&#39; or 1000)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--save_checkpoint&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;trainer.save_checkpoint&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; The boolean value of save checkpoint&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--log_dir&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;logs/experiment_1&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;trainer.log_dir&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; TensorBoard and Checkpoint log directory&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Gradient&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--grad_max_norm&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;trainer.grad_max_norm&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Clips gradient norm of an iterable of parameters. (Default: None)&quot;&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Optimizer&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--optimizer_type&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;adam&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.op_type&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Optimizer</span>\n<span class=\"s2\">    (https://pytorch.org/docs/stable/optim.html#algorithms)</span>\n\n<span class=\"s2\">    - adadelta: ADADELTA: An Adaptive Learning Rate Method</span>\n<span class=\"s2\">        (https://arxiv.org/abs/1212.5701)</span>\n<span class=\"s2\">    - adagrad: Adaptive Subgradient Methods for Online Learning and Stochastic Optimization</span>\n<span class=\"s2\">        (http://jmlr.org/papers/v12/duchi11a.html)</span>\n<span class=\"s2\">    - adam: Adam: A Method for Stochastic Optimization</span>\n<span class=\"s2\">        (https://arxiv.org/abs/1412.6980)</span>\n<span class=\"s2\">    - adamw: Adam: Adam algorithm with weight decay fix. (BertAdam)</span>\n<span class=\"s2\">    - sparse_adam: Implements lazy version of Adam algorithm suitable for sparse tensors.</span>\n<span class=\"s2\">        In this variant, only moments that show up in the gradient get updated,</span>\n<span class=\"s2\">        and only those portions of the gradient get applied to the parameters.</span>\n<span class=\"s2\">    - adamax: Implements Adamax algorithm (a variant of Adam based on infinity norm).</span>\n<span class=\"s2\">    - averaged_sgd: Acceleration of stochastic approximation by averaging</span>\n<span class=\"s2\">        (http://dl.acm.org/citation.cfm?id=131098)</span>\n<span class=\"s2\">    - rmsprop: Implements RMSprop algorithm.</span>\n<span class=\"s2\">        (https://arxiv.org/pdf/1308.0850v5.pdf)</span>\n<span class=\"s2\">    - rprop: Implements the resilient backpropagation algorithm.</span>\n<span class=\"s2\">    - sgd: Implements stochastic gradient descent (optionally with momentum).</span>\n<span class=\"s2\">        Nesterov momentum: (http://www.cs.toronto.edu/~hinton/absps/momentum.pdf)</span>\n\n<span class=\"s2\">    [adadelta|adagrad|adam|adamw|sparse_adam|adamax|averaged_sgd|rmsprop|rprop|sgd]&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--learning_rate&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.learning_rate&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Starting learning rate.</span>\n<span class=\"s2\">    Recommended settings: sgd = 1, adagrad = 0.1, adadelta = 1, adam = 0.001 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # Adadelta&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adadelta.rho&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.9</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adadelta.rho&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    coefficient used for computing a running average of squared gradients</span>\n<span class=\"s2\">    Default: 0.9 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adadelta.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1e-6</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adadelta.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    term added to the denominator to improve numerical stability</span>\n<span class=\"s2\">    Default: 1e-6 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adadelta.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span>\n        <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adadelta.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    weight decay (L2 penalty)</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # Adagrad&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adagrad.lr_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adagrad.lr_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    learning rate decay</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adagrad.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span>\n        <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adagrad.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    weight decay (L2 penalty)</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # Adam&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adam.betas&quot;</span><span class=\"p\">,</span> <span class=\"n\">nargs</span><span class=\"o\">=</span><span class=\"s2\">&quot;+&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mf\">0.9</span><span class=\"p\">,</span> <span class=\"mf\">0.999</span><span class=\"p\">],</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adam.betas&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    coefficients used for computing running averages of gradient and its square</span>\n<span class=\"s2\">    Default: (0.9, 0.999) &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adam.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1e-8</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adam.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    term added to the denominator to improve numerical stability</span>\n<span class=\"s2\">    Default: 1e-8 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adam.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span>\n        <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adam.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    weight decay (L2 penalty)</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # AdamW&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adamw.betas&quot;</span><span class=\"p\">,</span> <span class=\"n\">nargs</span><span class=\"o\">=</span><span class=\"s2\">&quot;+&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mf\">0.9</span><span class=\"p\">,</span> <span class=\"mf\">0.999</span><span class=\"p\">],</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adamw.betas&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    coefficients used for computing running averages of gradient and its square</span>\n<span class=\"s2\">    Default: (0.9, 0.999) &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adamw.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1e-6</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adamw.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    term added to the denominator to improve numerical stability</span>\n<span class=\"s2\">    Default: 1e-8 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adamw.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.0</span><span class=\"p\">,</span>\n        <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adamw.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    weight decay (L2 penalty)</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adamw.correct_bias&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adamw.correct_bias&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    can be set to False to avoid correcting bias in Adam (e.g. like in Bert TF repository).</span>\n<span class=\"s2\">    Default: True &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # SparseAdam&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sparse_adam.betas&quot;</span><span class=\"p\">,</span> <span class=\"n\">nargs</span><span class=\"o\">=</span><span class=\"s2\">&quot;+&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mf\">0.9</span><span class=\"p\">,</span> <span class=\"mf\">0.999</span><span class=\"p\">],</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.sparse_adam.betas&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    coefficients used for computing running averages of gradient and its square</span>\n<span class=\"s2\">    Default: (0.9, 0.999) &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sparse_adam.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1e-8</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.sparse_adam.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    term added to the denominator to improve numerical stability</span>\n<span class=\"s2\">    Default: 1e-8 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # Adamax&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adamax.betas&quot;</span><span class=\"p\">,</span> <span class=\"n\">nargs</span><span class=\"o\">=</span><span class=\"s2\">&quot;+&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mf\">0.9</span><span class=\"p\">,</span> <span class=\"mf\">0.999</span><span class=\"p\">],</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adamax.betas&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    coefficients used for computing running averages of gradient and its square.</span>\n<span class=\"s2\">    Default: (0.9, 0.999) &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adamax.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1e-8</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adamax.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    term added to the denominator to improve numerical stability.</span>\n<span class=\"s2\">    Default: 1e-8 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--adamax.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.adamax.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    weight decay (L2 penalty)</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # ASGD (Averaged Stochastic Gradient Descent)&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--averaged_sgd.lambd&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1e-4</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.averaged_sgd.lambd&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    decay term</span>\n<span class=\"s2\">    Default: 1e-4 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--averaged_sgd.alpha&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.75</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.averaged_sgd.alpha&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    power for eta update</span>\n<span class=\"s2\">    Default: 0.75 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--averaged_sgd.t0&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1e6</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.averaged_sgd.t0&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    point at which to start averaging</span>\n<span class=\"s2\">    Default: 1e6 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--averaged_sgd.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.averaged_sgd.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    weight decay (L2 penalty)</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # RMSprop&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--rmsprop.momentum&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.rmsprop.momentum&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    momentum factor</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--rmsprop.alpha&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.99</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.rmsprop.alpha&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    smoothing constant</span>\n<span class=\"s2\">    Default: 0.99 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--rmsprop.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1e-8</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.rmsprop.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    term added to the denominator to improve numerical stability.</span>\n<span class=\"s2\">    Default: 1e-8 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--rmsprop.centered&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.rmsprop.centered&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    if True, compute the centered RMSProp,</span>\n<span class=\"s2\">    the gradient is normalized by an estimation of its variance</span>\n<span class=\"s2\">    Default: False &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--rmsprop.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.rmsprop.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    weight decay (L2 penalty)</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # SGD (Stochastic Gradient Descent)&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sgd.momentum&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.sgd.momentum&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    momentum factor</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sgd.dampening&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.sgd.dampening&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    dampening for momentum</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sgd.nesterov&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"n\">arg_str2bool</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.sgd.nesterov&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    enables Nesterov momentum</span>\n<span class=\"s2\">    Default: False &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--sgd.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.sgd.weight_decay&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    weight decay (L2 penalty)</span>\n<span class=\"s2\">    Default: 0 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Learning Rate Scheduler&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--lr_scheduler_type&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.lr_scheduler_type&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;Learning Rate Schedule</span>\n<span class=\"s2\">    (https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate) </span><span class=\"se\">\\n</span><span class=\"s2\"></span>\n\n<span class=\"s2\">    - lambda: Sets the learning rate of each parameter group to the</span>\n<span class=\"s2\">        initial lr times a given function.</span>\n<span class=\"s2\">    - step: Sets the learning rate of each parameter group to the</span>\n<span class=\"s2\">        initial lr decayed by gamma every step_size epochs.</span>\n<span class=\"s2\">    - multi_step: Set the learning rate of each parameter group to</span>\n<span class=\"s2\">        the initial lr decayed by gamma once the number of epoch</span>\n<span class=\"s2\">        reaches one of the milestones.</span>\n<span class=\"s2\">    - exponential: Set the learning rate of each parameter group to</span>\n<span class=\"s2\">        the initial lr decayed by gamma every epoch.</span>\n<span class=\"s2\">    - cosine: Set the learning rate of each parameter group using</span>\n<span class=\"s2\">        a cosine annealing schedule, where ηmax is set to the initial</span>\n<span class=\"s2\">        lr and Tcur is the number of epochs since the last restart in SGDR:</span>\n<span class=\"s2\">        SGDR: Stochastic Gradient Descent with Warm Restarts</span>\n<span class=\"s2\">        (https://arxiv.org/abs/1608.03983)</span>\n<span class=\"s2\">    When last_epoch=-1, sets initial lr as lr.</span>\n\n<span class=\"s2\">    - reduce_on_plateau: Reduce learning rate when a metric has</span>\n<span class=\"s2\">        stopped improving. Models often benefit from reducing the</span>\n<span class=\"s2\">        learning rate by a factor of 2-10 once learning stagnates.</span>\n<span class=\"s2\">        This scheduler reads a metrics quantity and if no improvement</span>\n<span class=\"s2\">        is seen for a ‘patience’ number of epochs, the learning rate is reduced.</span>\n<span class=\"s2\">    - warmup_constant: Linear warmup and then constant.</span>\n<span class=\"s2\">        Linearly increases learning rate schedule from 0 to 1 over `warmup_steps` training steps.</span>\n<span class=\"s2\">        Keeps learning rate schedule equal to 1. after warmup_steps.</span>\n<span class=\"s2\">    - warmup_linear: Linear warmup and then linear decay.</span>\n<span class=\"s2\">        Linearly increases learning rate from 0 to 1 over `warmup_steps` training steps.</span>\n<span class=\"s2\">        Linearly decreases learning rate from 1. to 0. over remaining `t_total - warmup_steps` steps.</span>\n<span class=\"s2\">    - warmup_consine: Linear warmup and then cosine decay.</span>\n<span class=\"s2\">        Linearly increases learning rate from 0 to 1 over `warmup_steps` training steps.</span>\n<span class=\"s2\">        Decreases learning rate from 1. to 0. over remaining `t_total - warmup_steps` steps following a cosine curve.</span>\n<span class=\"s2\">        If `cycles` (default=0.5) is different from default, learning rate follows cosine function after warmup.</span>\n<span class=\"s2\">    - warmup_consine_with_hard_restart: Linear warmup and then cosine cycles with hard restarts.</span>\n<span class=\"s2\">        Linearly increases learning rate from 0 to 1 over `warmup_steps` training steps.</span>\n<span class=\"s2\">        If `cycles` (default=1.) is different from default, learning rate follows `cycles` times a cosine decaying</span>\n<span class=\"s2\">        learning rate (with hard restarts).</span>\n\n<span class=\"s2\">    [step|multi_step|exponential|reduce_on_plateau|cosine|</span>\n<span class=\"s2\">        warmup_constant|warmup_linear|warmup_consine|warmup_consine_with_hard_restart]</span>\n<span class=\"s2\">        &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # StepLR&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--step.step_size&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.step.step_size&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Period of learning rate decay.</span>\n<span class=\"s2\">    Default: 1&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--step.gamma&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.step.gamma&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Multiplicative factor of learning rate decay.</span>\n<span class=\"s2\">    Default: 0.1. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--step.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.step.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The index of last epoch.</span>\n<span class=\"s2\">    Default: -1. &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # MultiStepLR&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--multi_step.milestones&quot;</span><span class=\"p\">,</span> <span class=\"n\">nargs</span><span class=\"o\">=</span><span class=\"s2\">&quot;+&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.multi_step.milestones&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    List of epoch indices. Must be increasing</span>\n<span class=\"s2\">    list of int&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--multi_step.gamma&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.multi_step.gamma&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Multiplicative factor of learning rate decay.</span>\n<span class=\"s2\">    Default: 0.1. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--multi_step.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.multi_step.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The index of last epoch.</span>\n<span class=\"s2\">    Default: -1. &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # ExponentialLR&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--exponential.gamma&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.exponential.gamma&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Multiplicative factor of learning rate decay.</span>\n<span class=\"s2\">    Default: 0.1. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--exponential.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.exponential.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The index of last epoch.</span>\n<span class=\"s2\">    Default: -1. &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # CosineAnnealingLR&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--cosine.T_max&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.cosine.T_max&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Maximum number of iterations.</span>\n<span class=\"s2\">    Default: 50&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--cosine.eta_min&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.cosine.eta_min&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Minimum learning rate.</span>\n<span class=\"s2\">    Default: 0. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--cosine.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.cosine.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The index of last epoch.</span>\n<span class=\"s2\">    Default: -1. &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # ReduceLROnPlateau&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--reduce_on_plateau.factor&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">0.1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.reduce_on_plateau.factor&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Factor by which the learning rate will be reduced. new_lr = lr * factor. Default: 0.1. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--reduce_on_plateau.mode&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;min&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.reduce_on_plateau.mode&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    One of `min`, `max`. In `min` mode, lr will</span>\n<span class=\"s2\">    be reduced when the quantity monitored has stopped</span>\n<span class=\"s2\">    decreasing; in `max` mode it will be reduced when the</span>\n<span class=\"s2\">    quantity monitored has stopped increasing.</span>\n<span class=\"s2\">    Default: &#39;min&#39;. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--reduce_on_plateau.patience&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.reduce_on_plateau.patience&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Number of epochs with no improvement after which learning rate will be reduced.</span>\n<span class=\"s2\">    Default: 10. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--reduce_on_plateau.threshold&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1e-4</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.reduce_on_plateau.threshold&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Threshold for measuring the new optimum, to only focus on significant changes.</span>\n<span class=\"s2\">    Default: 1e-4 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--reduce_on_plateau.threshold_mode&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s2\">&quot;rel&quot;</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.reduce_on_plateau.threshold_mode&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    One of rel, abs. In rel mode, dynamic_threshold = best * ( 1 + threshold ) in ‘max’ mode or</span>\n<span class=\"s2\">    best * ( 1 - threshold ) in min mode. In abs mode, dynamic_threshold = best + threshold</span>\n<span class=\"s2\">    in max mode or best - threshold in min mode.</span>\n<span class=\"s2\">    Default: ‘rel’. &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--reduce_on_plateau.cooldown&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.reduce_on_plateau.cooldown&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Number of epochs to wait before resuming normal operation after lr has been reduced.</span>\n<span class=\"s2\">    Default: 0. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--reduce_on_plateau.min_lr&quot;</span><span class=\"p\">,</span> <span class=\"n\">nargs</span><span class=\"o\">=</span><span class=\"s2\">&quot;+&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.reduce_on_plateau.min_lr&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    A scalar or a list of scalars. A lower bound on the learning rate of</span>\n<span class=\"s2\">    all param groups or each group respectively.</span>\n<span class=\"s2\">    Default: 0. &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--reduce_on_plateau.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1e-8</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.reduce_on_plateau.eps&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Minimal decay applied to lr. If the difference between new and</span>\n<span class=\"s2\">    old lr is smaller than eps, the update is ignored.</span>\n<span class=\"s2\">    Default: 1e-8 &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # WarmUp Constant&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--warmup_constant.warmup_steps&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.warmup_constant.warmup_steps&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The number of steps to increase the learning rate from 0 to 1.</span>\n<span class=\"s2\">    Default: None &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--warmup_constant.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.warmup_constant.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The index of last epoch.</span>\n<span class=\"s2\">    Default: -1. &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # WarmUp Linear&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--warmup_linear.warmup_steps&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.warmup_linear.warmup_steps&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The number of steps to increase the learning rate from 0 to 1.</span>\n<span class=\"s2\">    Default: None &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--warmup_linear_warmup_proportion&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.warmup_linear.warmup_proportion&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The number of steps (proportion of total_step) to increase the learning rate from 0 to 1.</span>\n<span class=\"s2\">    Default: None &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--warmup_linear.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.warmup_linear.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The index of last epoch.</span>\n<span class=\"s2\">    Default: -1. &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # WarmUp Cosine&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--warmup_cosine.warmup_steps&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.warmup_cosine.warmup_steps&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The number of steps to increase the learning rate from 0 to 1.</span>\n<span class=\"s2\">    Default: None &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--warmup_cosine.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.warmup_cosine.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The index of last epoch.</span>\n<span class=\"s2\">    Default: -1. &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--warmup_cosine.cycles&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=.</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.warmup_cosine.cycles&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    If `cycles` is different from default, learning rate follows cosine function after warmup</span>\n<span class=\"s2\">    Default: .5 &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;  # WarmUp Cosine with hard restarts&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--warmup_cosine_with_hard_restart.warmup_steps&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.warmup_cosine_with_hard_restart.warmup_steps&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The number of steps to increase the learning rate from 0 to 1.</span>\n<span class=\"s2\">    Default: None &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--warmup_cosine_with_hard_restart.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.warmup_cosine_with_hard_restart.last_epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    The index of last epoch.</span>\n<span class=\"s2\">    Default: -1. &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--warmup_cosine_with_hard_restart.cycles&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1.</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.warmup_cosine_with_hard_restart.cycles&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    If `cycles` is different from default, learning rate follows cosine_with_hard_restart function after warmup</span>\n<span class=\"s2\">    Default: 1. &quot;&quot;&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Exponential Moving Average&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--ema&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;optimizer.exponential_moving_average&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Exponential Moving Average</span>\n<span class=\"s2\">    Default: None (don&#39;t use)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"base_config\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.base_config\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">base_config</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">):</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Base Config&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--base_config&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;base_config&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Use pre-defined base_config:</span>\n<span class=\"s2\">    {_get_define_config()}</span>\n\n\n<span class=\"s2\">    * CoNLL 2003:</span>\n<span class=\"s2\">    {_get_define_config(category=&#39;conll2003&#39;)}</span>\n\n<span class=\"s2\">    * GLUE:</span>\n<span class=\"s2\">    {_get_define_config(category=&#39;glue&#39;)}</span>\n\n<span class=\"s2\">    * KorQuAD:</span>\n<span class=\"s2\">    {_get_define_config(category=&#39;korquad&#39;)}</span>\n\n<span class=\"s2\">    * SQuAD:</span>\n<span class=\"s2\">    {_get_define_config(category=&#39;squad&#39;)}</span>\n\n<span class=\"s2\">    * WikiSQL:</span>\n<span class=\"s2\">    {_get_define_config(category=&#39;wikisql&#39;)}</span>\n<span class=\"s2\">    &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span></div>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_get_define_config</span><span class=\"p\">(</span><span class=\"n\">category</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">config_dir</span><span class=\"o\">=</span><span class=\"s2\">&quot;base_config&quot;</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">category</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">config_dir</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">config_dir</span><span class=\"p\">,</span> <span class=\"n\">category</span><span class=\"p\">)</span>\n\n    <span class=\"n\">config_files</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">config_path</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;.json&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">config_path</span> <span class=\"ow\">in</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">listdir</span><span class=\"p\">(</span><span class=\"n\">config_dir</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">config_path</span><span class=\"o\">.</span><span class=\"n\">endswith</span><span class=\"p\">(</span><span class=\"s2\">&quot;.json&quot;</span><span class=\"p\">)</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">category</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">config_files</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">category</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/&quot;</span> <span class=\"o\">+</span> <span class=\"n\">fname</span> <span class=\"k\">for</span> <span class=\"n\">fname</span> <span class=\"ow\">in</span> <span class=\"n\">config_files</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"n\">config_files</span>\n\n\n<div class=\"viewcode-block\" id=\"evaluate\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.evaluate\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">evaluate</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">):</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Run evaluate&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;data_file_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot; Path to the file containing the evaluation data&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;checkpoint_path&quot;</span><span class=\"p\">,</span> <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;Path to an checkpoint trained model&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--infer&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;inference_latency&quot;</span><span class=\"p\">,</span> <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Evaluate with inference-latency with maximum value (ms)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--prev_cuda_device_id&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;prev_cuda_device_id&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Previous cuda device id (need to mapping)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"predict\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.predict\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">predict</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">):</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Run inference&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;checkpoint_path&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot; Path to an checkpoint trained model&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;-i&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;--interactive&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;interactive&quot;</span><span class=\"p\">,</span> <span class=\"n\">action</span><span class=\"o\">=</span><span class=\"s2\">&quot;store_true&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Interactive Mode &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--prev_cuda_device_id&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;prev_cuda_device_id&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Previous cuda device id (need to mapping)&quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;--question&quot;</span><span class=\"p\">,</span>\n                       <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">,</span>\n                       <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Input Question (required)&quot;&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # Reading Comprehension&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;--context&quot;</span><span class=\"p\">,</span>\n                       <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">,</span>\n                       <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Input Context &quot;&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # Semantic Parsing&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;--column&quot;</span><span class=\"p\">,</span> <span class=\"n\">nargs</span><span class=\"o\">=</span><span class=\"s2\">&quot;+&quot;</span><span class=\"p\">,</span>\n                       <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;column&quot;</span><span class=\"p\">,</span>\n                       <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Input Database Columns &quot;&quot;&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;--db_path&quot;</span><span class=\"p\">,</span>\n                       <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;db_path&quot;</span><span class=\"p\">,</span>\n                       <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Input Database file path &quot;&quot;&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;--table_id&quot;</span><span class=\"p\">,</span>\n                       <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">,</span>\n                       <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Input Database Table Id &quot;&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # Document Retrieval&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;--doc_path&quot;</span><span class=\"p\">,</span>\n                       <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;doc_path&quot;</span><span class=\"p\">,</span>\n                       <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Document file Path &quot;&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--retrieval&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;doc_retrieval&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Document Retrieval Model [tfidf] &quot;&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;--k&quot;</span><span class=\"p\">,</span>\n                       <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;top_k&quot;</span><span class=\"p\">,</span>\n                       <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Return Top K results &quot;&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot; # Sequence/Token Classification&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;--sequence&quot;</span><span class=\"p\">,</span>\n                       <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">,</span>\n                       <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot; Input Sequence &quot;&quot;&quot;</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"machine\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.args.machine\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">machine</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">):</span>\n\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument_group</span><span class=\"p\">(</span><span class=\"s2\">&quot;Machine Config&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--machine_config&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s2\">&quot;machine_config&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"s2\">&quot;&quot;&quot;</span><span class=\"se\">\\</span>\n<span class=\"s2\">    Use pre-defined machine_config (.json)</span>\n\n<span class=\"s2\">    {_get_define_config(config_dir=&quot;./machine_config&quot;)}</span>\n<span class=\"s2\">    &quot;&quot;&quot;</span><span class=\"p\">)</span></div>\n\n<span class=\"c1\"># fmt: on</span>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/config/factory/base.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.factory.base &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.config.factory.base</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.config.factory.base</h1><div class=\"highlight\"><pre>\n<div class=\"viewcode-block\" id=\"Factory\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.base.Factory\">[docs]</a><span></span><span class=\"k\">class</span> <span class=\"nc\">Factory</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Factory Base Class</span>\n\n<span class=\"sd\">    Factory method pattern</span>\n\n<span class=\"sd\">    In class-based programming, the factory method pattern is a creational pattern that</span>\n<span class=\"sd\">    uses factory methods to deal with the problem of creating objects without having to</span>\n<span class=\"sd\">    specify the exact class of the object that will be created. This is done by creating</span>\n<span class=\"sd\">    objects by calling a factory method—either specified in an interface and implemented</span>\n<span class=\"sd\">    by child classes, or implemented in a base class and optionally overridden by derived</span>\n<span class=\"sd\">    classes—rather than by calling a constructor.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">pass</span>\n\n<div class=\"viewcode-block\" id=\"Factory.create\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.base.Factory.create\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">create</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; interface &quot;&quot;&quot;</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/config/factory/data_loader.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.factory.data_loader &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.config.factory.data_loader</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.config.factory.data_loader</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">torch.utils.data</span> <span class=\"k\">import</span> <span class=\"n\">DataLoader</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">Factory</span>\n\n\n<div class=\"viewcode-block\" id=\"make_data_loader\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.data_loader.make_data_loader\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">make_data_loader</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"n\">batch_size</span><span class=\"o\">=</span><span class=\"mi\">32</span><span class=\"p\">,</span> <span class=\"n\">shuffle</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"n\">is_cpu</span> <span class=\"o\">=</span> <span class=\"n\">cuda_device_id</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">DataLoader</span><span class=\"p\">(</span>\n        <span class=\"n\">dataset</span><span class=\"p\">,</span>\n        <span class=\"n\">batch_size</span><span class=\"o\">=</span><span class=\"n\">batch_size</span><span class=\"p\">,</span>\n        <span class=\"n\">shuffle</span><span class=\"o\">=</span><span class=\"n\">shuffle</span><span class=\"p\">,</span>\n        <span class=\"n\">collate_fn</span><span class=\"o\">=</span><span class=\"n\">dataset</span><span class=\"o\">.</span><span class=\"n\">collate_fn</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">),</span>\n        <span class=\"n\">num_workers</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span>\n        <span class=\"n\">pin_memory</span><span class=\"o\">=</span><span class=\"n\">is_cpu</span><span class=\"p\">,</span>  <span class=\"c1\"># only CPU memory can be pinned</span>\n    <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"DataLoaderFactory\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.data_loader.DataLoaderFactory\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DataLoaderFactory</span><span class=\"p\">(</span><span class=\"n\">Factory</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    DataLoader Factory Class</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        config: data_loader config from argument (config.data_loader)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">batch_size</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">batch_size</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cuda_device_id</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cuda_device_id</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"DataLoaderFactory.create\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.data_loader.DataLoaderFactory.create\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">create</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">datasets</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; create train, valid and test iterator &quot;&quot;&quot;</span>\n        <span class=\"n\">dataset_key</span> <span class=\"o\">=</span> <span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"nb\">iter</span><span class=\"p\">(</span><span class=\"n\">datasets</span><span class=\"p\">))</span>\n        <span class=\"n\">dataset</span> <span class=\"o\">=</span> <span class=\"n\">datasets</span><span class=\"p\">[</span><span class=\"n\">dataset_key</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;unknown dataset.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">train_loader</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;train&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">datasets</span><span class=\"p\">:</span>\n            <span class=\"n\">train_loader</span> <span class=\"o\">=</span> <span class=\"n\">make_data_loader</span><span class=\"p\">(</span>\n                <span class=\"n\">datasets</span><span class=\"p\">[</span><span class=\"s2\">&quot;train&quot;</span><span class=\"p\">],</span>\n                <span class=\"n\">batch_size</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">batch_size</span><span class=\"p\">,</span>\n                <span class=\"n\">shuffle</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cuda_device_id</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"n\">valid_loader</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;valid&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">datasets</span><span class=\"p\">:</span>\n            <span class=\"n\">valid_loader</span> <span class=\"o\">=</span> <span class=\"n\">make_data_loader</span><span class=\"p\">(</span>\n                <span class=\"n\">datasets</span><span class=\"p\">[</span><span class=\"s2\">&quot;valid&quot;</span><span class=\"p\">],</span>\n                <span class=\"n\">batch_size</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">batch_size</span><span class=\"p\">,</span>\n                <span class=\"n\">shuffle</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n                <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cuda_device_id</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"n\">test_loader</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;test&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">datasets</span><span class=\"p\">:</span>\n            <span class=\"n\">test_loader</span> <span class=\"o\">=</span> <span class=\"n\">make_data_loader</span><span class=\"p\">(</span>\n                <span class=\"n\">datasets</span><span class=\"p\">[</span><span class=\"s2\">&quot;test&quot;</span><span class=\"p\">],</span>\n                <span class=\"n\">batch_size</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">batch_size</span><span class=\"p\">,</span>\n                <span class=\"n\">shuffle</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n                <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cuda_device_id</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">train_loader</span><span class=\"p\">,</span> <span class=\"n\">valid_loader</span><span class=\"p\">,</span> <span class=\"n\">test_loader</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/config/factory/data_reader.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.factory.data_reader &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.config.factory.data_reader</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.config.factory.data_reader</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.registry</span> <span class=\"k\">import</span> <span class=\"n\">Registry</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">Factory</span>\n\n\n<div class=\"viewcode-block\" id=\"DataReaderFactory\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.data_reader.DataReaderFactory\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DataReaderFactory</span><span class=\"p\">(</span><span class=\"n\">Factory</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    DataReader Factory Class</span>\n\n<span class=\"sd\">    Create Concrete reader according to config.dataset</span>\n<span class=\"sd\">    Get reader from reader registries (eg. @register(&quot;reader:{reader_name}&quot;))</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        config: data_reader config from argument (config.data_reader)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">registry</span> <span class=\"o\">=</span> <span class=\"n\">Registry</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dataset_name</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">dataset</span>\n        <span class=\"n\">file_paths</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;train_file_path&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"ow\">and</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">train_file_path</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">[</span><span class=\"s2\">&quot;train&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">train_file_path</span>\n        <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;valid_file_path&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"ow\">and</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">valid_file_path</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">[</span><span class=\"s2\">&quot;valid&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">valid_file_path</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reader_config</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;file_paths&quot;</span><span class=\"p\">:</span> <span class=\"n\">file_paths</span><span class=\"p\">}</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;params&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">config</span> <span class=\"ow\">and</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">params</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reader_config</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">params</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;tokenizers&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">config</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reader_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;tokenizers&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">tokenizers</span>\n\n        <span class=\"n\">dataset_config</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">dataset_config</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">dataset_config</span> <span class=\"o\">=</span> <span class=\"nb\">vars</span><span class=\"p\">(</span><span class=\"n\">dataset_config</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reader_config</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">dataset_config</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"DataReaderFactory.create\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.data_reader.DataReaderFactory.create\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">create</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">reader</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">registry</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;reader:{self.dataset_name.lower()}&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reader_config</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/config/factory/model.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.factory.model &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.config.factory.model</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.config.factory.model</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.registry</span> <span class=\"k\">import</span> <span class=\"n\">Registry</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithTokenEmbedder</span><span class=\"p\">,</span> <span class=\"n\">ModelWithoutTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.reading_comprehension.mixin</span> <span class=\"k\">import</span> <span class=\"n\">ReadingComprehension</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens</span> <span class=\"k\">import</span> <span class=\"n\">token_embedder</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">Factory</span>\n\n\n<div class=\"viewcode-block\" id=\"ModelFactory\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.model.ModelFactory\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ModelFactory</span><span class=\"p\">(</span><span class=\"n\">Factory</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Model Factory Class</span>\n\n<span class=\"sd\">    Create Concrete model according to config.model_name</span>\n<span class=\"sd\">    Get model from model registries (eg. @register(&quot;model:{model_name}&quot;))</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        config: model config from argument (config.model)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">registry</span> <span class=\"o\">=</span> <span class=\"n\">Registry</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">name</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_config</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_config</span> <span class=\"o\">=</span> <span class=\"nb\">vars</span><span class=\"p\">(</span><span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">))</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_independent</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;independent&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"ModelFactory.create\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.model.ModelFactory.create\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">create</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">params</span><span class=\"p\">):</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">registry</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;model:</span><span class=\"si\">{self.name}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">issubclass</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">ModelWithTokenEmbedder</span><span class=\"p\">):</span>\n            <span class=\"n\">token_embedder</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">create_token_embedder</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_embedder&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">issubclass</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">ModelWithoutTokenEmbedder</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_makers&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">token_makers</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;Model must have inheritance. (ModelWithTokenEmbedder or ModelWithoutTokenEmbedder)&quot;</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">model</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_config</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">params</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"ModelFactory.create_token_embedder\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.model.ModelFactory.create_token_embedder\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">create_token_embedder</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">):</span>\n        <span class=\"c1\"># 1. Specific case</span>\n        <span class=\"c1\"># ...</span>\n\n        <span class=\"c1\"># 2. Base case</span>\n        <span class=\"k\">if</span> <span class=\"nb\">issubclass</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">ReadingComprehension</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">token_embedder</span><span class=\"o\">.</span><span class=\"n\">RCTokenEmbedder</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">token_embedder</span><span class=\"o\">.</span><span class=\"n\">BasicTokenEmbedder</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/config/factory/optimizer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.factory.optimizer &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.config.factory.optimizer</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.config.factory.optimizer</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.namespace</span> <span class=\"k\">import</span> <span class=\"n\">NestedNamespace</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn.optimization.learning_rate_scheduler</span> <span class=\"k\">import</span> <span class=\"n\">get_lr_schedulers</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn.optimization.learning_rate_scheduler</span> <span class=\"k\">import</span> <span class=\"p\">(</span>\n    <span class=\"n\">LearningRateWithoutMetricsWrapper</span><span class=\"p\">,</span>\n    <span class=\"n\">LearningRateWithMetricsWrapper</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn.optimization.optimizer</span> <span class=\"k\">import</span> <span class=\"n\">get_optimizer_by_name</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.sequence_classification</span> <span class=\"k\">import</span> <span class=\"n\">BertForSeqCls</span><span class=\"p\">,</span> <span class=\"n\">RobertaForSeqCls</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">Factory</span>\n\n\n<div class=\"viewcode-block\" id=\"OptimizerFactory\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.optimizer.OptimizerFactory\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">OptimizerFactory</span><span class=\"p\">(</span><span class=\"n\">Factory</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Optimizer Factory Class</span>\n\n<span class=\"sd\">    include optimizer, learning_rate_scheduler and exponential_moving_average</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        config: optimizer config from argument (config.optimizer)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Optimizer</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">op_type</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">op_type</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">optimizer_params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;lr&quot;</span><span class=\"p\">:</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">learning_rate</span><span class=\"p\">}</span>\n\n        <span class=\"n\">op_config</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">op_type</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">op_config</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">op_config</span> <span class=\"o\">=</span> <span class=\"nb\">vars</span><span class=\"p\">(</span><span class=\"n\">op_config</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">optimizer_params</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">op_config</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># LearningRate Scheduler</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_type</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;lr_scheduler_type&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_type</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_config</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_type</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n            <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_config</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">NestedNamespace</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_config</span> <span class=\"o\">=</span> <span class=\"nb\">vars</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_config</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"s2\">&quot;warmup&quot;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_type</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;t_total&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">num_train_steps</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">set_warmup_steps</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># EMA</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ema</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;exponential_moving_average&quot;</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"OptimizerFactory.set_warmup_steps\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.optimizer.OptimizerFactory.set_warmup_steps\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">set_warmup_steps</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"n\">warmup_proportion</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;warmup_proportion&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n        <span class=\"n\">warmup_steps</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;warmup_steps&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">warmup_steps</span> <span class=\"ow\">and</span> <span class=\"n\">warmup_proportion</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Check &#39;warmup_steps&#39; and &#39;warmup_proportion&#39;.&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"n\">warmup_steps</span> <span class=\"ow\">and</span> <span class=\"n\">warmup_proportion</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;warmup_steps&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">num_train_steps</span> <span class=\"o\">*</span> <span class=\"n\">warmup_proportion</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n            <span class=\"k\">del</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;warmup_proportion&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"n\">warmup_steps</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">warmup_proportion</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Check &#39;warmup_steps&#39; and &#39;warmup_proportion&#39;.&quot;</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"OptimizerFactory.create\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.optimizer.OptimizerFactory.create\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">create</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">issubclass</span><span class=\"p\">(</span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">),</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;optimizer model is must be subclass of torch.nn.Module.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"s2\">&quot;use_pytorch_transformers&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n            <span class=\"n\">weight_decay</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">optimizer_params</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;weight_decay&quot;</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">)</span>\n            <span class=\"n\">model_parameters</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_group_parameters_for_transformers</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">weight_decay</span><span class=\"o\">=</span><span class=\"n\">weight_decay</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">model_parameters</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">param</span> <span class=\"k\">for</span> <span class=\"n\">param</span> <span class=\"ow\">in</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">parameters</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">param</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span><span class=\"p\">]</span>\n\n        <span class=\"n\">optimizer</span> <span class=\"o\">=</span> <span class=\"n\">get_optimizer_by_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">op_type</span><span class=\"p\">)(</span><span class=\"n\">model_parameters</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">optimizer_params</span><span class=\"p\">)</span>\n        <span class=\"n\">op_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">:</span> <span class=\"n\">optimizer</span><span class=\"p\">}</span>\n\n        <span class=\"c1\"># learning_rate_scheduler</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_type</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">op_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">lr_scheduler</span> <span class=\"o\">=</span> <span class=\"n\">get_lr_schedulers</span><span class=\"p\">()[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_type</span><span class=\"p\">](</span><span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_config</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lr_scheduler_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;reduce_on_plateau&quot;</span><span class=\"p\">:</span>\n                <span class=\"n\">lr_scheduler</span> <span class=\"o\">=</span> <span class=\"n\">LearningRateWithMetricsWrapper</span><span class=\"p\">(</span><span class=\"n\">lr_scheduler</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">lr_scheduler</span> <span class=\"o\">=</span> <span class=\"n\">LearningRateWithoutMetricsWrapper</span><span class=\"p\">(</span><span class=\"n\">lr_scheduler</span><span class=\"p\">)</span>\n\n            <span class=\"n\">op_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;learning_rate_scheduler&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">lr_scheduler</span>\n\n        <span class=\"c1\"># exponential_moving_average</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ema</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ema</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"n\">op_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;exponential_moving_average&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ema</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">op_dict</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_group_parameters_for_transformers</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">weight_decay</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Prepare optimizer</span>\n        <span class=\"n\">param_optimizer</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">named_parameters</span><span class=\"p\">())</span>\n\n        <span class=\"c1\"># hack to remove pooler, which is not used</span>\n        <span class=\"c1\"># thus it produce None grad that break apex</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">BertForSeqCls</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">RobertaForSeqCls</span><span class=\"p\">):</span>\n            <span class=\"n\">param_optimizer</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">n</span> <span class=\"k\">for</span> <span class=\"n\">n</span> <span class=\"ow\">in</span> <span class=\"n\">param_optimizer</span> <span class=\"k\">if</span> <span class=\"s2\">&quot;pooler&quot;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">n</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]]</span>\n\n        <span class=\"n\">no_decay</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;bias&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;LayerNorm.weight&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">optimizer_grouped_parameters</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;params&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"n\">p</span> <span class=\"k\">for</span> <span class=\"n\">n</span><span class=\"p\">,</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">param_optimizer</span> <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">any</span><span class=\"p\">(</span><span class=\"n\">nd</span> <span class=\"ow\">in</span> <span class=\"n\">n</span> <span class=\"k\">for</span> <span class=\"n\">nd</span> <span class=\"ow\">in</span> <span class=\"n\">no_decay</span><span class=\"p\">)],</span>\n                <span class=\"s2\">&quot;weight_decay&quot;</span><span class=\"p\">:</span> <span class=\"n\">weight_decay</span><span class=\"p\">,</span>\n            <span class=\"p\">},</span>\n            <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;params&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"n\">p</span> <span class=\"k\">for</span> <span class=\"n\">n</span><span class=\"p\">,</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">param_optimizer</span> <span class=\"k\">if</span> <span class=\"nb\">any</span><span class=\"p\">(</span><span class=\"n\">nd</span> <span class=\"ow\">in</span> <span class=\"n\">n</span> <span class=\"k\">for</span> <span class=\"n\">nd</span> <span class=\"ow\">in</span> <span class=\"n\">no_decay</span><span class=\"p\">)],</span>\n                <span class=\"s2\">&quot;weight_decay&quot;</span><span class=\"p\">:</span> <span class=\"mf\">0.0</span><span class=\"p\">,</span>\n            <span class=\"p\">},</span>\n        <span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">optimizer_grouped_parameters</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/config/factory/tokens.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.factory.tokens &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.config.factory.tokens</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.config.factory.tokens</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.registry</span> <span class=\"k\">import</span> <span class=\"n\">Registry</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.utils</span> <span class=\"k\">import</span> <span class=\"n\">convert_config2dict</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens</span> <span class=\"k\">import</span> <span class=\"n\">tokenizer</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">Factory</span>\n\n\n<div class=\"viewcode-block\" id=\"make_tokenizer\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.tokens.make_tokenizer\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">make_tokenizer</span><span class=\"p\">(</span><span class=\"n\">tokenizer_cls</span><span class=\"p\">,</span> <span class=\"n\">tokenizer_config</span><span class=\"p\">,</span> <span class=\"n\">parent_tokenizers</span><span class=\"o\">=</span><span class=\"p\">{}):</span>\n    <span class=\"k\">if</span> <span class=\"n\">tokenizer_config</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span> <span class=\"ow\">or</span> <span class=\"s2\">&quot;name&quot;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">tokenizer_config</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"n\">package_name</span> <span class=\"o\">=</span> <span class=\"n\">tokenizer_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">package_config</span> <span class=\"o\">=</span> <span class=\"n\">tokenizer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">package_name</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n    <span class=\"n\">tokenizer_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;config&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">package_config</span>\n    <span class=\"k\">if</span> <span class=\"n\">package_name</span> <span class=\"ow\">in</span> <span class=\"n\">tokenizer_config</span><span class=\"p\">:</span>\n        <span class=\"k\">del</span> <span class=\"n\">tokenizer_config</span><span class=\"p\">[</span><span class=\"n\">package_name</span><span class=\"p\">]</span>\n\n    <span class=\"n\">tokenizer_config</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">parent_tokenizers</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">tokenizer_cls</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">tokenizer_config</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"make_all_tokenizers\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.tokens.make_all_tokenizers\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">make_all_tokenizers</span><span class=\"p\">(</span><span class=\"n\">all_tokenizer_config</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot; Tokenizer is resource used all token together &quot;&quot;&quot;</span>\n\n    <span class=\"n\">sent_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">make_tokenizer</span><span class=\"p\">(</span>\n        <span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">SentTokenizer</span><span class=\"p\">,</span> <span class=\"n\">all_tokenizer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sent&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;punkt&quot;</span><span class=\"p\">})</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">make_tokenizer</span><span class=\"p\">(</span>\n        <span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">WordTokenizer</span><span class=\"p\">,</span>\n        <span class=\"n\">all_tokenizer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">),</span>\n        <span class=\"n\">parent_tokenizers</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;sent_tokenizer&quot;</span><span class=\"p\">:</span> <span class=\"n\">sent_tokenizer</span><span class=\"p\">},</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">subword_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">make_tokenizer</span><span class=\"p\">(</span>\n        <span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">SubwordTokenizer</span><span class=\"p\">,</span>\n        <span class=\"n\">all_tokenizer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;subword&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">),</span>\n        <span class=\"n\">parent_tokenizers</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;word_tokenizer&quot;</span><span class=\"p\">:</span> <span class=\"n\">word_tokenizer</span><span class=\"p\">},</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">char_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">make_tokenizer</span><span class=\"p\">(</span>\n        <span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">CharTokenizer</span><span class=\"p\">,</span>\n        <span class=\"n\">all_tokenizer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;char&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">),</span>\n        <span class=\"n\">parent_tokenizers</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;word_tokenizer&quot;</span><span class=\"p\">:</span> <span class=\"n\">word_tokenizer</span><span class=\"p\">},</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">bpe_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">make_tokenizer</span><span class=\"p\">(</span>\n        <span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">BPETokenizer</span><span class=\"p\">,</span>\n        <span class=\"n\">all_tokenizer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;bpe&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;bpe&quot;</span><span class=\"p\">:</span> <span class=\"n\">bpe_tokenizer</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;char&quot;</span><span class=\"p\">:</span> <span class=\"n\">char_tokenizer</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;subword&quot;</span><span class=\"p\">:</span> <span class=\"n\">subword_tokenizer</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;word&quot;</span><span class=\"p\">:</span> <span class=\"n\">word_tokenizer</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;sent&quot;</span><span class=\"p\">:</span> <span class=\"n\">sent_tokenizer</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span></div>\n\n\n<div class=\"viewcode-block\" id=\"TokenMakersFactory\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.tokens.TokenMakersFactory\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">TokenMakersFactory</span><span class=\"p\">(</span><span class=\"n\">Factory</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    TokenMakers Factory Class</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        config: token config from argument (config.token)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">LANGS</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;eng&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;kor&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">config</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">registry</span> <span class=\"o\">=</span> <span class=\"n\">Registry</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"TokenMakersFactory.create\"><a class=\"viewcode-back\" href=\"../../../../claf.config.factory.html#claf.config.factory.tokens.TokenMakersFactory.create\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">create</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;tokenizer&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n            <span class=\"n\">tokenizers</span> <span class=\"o\">=</span> <span class=\"n\">make_all_tokenizers</span><span class=\"p\">(</span><span class=\"n\">convert_config2dict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"p\">))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">tokenizers</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n        <span class=\"n\">token_names</span><span class=\"p\">,</span> <span class=\"n\">token_types</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">names</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">types</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">token_names</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">token_types</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;token_names and token_types must be same length.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">token_makers</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;tokenizers&quot;</span><span class=\"p\">:</span> <span class=\"n\">tokenizers</span><span class=\"p\">}</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_type</span> <span class=\"ow\">in</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">token_names</span><span class=\"p\">,</span> <span class=\"n\">token_types</span><span class=\"p\">)):</span>\n            <span class=\"n\">token_config</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n            <span class=\"k\">if</span> <span class=\"n\">token_config</span> <span class=\"o\">!=</span> <span class=\"p\">{}:</span>\n                <span class=\"n\">token_config</span> <span class=\"o\">=</span> <span class=\"n\">convert_config2dict</span><span class=\"p\">(</span><span class=\"n\">token_config</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># Token (tokenizer, indexer, embedding, vocab)</span>\n            <span class=\"n\">token_config</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;tokenizers&quot;</span><span class=\"p\">:</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;indexer_config&quot;</span><span class=\"p\">:</span> <span class=\"n\">token_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;indexer&quot;</span><span class=\"p\">,</span> <span class=\"p\">{}),</span>\n                <span class=\"s2\">&quot;embedding_config&quot;</span><span class=\"p\">:</span> <span class=\"n\">token_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;embedding&quot;</span><span class=\"p\">,</span> <span class=\"p\">{}),</span>\n                <span class=\"s2\">&quot;vocab_config&quot;</span><span class=\"p\">:</span> <span class=\"n\">token_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;vocab&quot;</span><span class=\"p\">,</span> <span class=\"p\">{}),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">token_makers</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">registry</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;token:</span><span class=\"si\">{token_type}</span><span class=\"s2\">&quot;</span><span class=\"p\">)(</span><span class=\"o\">**</span><span class=\"n\">token_config</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">token_makers</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/config/namespace.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.namespace &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.config.namespace</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.config.namespace</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">argparse</span>\n\n\n<div class=\"viewcode-block\" id=\"NestedNamespace\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.namespace.NestedNamespace\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">NestedNamespace</span><span class=\"p\">(</span><span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Nested Namespace</span>\n<span class=\"sd\">    (Simple class used by default by parse_args() to create</span>\n<span class=\"sd\">     an object holding attributes and return it.)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__setattr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;.&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">name</span><span class=\"p\">:</span>\n            <span class=\"n\">group</span><span class=\"p\">,</span> <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;.&quot;</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">namespace</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">group</span><span class=\"p\">,</span> <span class=\"n\">NestedNamespace</span><span class=\"p\">())</span>\n            <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"n\">namespace</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"n\">group</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">namespace</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"n\">name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">value</span>\n\n<div class=\"viewcode-block\" id=\"NestedNamespace.delete_unselected\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.namespace.NestedNamespace.delete_unselected\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">delete_unselected</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">namespace</span><span class=\"p\">,</span> <span class=\"n\">excepts</span><span class=\"o\">=</span><span class=\"p\">[]):</span>\n        <span class=\"n\">delete_keys</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">namespace</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">key</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">excepts</span><span class=\"p\">:</span>\n                <span class=\"n\">delete_keys</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">key</span><span class=\"p\">)</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">delete_keys</span><span class=\"p\">:</span>\n            <span class=\"nb\">delattr</span><span class=\"p\">(</span><span class=\"n\">namespace</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"NestedNamespace.overwrite\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.namespace.NestedNamespace.overwrite\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">overwrite</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"k\">def</span> <span class=\"nf\">_overwrite</span><span class=\"p\">(</span><span class=\"n\">namespace</span><span class=\"p\">,</span> <span class=\"n\">d</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">d</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n                    <span class=\"n\">nested_namespace</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">namespace</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n                    <span class=\"k\">if</span> <span class=\"n\">nested_namespace</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                        <span class=\"n\">nested_namespace</span> <span class=\"o\">=</span> <span class=\"n\">NestedNamespace</span><span class=\"p\">()</span>\n                        <span class=\"n\">nested_namespace</span><span class=\"o\">.</span><span class=\"n\">load_from_json</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span>\n\n                        <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"n\">namespace</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">nested_namespace</span><span class=\"p\">)</span>\n                    <span class=\"k\">else</span><span class=\"p\">:</span>\n                        <span class=\"n\">_overwrite</span><span class=\"p\">(</span><span class=\"n\">nested_namespace</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"p\">)</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"n\">namespace</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">namespace</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">_overwrite</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"NestedNamespace.load_from_json\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.namespace.NestedNamespace.load_from_json\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">load_from_json</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">dict_data</span><span class=\"p\">):</span>\n\n        <span class=\"n\">name_value_pairs</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">make_key_value_pairs</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">,</span> <span class=\"n\">prefix</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">d</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n                    <span class=\"n\">next_prefix</span> <span class=\"o\">=</span> <span class=\"n\">k</span>\n                    <span class=\"k\">if</span> <span class=\"n\">prefix</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">:</span>\n                        <span class=\"n\">next_prefix</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{prefix}</span><span class=\"s2\">.</span><span class=\"si\">{k}</span><span class=\"s2\">&quot;</span>\n                    <span class=\"n\">make_key_value_pairs</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">,</span> <span class=\"n\">prefix</span><span class=\"o\">=</span><span class=\"n\">next_prefix</span><span class=\"p\">)</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">key_with_prefix</span> <span class=\"o\">=</span> <span class=\"n\">k</span>\n                    <span class=\"k\">if</span> <span class=\"n\">prefix</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">:</span>\n                        <span class=\"n\">key_with_prefix</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{prefix}</span><span class=\"s2\">.</span><span class=\"si\">{k}</span><span class=\"s2\">&quot;</span>\n                    <span class=\"n\">name_value_pairs</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"n\">key_with_prefix</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"p\">))</span>\n\n        <span class=\"n\">make_key_value_pairs</span><span class=\"p\">(</span><span class=\"n\">dict_data</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"n\">name_value_pairs</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__setattr__</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/config/pattern.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.pattern &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.config.pattern</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.config.pattern</h1><div class=\"highlight\"><pre>\n<div class=\"viewcode-block\" id=\"Singleton\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.pattern.Singleton\">[docs]</a><span></span><span class=\"k\">class</span> <span class=\"nc\">Singleton</span><span class=\"p\">(</span><span class=\"nb\">type</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Design Pattern Base</span>\n\n<span class=\"sd\">    Singleton Meta Class</span>\n<span class=\"sd\">    the singleton pattern is a software design pattern that restricts the</span>\n<span class=\"sd\">    instantiation of a class to one object.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">_instances</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__call__</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">cls</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_instances</span><span class=\"p\">:</span>\n            <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_instances</span><span class=\"p\">[</span><span class=\"bp\">cls</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">Singleton</span><span class=\"p\">,</span> <span class=\"bp\">cls</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__call__</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_instances</span><span class=\"p\">[</span><span class=\"bp\">cls</span><span class=\"p\">]</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/config/registry.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.registry &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.config.registry</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.config.registry</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.pattern</span> <span class=\"k\">import</span> <span class=\"n\">Singleton</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"Registry\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.registry.Registry\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Registry</span><span class=\"p\">(</span><span class=\"n\">metaclass</span><span class=\"o\">=</span><span class=\"n\">Singleton</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Registry class (Singleton)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name_to_subclass</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;component&quot;</span><span class=\"p\">:</span> <span class=\"p\">{},</span>\n            <span class=\"s2\">&quot;reader&quot;</span><span class=\"p\">:</span> <span class=\"p\">{},</span>\n            <span class=\"s2\">&quot;machine&quot;</span><span class=\"p\">:</span> <span class=\"p\">{},</span>\n            <span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"p\">{},</span>\n            <span class=\"s2\">&quot;token&quot;</span><span class=\"p\">:</span> <span class=\"p\">{},</span>\n        <span class=\"p\">}</span>\n\n<div class=\"viewcode-block\" id=\"Registry.add\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.registry.Registry.add\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">add</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"n\">component_type</span><span class=\"p\">,</span> <span class=\"n\">component_name</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_split_component_type_and_name</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">component_name</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name_to_subclass</span><span class=\"p\">[</span><span class=\"n\">component_type</span><span class=\"p\">]:</span>\n            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span>\n                <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{component_name}</span><span class=\"s2\"> is already included in Registry. It override with </span><span class=\"si\">{obj}</span><span class=\"s2\">.&quot;</span>\n            <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name_to_subclass</span><span class=\"p\">[</span><span class=\"n\">component_type</span><span class=\"p\">][</span><span class=\"n\">component_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">obj</span></div>\n\n<div class=\"viewcode-block\" id=\"Registry.get\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.registry.Registry.get\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n        <span class=\"n\">component_type</span><span class=\"p\">,</span> <span class=\"n\">component_name</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_split_component_type_and_name</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">component_type</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name_to_subclass</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;There is no </span><span class=\"si\">{component_type}</span><span class=\"s2\"> in _name_to_subclass.&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">component_name</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name_to_subclass</span><span class=\"p\">[</span><span class=\"n\">component_type</span><span class=\"p\">]:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;There is no </span><span class=\"si\">{component_name}</span><span class=\"s2\"> object in </span><span class=\"si\">{component_type}</span><span class=\"s2\">.&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name_to_subclass</span><span class=\"p\">[</span><span class=\"n\">component_type</span><span class=\"p\">][</span><span class=\"n\">component_name</span><span class=\"p\">]</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_split_component_type_and_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;:&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">name</span><span class=\"p\">:</span>\n            <span class=\"n\">names</span> <span class=\"o\">=</span> <span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;:&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">names</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">names</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;do not recognize component_type.&quot;</span><span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/config/utils.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.utils &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.config.utils</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.config.utils</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">argparse</span> <span class=\"k\">import</span> <span class=\"n\">Namespace</span>\n<span class=\"kn\">import</span> <span class=\"nn\">copy</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">jsbeautifier</span>\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">random</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n\n<div class=\"viewcode-block\" id=\"pretty_json_dumps\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.utils.pretty_json_dumps\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">pretty_json_dumps</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">):</span>\n    <span class=\"n\">js_opts</span> <span class=\"o\">=</span> <span class=\"n\">jsbeautifier</span><span class=\"o\">.</span><span class=\"n\">default_options</span><span class=\"p\">()</span>\n    <span class=\"n\">js_opts</span><span class=\"o\">.</span><span class=\"n\">indent_size</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n\n    <span class=\"n\">inputs</span> <span class=\"o\">=</span> <span class=\"n\">remove_none</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">jsbeautifier</span><span class=\"o\">.</span><span class=\"n\">beautify</span><span class=\"p\">(</span><span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">))</span></div>\n\n\n<div class=\"viewcode-block\" id=\"remove_none\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.utils.remove_none\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">remove_none</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">,</span> <span class=\"nb\">tuple</span><span class=\"p\">,</span> <span class=\"nb\">set</span><span class=\"p\">)):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">)(</span><span class=\"n\">remove_none</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">obj</span> <span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"nb\">dict</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">)(</span>\n            <span class=\"p\">(</span><span class=\"n\">remove_none</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">),</span> <span class=\"n\">remove_none</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">))</span>\n            <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span>\n            <span class=\"k\">if</span> <span class=\"n\">k</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span> <span class=\"ow\">and</span> <span class=\"n\">v</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n        <span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span></div>\n\n\n<div class=\"viewcode-block\" id=\"convert_config2dict\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.utils.convert_config2dict\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">convert_config2dict</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">):</span>\n    <span class=\"n\">config_dict</span> <span class=\"o\">=</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">deepcopy</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">config_dict</span><span class=\"p\">,</span> <span class=\"n\">Namespace</span><span class=\"p\">):</span>\n        <span class=\"n\">config_dict</span> <span class=\"o\">=</span> <span class=\"nb\">vars</span><span class=\"p\">(</span><span class=\"n\">config_dict</span><span class=\"p\">)</span>\n\n    <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">config_dict</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">,</span> <span class=\"n\">Namespace</span><span class=\"p\">):</span>\n            <span class=\"n\">config_dict</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">convert_config2dict</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">config_dict</span></div>\n\n\n<div class=\"viewcode-block\" id=\"set_global_seed\"><a class=\"viewcode-back\" href=\"../../../claf.config.html#claf.config.utils.set_global_seed\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">set_global_seed</span><span class=\"p\">(</span><span class=\"n\">seed</span><span class=\"o\">=</span><span class=\"mi\">21</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Tensorflow</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"kn\">import</span> <span class=\"nn\">tensorflow</span> <span class=\"k\">as</span> <span class=\"nn\">tf</span>\n    <span class=\"k\">except</span> <span class=\"ne\">ImportError</span><span class=\"p\">:</span>\n        <span class=\"k\">pass</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">tf</span><span class=\"o\">.</span><span class=\"n\">set_random_seed</span><span class=\"p\">(</span><span class=\"n\">seed</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># PyTorch</span>\n    <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">manual_seed</span><span class=\"p\">(</span><span class=\"n\">seed</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">():</span>\n        <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">manual_seed_all</span><span class=\"p\">(</span><span class=\"n\">seed</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># NumPy</span>\n    <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">seed</span><span class=\"p\">(</span><span class=\"n\">seed</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Python</span>\n    <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">seed</span><span class=\"p\">(</span><span class=\"n\">seed</span><span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/batch.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.batch &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.batch</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.batch</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"make_batch\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.batch.make_batch\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">make_batch</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">Batch</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span><span class=\"s2\">&quot;features&quot;</span><span class=\"p\">:</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">:</span> <span class=\"n\">labels</span><span class=\"p\">})</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Batch\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.batch.Batch\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Batch</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Batch Data Transfer Object (DTO) Class</span>\n\n<span class=\"sd\">    dictionary consisting of</span>\n<span class=\"sd\">        - features: (dict) input</span>\n<span class=\"sd\">        - labels: (dict) output</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span> <span class=\"o\">!=</span> <span class=\"nb\">set</span><span class=\"p\">([</span><span class=\"s2\">&quot;features&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">]):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;You can use only &#39;features&#39; and &#39;labels&#39; as dictionary key.&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Batch.sort_by_key\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.batch.Batch.sort_by_key\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">sort_by_key</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">sort_key</span><span class=\"p\">):</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Start sort by key: </span><span class=\"si\">{sort_key}</span><span class=\"s2\">&#39;s length&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">zipped</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s2\">&quot;features&quot;</span><span class=\"p\">],</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">])</span>\n\n        <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s2\">&quot;features&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n            <span class=\"n\">feature_keys</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">feature_keys</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">()</span>\n\n        <span class=\"n\">key_index</span> <span class=\"o\">=</span> <span class=\"mi\">0</span> <span class=\"k\">if</span> <span class=\"n\">sort_key</span> <span class=\"ow\">in</span> <span class=\"n\">feature_keys</span> <span class=\"k\">else</span> <span class=\"mi\">1</span>  <span class=\"c1\"># sort_key in features or labels</span>\n\n        <span class=\"n\">sorted_features</span><span class=\"p\">,</span> <span class=\"n\">sorted_labels</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">data</span> <span class=\"ow\">in</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">zipped</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">[</span><span class=\"n\">key_index</span><span class=\"p\">][</span><span class=\"n\">sort_key</span><span class=\"p\">])):</span>\n            <span class=\"n\">feature</span><span class=\"p\">,</span> <span class=\"n\">label</span> <span class=\"o\">=</span> <span class=\"n\">data</span>\n            <span class=\"n\">sorted_features</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">feature</span><span class=\"p\">)</span>\n            <span class=\"n\">sorted_labels</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">label</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s2\">&quot;features&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">sorted_features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">sorted_labels</span>\n        <span class=\"n\">zipped</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Complete sorting...&quot;</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"Batch.to_dict\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.batch.Batch.to_dict\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">to_dict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">flatten</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">recursive</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"k\">def</span> <span class=\"nf\">_flatten</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">d</span> <span class=\"o\">==</span> <span class=\"p\">{}:</span>\n                <span class=\"k\">return</span> <span class=\"n\">d</span>\n\n            <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"o\">=</span> <span class=\"n\">d</span><span class=\"o\">.</span><span class=\"n\">popitem</span><span class=\"p\">()</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">,</span> <span class=\"nb\">dict</span><span class=\"p\">):</span>\n                <span class=\"n\">flat_v</span> <span class=\"o\">=</span> <span class=\"n\">_flatten</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span>\n                <span class=\"k\">for</span> <span class=\"n\">f_k</span> <span class=\"ow\">in</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">flat_v</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">()):</span>\n                    <span class=\"n\">flat_v</span><span class=\"p\">[</span><span class=\"n\">k</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;#&quot;</span> <span class=\"o\">+</span> <span class=\"n\">f_k</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">flat_v</span><span class=\"p\">[</span><span class=\"n\">f_k</span><span class=\"p\">]</span>\n                    <span class=\"k\">del</span> <span class=\"n\">flat_v</span><span class=\"p\">[</span><span class=\"n\">f_k</span><span class=\"p\">]</span>\n                <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"o\">**</span><span class=\"n\">flat_v</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">_flatten</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">)}</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"n\">v</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">_flatten</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">)}</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">_recursive</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">,</span> <span class=\"nb\">dict</span><span class=\"p\">):</span>\n                <span class=\"k\">return</span> <span class=\"n\">d</span>\n\n            <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">d</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">,</span> <span class=\"nb\">dict</span><span class=\"p\">):</span>\n                    <span class=\"n\">dict_v</span> <span class=\"o\">=</span> <span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span>\n                    <span class=\"n\">d</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">_recursive</span><span class=\"p\">(</span><span class=\"n\">dict_v</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">d</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">flatten</span><span class=\"p\">:</span>\n            <span class=\"n\">d</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n            <span class=\"n\">d</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">_flatten</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s2\">&quot;features&quot;</span><span class=\"p\">]))</span>\n            <span class=\"n\">d</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">_flatten</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">]))</span>\n            <span class=\"k\">return</span> <span class=\"n\">d</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">recursive</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_recursive</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/collate.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.collate &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.collate</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.collate</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">from</span> <span class=\"nn\">torch.autograd</span> <span class=\"k\">import</span> <span class=\"n\">Variable</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n\n\n<div class=\"viewcode-block\" id=\"PadCollator\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.collate.PadCollator\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">PadCollator</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Collator apply pad and make tensor</span>\n<span class=\"sd\">    Minimizes amount of padding needed while producing mini-batch.</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        cuda_device_id: tensor assign to cuda device id</span>\n<span class=\"sd\">            Default is None (CPU)</span>\n<span class=\"sd\">        skip_keys: skip to make tensor</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cuda_device_id</span> <span class=\"o\">=</span> <span class=\"n\">cuda_device_id</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_value</span> <span class=\"o\">=</span> <span class=\"n\">pad_value</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">skip_keys</span> <span class=\"o\">=</span> <span class=\"n\">skip_keys</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__call__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">collate</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_value</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">collate</span><span class=\"p\">(</span><span class=\"n\">labels</span><span class=\"p\">,</span> <span class=\"n\">apply_pad</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_value</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_batch</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"PadCollator.collate\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.collate.PadCollator.collate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">collate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">datas</span><span class=\"p\">,</span> <span class=\"n\">apply_pad</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">data_name</span><span class=\"p\">,</span> <span class=\"n\">data</span> <span class=\"ow\">in</span> <span class=\"n\">datas</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"nb\">dict</span><span class=\"p\">):</span>\n                <span class=\"k\">for</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                    <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_collate</span><span class=\"p\">(</span>\n                        <span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"n\">apply_pad</span><span class=\"o\">=</span><span class=\"n\">apply_pad</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"n\">pad_value</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">datas</span><span class=\"p\">[</span><span class=\"n\">data_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_collate</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">apply_pad</span><span class=\"o\">=</span><span class=\"n\">apply_pad</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_collate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"n\">apply_pad</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">apply_pad</span><span class=\"p\">:</span>\n            <span class=\"n\">value</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_apply_pad</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"o\">=</span><span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"n\">pad_value</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_tensor</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_apply_pad</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">padding_tokens</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"o\">=</span><span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"n\">pad_value</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_make_tensor</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">):</span>\n            <span class=\"n\">value_type</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">get_token_type</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">value_type</span> <span class=\"o\">==</span> <span class=\"nb\">int</span><span class=\"p\">:</span>\n                <span class=\"n\">value</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">LongTensor</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">value</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span>\n\n        <span class=\"n\">value</span> <span class=\"o\">=</span> <span class=\"n\">Variable</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cuda_device_id</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">value</span> <span class=\"o\">=</span> <span class=\"n\">value</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cuda_device_id</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">value</span></div>\n\n\n<div class=\"viewcode-block\" id=\"FeatLabelPadCollator\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.collate.FeatLabelPadCollator\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">FeatLabelPadCollator</span><span class=\"p\">(</span><span class=\"n\">PadCollator</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Collator apply pad and make tensor</span>\n<span class=\"sd\">    Minimizes amount of padding needed while producing mini-batch.</span>\n\n<span class=\"sd\">    FeatLabelPadCollator allows applying pad to not only features, but also labels.</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        cuda_device_id: tensor assign to cuda device id</span>\n<span class=\"sd\">            Default is None (CPU)</span>\n<span class=\"sd\">        skip_keys: skip to make tensor</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__call__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">,</span> <span class=\"n\">apply_pad_labels</span><span class=\"o\">=</span><span class=\"p\">(),</span> <span class=\"n\">apply_pad_values</span><span class=\"o\">=</span><span class=\"p\">()):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">collate</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">collate</span><span class=\"p\">(</span><span class=\"n\">labels</span><span class=\"p\">,</span> <span class=\"n\">apply_pad</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n                     <span class=\"n\">apply_pad_labels</span><span class=\"o\">=</span><span class=\"n\">apply_pad_labels</span><span class=\"p\">,</span> <span class=\"n\">apply_pad_values</span><span class=\"o\">=</span><span class=\"n\">apply_pad_values</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_batch</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"FeatLabelPadCollator.collate\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.collate.FeatLabelPadCollator.collate\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">datas</span><span class=\"p\">,</span> <span class=\"n\">apply_pad</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">apply_pad_labels</span><span class=\"o\">=</span><span class=\"p\">(),</span> <span class=\"n\">apply_pad_values</span><span class=\"o\">=</span><span class=\"p\">()):</span>\n        <span class=\"k\">for</span> <span class=\"n\">data_name</span><span class=\"p\">,</span> <span class=\"n\">data</span> <span class=\"ow\">in</span> <span class=\"n\">datas</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">apply_pad</span> <span class=\"ow\">and</span> <span class=\"n\">data_name</span> <span class=\"ow\">in</span> <span class=\"n\">apply_pad_labels</span><span class=\"p\">:</span>\n                <span class=\"n\">_apply_pad</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>  <span class=\"c1\"># ignore apply_pad</span>\n                <span class=\"n\">pad_value</span> <span class=\"o\">=</span> <span class=\"n\">apply_pad_values</span><span class=\"p\">[</span><span class=\"n\">apply_pad_labels</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">data_name</span><span class=\"p\">)]</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">_apply_pad</span> <span class=\"o\">=</span> <span class=\"n\">apply_pad</span>\n                <span class=\"n\">pad_value</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"nb\">dict</span><span class=\"p\">):</span>\n                <span class=\"k\">for</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                    <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_collate</span><span class=\"p\">(</span>\n                        <span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"n\">apply_pad</span><span class=\"o\">=</span><span class=\"n\">_apply_pad</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"n\">pad_value</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">datas</span><span class=\"p\">[</span><span class=\"n\">data_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_collate</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">apply_pad</span><span class=\"o\">=</span><span class=\"n\">_apply_pad</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"n\">pad_value</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/data_handler.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.data_handler &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.data_handler</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.data_handler</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">import</span> <span class=\"nn\">pickle</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pathlib</span> <span class=\"k\">import</span> <span class=\"n\">Path</span><span class=\"p\">,</span> <span class=\"n\">PosixPath</span>\n<span class=\"kn\">import</span> <span class=\"nn\">shutil</span>\n<span class=\"kn\">import</span> <span class=\"nn\">tempfile</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">msgpack</span>\n<span class=\"kn\">import</span> <span class=\"nn\">requests</span>\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf</span> <span class=\"k\">import</span> <span class=\"n\">nsml</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"CachePath\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.data_handler.CachePath\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CachePath</span><span class=\"p\">:</span>\n    <span class=\"k\">if</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span><span class=\"p\">:</span>\n        <span class=\"n\">ROOT</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"s2\">&quot;./claf_cache&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">ROOT</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"o\">.</span><span class=\"n\">home</span><span class=\"p\">()</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;.claf_cache&quot;</span>\n    <span class=\"n\">DATASET</span> <span class=\"o\">=</span> <span class=\"n\">ROOT</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;dataset&quot;</span>\n    <span class=\"n\">MACHINE</span> <span class=\"o\">=</span> <span class=\"n\">ROOT</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;machine&quot;</span>\n    <span class=\"n\">PRETRAINED_VECTOR</span> <span class=\"o\">=</span> <span class=\"n\">ROOT</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;pretrained_vector&quot;</span>\n    <span class=\"n\">TOKEN_COUNTER</span> <span class=\"o\">=</span> <span class=\"n\">ROOT</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;token_counter&quot;</span>\n    <span class=\"n\">VOCAB</span> <span class=\"o\">=</span> <span class=\"n\">ROOT</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;vocab&quot;</span></div>\n\n\n<div class=\"viewcode-block\" id=\"DataHandler\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.data_handler.DataHandler\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DataHandler</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    DataHandler with CachePath</span>\n\n<span class=\"sd\">    - read (from_path, from_http)</span>\n<span class=\"sd\">    - dump (.msgpack or .pkl (pickle))</span>\n<span class=\"sd\">    - load</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cache_path</span><span class=\"o\">=</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">ROOT</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">cache_path</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"n\">PosixPath</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;cache_path type is PosixPath (use pathlib.Path). not f{type(cache_path)}&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache_path</span> <span class=\"o\">=</span> <span class=\"n\">cache_path</span>\n        <span class=\"n\">cache_path</span><span class=\"o\">.</span><span class=\"n\">mkdir</span><span class=\"p\">(</span><span class=\"n\">parents</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"DataHandler.convert_cache_path\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.data_handler.DataHandler.convert_cache_path\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">convert_cache_path</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"n\">cache_data_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache_path</span> <span class=\"o\">/</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">cache_data_path</span></div>\n\n<div class=\"viewcode-block\" id=\"DataHandler.read_embedding\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.data_handler.DataHandler.read_embedding\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">read_embedding</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"DataHandler.read\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.data_handler.DataHandler.read\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s2\">&quot;utf-8&quot;</span><span class=\"p\">,</span> <span class=\"n\">return_path</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">file_path</span><span class=\"o\">.</span><span class=\"n\">startswith</span><span class=\"p\">(</span><span class=\"s2\">&quot;http&quot;</span><span class=\"p\">):</span>\n           <span class=\"n\">file_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_read_from_http</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"p\">)</span>\n\n        <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"n\">return_path</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">path</span>\n            <span class=\"k\">return</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">read_bytes</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">decode</span><span class=\"p\">(</span><span class=\"n\">encoding</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span><span class=\"p\">:</span>\n            <span class=\"n\">dataset_path</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">DATASET_PATH</span><span class=\"p\">)</span>\n\n            <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">dataset_path</span> <span class=\"o\">/</span> <span class=\"n\">file_path</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n                <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">dataset_path</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;train&quot;</span> <span class=\"o\">/</span> <span class=\"n\">file_path</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">FileNotFoundError</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"n\">return_path</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">path</span>\n            <span class=\"k\">return</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">read_bytes</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">decode</span><span class=\"p\">(</span><span class=\"n\">encoding</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">FileNotFoundError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{file_path}</span><span class=\"s2\"> is not found.&quot;</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_read_from_http</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"p\">,</span> <span class=\"n\">return_path</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"n\">cache_data_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache_path</span> <span class=\"o\">/</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">name</span>\n        <span class=\"k\">if</span> <span class=\"n\">cache_data_path</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;&#39;</span><span class=\"si\">{file_path}</span><span class=\"s2\">&#39; is already downloaded.&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">pass</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">with</span> <span class=\"n\">tempfile</span><span class=\"o\">.</span><span class=\"n\">TemporaryFile</span><span class=\"p\">()</span> <span class=\"k\">as</span> <span class=\"n\">temp_file</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_download_from_http</span><span class=\"p\">(</span><span class=\"n\">temp_file</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">)</span>\n                <span class=\"n\">temp_file</span><span class=\"o\">.</span><span class=\"n\">flush</span><span class=\"p\">()</span>\n                <span class=\"n\">temp_file</span><span class=\"o\">.</span><span class=\"n\">seek</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n                <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">cache_data_path</span><span class=\"p\">,</span> <span class=\"s1\">&#39;wb&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">cache_file</span><span class=\"p\">:</span>\n                    <span class=\"n\">shutil</span><span class=\"o\">.</span><span class=\"n\">copyfileobj</span><span class=\"p\">(</span><span class=\"n\">temp_file</span><span class=\"p\">,</span> <span class=\"n\">cache_file</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">cache_data_path</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_download_from_http</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">temp_file</span><span class=\"p\">,</span> <span class=\"n\">url</span><span class=\"p\">):</span>\n        <span class=\"n\">req</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">stream</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"n\">content_length</span> <span class=\"o\">=</span> <span class=\"n\">req</span><span class=\"o\">.</span><span class=\"n\">headers</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;Content-Length&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">total</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">content_length</span><span class=\"p\">)</span> <span class=\"k\">if</span> <span class=\"n\">content_length</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span> <span class=\"k\">else</span> <span class=\"kc\">None</span>\n        <span class=\"k\">with</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">total</span><span class=\"o\">=</span><span class=\"n\">total</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;B&quot;</span><span class=\"p\">,</span> <span class=\"n\">unit_scale</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"s2\">&quot;download...&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">pbar</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">chunk</span> <span class=\"ow\">in</span> <span class=\"n\">req</span><span class=\"o\">.</span><span class=\"n\">iter_content</span><span class=\"p\">(</span><span class=\"n\">chunk_size</span><span class=\"o\">=</span><span class=\"mi\">1024</span><span class=\"p\">):</span>\n                <span class=\"k\">if</span> <span class=\"n\">chunk</span><span class=\"p\">:</span>  <span class=\"c1\"># filter out keep-alive new chunks</span>\n                    <span class=\"n\">temp_file</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">chunk</span><span class=\"p\">)</span>\n                    <span class=\"n\">pbar</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">chunk</span><span class=\"p\">))</span>\n\n<div class=\"viewcode-block\" id=\"DataHandler.cache_token_counter\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.data_handler.DataHandler.cache_token_counter\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">cache_token_counter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_reader_config</span><span class=\"p\">,</span> <span class=\"n\">tokenizer_name</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">data_paths</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">basename</span><span class=\"p\">(</span><span class=\"n\">data_reader_config</span><span class=\"o\">.</span><span class=\"n\">train_file_path</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">data_reader_config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;valid_file_path&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n            <span class=\"n\">data_paths</span> <span class=\"o\">+=</span> <span class=\"s2\">&quot;#&quot;</span> <span class=\"o\">+</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">basename</span><span class=\"p\">(</span><span class=\"n\">data_reader_config</span><span class=\"o\">.</span><span class=\"n\">valid_file_path</span><span class=\"p\">)</span>\n\n        <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache_path</span> <span class=\"o\">/</span> <span class=\"n\">data_reader_config</span><span class=\"o\">.</span><span class=\"n\">dataset</span> <span class=\"o\">/</span> <span class=\"n\">data_paths</span>\n        <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">mkdir</span><span class=\"p\">(</span><span class=\"n\">parents</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">path</span> <span class=\"o\">/</span> <span class=\"n\">tokenizer_name</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">obj</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dump</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"DataHandler.load\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.data_handler.DataHandler.load\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">load</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s2\">&quot;utf-8&quot;</span><span class=\"p\">):</span>\n        <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache_path</span> <span class=\"o\">/</span> <span class=\"n\">file_path</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;load path: </span><span class=\"si\">{path}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">msgpack_path</span> <span class=\"o\">=</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">with_suffix</span><span class=\"p\">(</span><span class=\"s2\">&quot;.msgpack&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">msgpack_path</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_load_msgpack</span><span class=\"p\">(</span><span class=\"n\">msgpack_path</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"p\">)</span>\n\n        <span class=\"n\">pickle_path</span> <span class=\"o\">=</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">with_suffix</span><span class=\"p\">(</span><span class=\"s2\">&quot;.pkl&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">pickle_path</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_load_pickle</span><span class=\"p\">(</span><span class=\"n\">pickle_path</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"kc\">None</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_load_msgpack</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"p\">):</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"s2\">&quot;rb&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">in_file</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">msgpack</span><span class=\"o\">.</span><span class=\"n\">unpack</span><span class=\"p\">(</span><span class=\"n\">in_file</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"n\">encoding</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_load_pickle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"p\">):</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"s2\">&quot;rb&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">in_file</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">pickle</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">in_file</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"n\">encoding</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"DataHandler.dump\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.data_handler.DataHandler.dump\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">dump</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s2\">&quot;utf-8&quot;</span><span class=\"p\">):</span>\n        <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache_path</span> <span class=\"o\">/</span> <span class=\"n\">file_path</span>\n        <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">parent</span><span class=\"o\">.</span><span class=\"n\">mkdir</span><span class=\"p\">(</span><span class=\"n\">parents</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">with_suffix</span><span class=\"p\">(</span><span class=\"s2\">&quot;.msgpack&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;wb&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">out_file</span><span class=\"p\">:</span>\n                <span class=\"n\">msgpack</span><span class=\"o\">.</span><span class=\"n\">pack</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">out_file</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"n\">encoding</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">TypeError</span><span class=\"p\">:</span>\n            <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">with_suffix</span><span class=\"p\">(</span><span class=\"s2\">&quot;.msgpack&quot;</span><span class=\"p\">))</span>\n            <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">with_suffix</span><span class=\"p\">(</span><span class=\"s2\">&quot;.pkl&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;wb&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">out_file</span><span class=\"p\">:</span>\n                <span class=\"n\">pickle</span><span class=\"o\">.</span><span class=\"n\">dump</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">out_file</span><span class=\"p\">,</span> <span class=\"n\">protocol</span><span class=\"o\">=</span><span class=\"n\">pickle</span><span class=\"o\">.</span><span class=\"n\">HIGHEST_PROTOCOL</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/base.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.base &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.base</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.base</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">torch.utils.data.dataset</span> <span class=\"k\">import</span> <span class=\"n\">Dataset</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n\n\n<div class=\"viewcode-block\" id=\"DatasetBase\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.base.DatasetBase\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DatasetBase</span><span class=\"p\">(</span><span class=\"n\">Dataset</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Dataset Base Model</span>\n<span class=\"sd\">    An abstract class representing a Dataset.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Features - Lazy Evaluation</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">f_count</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">):</span>\n        <span class=\"n\">max_len</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n        <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">features</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">sentence</span> <span class=\"ow\">in</span> <span class=\"n\">feature</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                <span class=\"k\">if</span> <span class=\"n\">token_name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;text&quot;</span><span class=\"p\">:</span>\n                    <span class=\"k\">continue</span>\n                <span class=\"k\">if</span> <span class=\"n\">callable</span><span class=\"p\">(</span><span class=\"n\">sentence</span><span class=\"p\">):</span>\n                    <span class=\"k\">continue</span>\n\n                <span class=\"n\">max_len</span> <span class=\"o\">=</span> <span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"n\">max_len</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">sentence</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">max_len</span>\n\n<div class=\"viewcode-block\" id=\"DatasetBase.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.base.DatasetBase.collate_fn\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"DatasetBase.get_ground_truths\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.base.DatasetBase.get_ground_truths\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truths</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_idxs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_idxs_dim</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">get_token_dim</span><span class=\"p\">(</span><span class=\"n\">data_idxs</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">data_idxs_dim</span> <span class=\"o\">&gt;</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;data_idxs dimension can&#39;t be larger than 2.(</span><span class=\"si\">{data_idxs_dim}</span><span class=\"s2\">)&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">data_idxs_dim</span> <span class=\"o\">==</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_ground_truth</span><span class=\"p\">(</span><span class=\"n\">data_id</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">data_id</span> <span class=\"ow\">in</span> <span class=\"n\">data_idxs</span><span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"n\">data_idxs_dim</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_ground_truth</span><span class=\"p\">(</span><span class=\"n\">data_idxs</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;data_idxs dimension must be 1 or 2. not </span><span class=\"si\">{data_idxs_dim}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"DatasetBase.get_ground_truth\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.base.DatasetBase.get_ground_truth\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truth</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"DatasetBase.get_predict\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.base.DatasetBase.get_predict\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"DatasetBase.lazy_evaluation\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.base.DatasetBase.lazy_evaluation\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">lazy_evaluation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">f_count</span> <span class=\"o\">&lt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">():</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">f_count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n\n            <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                    <span class=\"k\">if</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">is_lazy</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">):</span>\n                        <span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">][</span><span class=\"n\">k</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">v</span><span class=\"p\">()</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/bert/multi_task.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.bert.multi_task &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.bert.multi_task</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.bert.multi_task</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">random</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.factory.data_loader</span> <span class=\"k\">import</span> <span class=\"n\">make_data_loader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.base</span> <span class=\"k\">import</span> <span class=\"n\">DatasetBase</span>\n\n\n<div class=\"viewcode-block\" id=\"MultiTaskBertDataset\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.MultiTaskBertDataset\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">MultiTaskBertDataset</span><span class=\"p\">(</span><span class=\"n\">DatasetBase</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Dataset for Multi-Task GLUE using BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        batch: Batch DTO (claf.data.batch)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        helper: helper from data_reader</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batches</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">MultiTaskBertDataset</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;multitask_bert&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n\n        <span class=\"n\">task_helpers</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;task_helpers&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">multi_dataset_size</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">batch_sizes</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">task_datasets</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">h</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">batches</span><span class=\"p\">,</span> <span class=\"n\">task_helpers</span><span class=\"p\">):</span>\n            <span class=\"n\">batch_size</span> <span class=\"o\">=</span> <span class=\"n\">h</span><span class=\"p\">[</span><span class=\"s2\">&quot;batch_size&quot;</span><span class=\"p\">]</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">batch_sizes</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">batch_size</span><span class=\"p\">)</span>\n\n            <span class=\"n\">dataset_cls</span> <span class=\"o\">=</span> <span class=\"n\">h</span><span class=\"p\">[</span><span class=\"s2\">&quot;dataset&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">dataset</span> <span class=\"o\">=</span> <span class=\"n\">dataset_cls</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"n\">h</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">task_datasets</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">)</span>\n\n            <span class=\"n\">task_dataset_size</span><span class=\"p\">,</span> <span class=\"n\">remain</span> <span class=\"o\">=</span> <span class=\"nb\">divmod</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">),</span> <span class=\"n\">batch_size</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">remain</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"n\">task_dataset_size</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">multi_dataset_size</span> <span class=\"o\">+=</span> <span class=\"n\">task_dataset_size</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">init_iterators</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"MultiTaskBertDataset.init_iterators\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.MultiTaskBertDataset.init_iterators\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">init_iterators</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">cuda_device_id</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">():</span>\n            <span class=\"n\">cuda_device_id</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>  <span class=\"c1\"># TODO: Hard-code</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">iterators</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">batch_size</span><span class=\"p\">,</span> <span class=\"n\">dataset</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">batch_sizes</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">task_datasets</span><span class=\"p\">):</span>\n            <span class=\"n\">data_loader</span> <span class=\"o\">=</span> <span class=\"n\">make_data_loader</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"n\">batch_size</span><span class=\"o\">=</span><span class=\"n\">batch_size</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">)</span>  <span class=\"c1\"># TODO: cuda_device_id</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">iterators</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"nb\">iter</span><span class=\"p\">(</span><span class=\"n\">data_loader</span><span class=\"p\">))</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">available_iterators</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">iterators</span><span class=\"p\">)))</span></div>\n\n<div class=\"viewcode-block\" id=\"MultiTaskBertDataset.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.MultiTaskBertDataset.collate_fn\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">pass_tensor</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n            <span class=\"n\">task_idx</span><span class=\"p\">,</span> <span class=\"n\">tensor_datas</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">data</span><span class=\"p\">)</span>\n            <span class=\"n\">tensor_batch</span> <span class=\"o\">=</span> <span class=\"n\">tensor_datas</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n            <span class=\"n\">task_id_tensor</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">LongTensor</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">task_idx</span><span class=\"p\">))</span>\n            <span class=\"k\">if</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">():</span>\n                <span class=\"n\">task_id_tensor</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"p\">)</span>\n            <span class=\"n\">tensor_batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;task_index&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">task_id_tensor</span>\n            <span class=\"k\">return</span> <span class=\"n\">tensor_batch</span>\n        <span class=\"k\">return</span> <span class=\"n\">pass_tensor</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"c1\"># self.lazy_evaluation(index)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">available_iterators</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">init_iterators</span><span class=\"p\">()</span>\n\n        <span class=\"n\">random_index</span> <span class=\"o\">=</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">available_iterators</span><span class=\"p\">)</span>\n        <span class=\"n\">task_iterator</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">iterators</span><span class=\"p\">[</span><span class=\"n\">random_index</span><span class=\"p\">]</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">random_index</span><span class=\"p\">,</span> <span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">task_iterator</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">StopIteration</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">available_iterators</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">random_index</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__getitem__</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">multi_dataset_size</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">dataset_properties</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;total_count&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">(),</span>\n            <span class=\"s2\">&quot;dataset_count&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">iterators</span><span class=\"p\">),</span>\n            <span class=\"s2\">&quot;task_dataset_sizes&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">dataset</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">task_datasets</span><span class=\"p\">],</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">dataset_properties</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/bert/regression.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.bert.regression &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.bert.regression</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.bert.regression</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.collate</span> <span class=\"k\">import</span> <span class=\"n\">PadCollator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.base</span> <span class=\"k\">import</span> <span class=\"n\">DatasetBase</span>\n\n\n<div class=\"viewcode-block\" id=\"RegressionBertDataset\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.RegressionBertDataset\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">RegressionBertDataset</span><span class=\"p\">(</span><span class=\"n\">DatasetBase</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Dataset for Regression using BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        batch: Batch DTO (claf.data.batch)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        helper: helper from data_reader</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">RegressionBertDataset</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;reg_bert&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helper</span>\n\n        <span class=\"c1\"># Features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n        <span class=\"n\">SEP_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sep_token&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_bert_token_types</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"n\">SEP_token</span><span class=\"o\">=</span><span class=\"n\">SEP_token</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">]</span>  <span class=\"c1\"># for lazy evaluation</span>\n\n        <span class=\"c1\"># Labels</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">data_index</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">)}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;score&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;score&quot;</span><span class=\"p\">],</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">label_scores</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;score&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"RegressionBertDataset.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.RegressionBertDataset.collate_fn\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; collate: indexed features and labels -&gt; tensor &quot;&quot;&quot;</span>\n        <span class=\"n\">collator</span> <span class=\"o\">=</span> <span class=\"n\">PadCollator</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">pad_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">make_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n            <span class=\"n\">data_idxs</span><span class=\"p\">,</span> <span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">label_scores</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n            <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;score&quot;</span><span class=\"p\">:</span> <span class=\"n\">label_scores</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">collator</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">make_tensor_fn</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_evaluation</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">label_scores</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">dataset_properties</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;total_count&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">(),</span>\n            <span class=\"s2\">&quot;sequence_maxlen&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_maxlen</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">dataset_properties</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">sequence_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"RegressionBertDataset.get_id\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.RegressionBertDataset.get_id\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"RegressionBertDataset.get_ground_truth\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.RegressionBertDataset.get_ground_truth\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truth</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_id</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">]</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/bert/seq_cls.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.bert.seq_cls &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.bert.seq_cls</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.bert.seq_cls</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.collate</span> <span class=\"k\">import</span> <span class=\"n\">PadCollator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.base</span> <span class=\"k\">import</span> <span class=\"n\">DatasetBase</span>\n\n\n<div class=\"viewcode-block\" id=\"SeqClsBertDataset\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SeqClsBertDataset</span><span class=\"p\">(</span><span class=\"n\">DatasetBase</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Dataset for Sequence Classification using BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        batch: Batch DTO (claf.data.batch)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        helper: helper from data_reader</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertDataset</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;seq_cls_bert&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helper</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx2text&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n        <span class=\"n\">SEP_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sep_token&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_bert_token_types</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"n\">SEP_token</span><span class=\"o\">=</span><span class=\"n\">SEP_token</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">]</span>  <span class=\"c1\"># for lazy evaluation</span>\n\n        <span class=\"c1\"># Labels</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">data_index</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">)}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classes</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">],</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_text</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"SeqClsBertDataset.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset.collate_fn\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; collate: indexed features and labels -&gt; tensor &quot;&quot;&quot;</span>\n        <span class=\"n\">collator</span> <span class=\"o\">=</span> <span class=\"n\">PadCollator</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">pad_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">make_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n            <span class=\"n\">data_idxs</span><span class=\"p\">,</span> <span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">class_idxs</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n            <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_idxs</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">collator</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">make_tensor_fn</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_evaluation</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">dataset_properties</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;total_count&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">(),</span>\n            <span class=\"s2\">&quot;num_classes&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_classes</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sequence_maxlen&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_maxlen</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">dataset_properties</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">num_classes</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">sequence_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"SeqClsBertDataset.get_id\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset.get_id\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SeqClsBertDataset.get_ground_truth\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset.get_ground_truth\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truth</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_id</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classes</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SeqClsBertDataset.get_class_text_with_idx\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset.get_class_text_with_idx\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_class_text_with_idx</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">class_index</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">class_index</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;class_index is required.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span><span class=\"p\">[</span><span class=\"n\">class_index</span><span class=\"p\">]</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/bert/squad.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.bert.squad &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.bert.squad</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.bert.squad</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.collate</span> <span class=\"k\">import</span> <span class=\"n\">PadCollator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.base</span> <span class=\"k\">import</span> <span class=\"n\">DatasetBase</span>\n\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SQuADBertDataset\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SQuADBertDataset</span><span class=\"p\">(</span><span class=\"n\">DatasetBase</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    SQuAD Dataset for BERT</span>\n<span class=\"sd\">        compatible with v1.1 and v2.0</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        batch: Batch DTO (claf.data.batch)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        helper: helper from data_reader</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SQuADBertDataset</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;squad_bert&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helper</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">raw_dataset</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;raw_dataset&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n        <span class=\"n\">SEP_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sep_token&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_bert_token_types</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"n\">SEP_token</span><span class=\"o\">=</span><span class=\"n\">SEP_token</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">]</span>  <span class=\"c1\"># for lazy_evaluation</span>\n\n        <span class=\"c1\"># Labels</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">data_index</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">)}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"p\">(</span>\n                <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">],</span>\n                <span class=\"p\">(</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start&quot;</span><span class=\"p\">],</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span>\n        <span class=\"p\">}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_starts</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_ends</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answerables</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.collate_fn\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; collate: indexed features and labels -&gt; tensor &quot;&quot;&quot;</span>\n        <span class=\"n\">collator</span> <span class=\"o\">=</span> <span class=\"n\">PadCollator</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">pad_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">make_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n            <span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span> <span class=\"n\">answer_starts</span><span class=\"p\">,</span> <span class=\"n\">answer_ends</span><span class=\"p\">,</span> <span class=\"n\">answerables</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span>\n                <span class=\"o\">*</span><span class=\"n\">data</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">answer_starts</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">answer_ends</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">:</span> <span class=\"n\">answerables</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">collator</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">make_tensor_fn</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_evaluation</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_starts</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_ends</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answerables</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">dataset_properties</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;total_count&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">(),</span>\n            <span class=\"s2\">&quot;HasAns_count&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">([</span><span class=\"kc\">True</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">v</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"s2\">&quot;NoAns_count&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">([</span><span class=\"kc\">False</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">v</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">]),</span>\n            <span class=\"s2\">&quot;bert_input_maxlen&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_maxlen</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">dataset_properties</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">bert_input_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_qid\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_qid\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_qid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;#&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">qid</span><span class=\"p\">:</span>\n            <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"n\">qid</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;#&quot;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">qid</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_id\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_id\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_qid_index\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_qid_index\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_qid_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;#&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">qid</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">qid</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;#&quot;</span><span class=\"p\">)[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_context\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_context\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_context</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_ground_truths\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_ground_truths\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truths</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"n\">answer_texts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">answerable</span><span class=\"p\">,</span> <span class=\"n\">answer_span</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answers</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">answer_texts</span><span class=\"p\">,</span> <span class=\"n\">answerable</span><span class=\"p\">,</span> <span class=\"n\">answer_span</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_predict\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_predict\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_text_with_index</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_text_with_index\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_text_with_index\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_text_with_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">data_index</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;data_id or text is required.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_context</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"n\">bert_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_bert_tokens</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"p\">(</span>\n            <span class=\"n\">start</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">0</span>\n            <span class=\"ow\">or</span> <span class=\"n\">end</span> <span class=\"o\">&gt;=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_token</span><span class=\"p\">)</span>\n            <span class=\"ow\">or</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">start</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span>\n            <span class=\"ow\">or</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">end</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span>\n        <span class=\"p\">):</span>\n            <span class=\"c1\"># No_Answer Case</span>\n            <span class=\"k\">return</span> <span class=\"s2\">&quot;&lt;noanswer&gt;&quot;</span>\n\n        <span class=\"n\">char_start</span> <span class=\"o\">=</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">start</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">char_end</span> <span class=\"o\">=</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">end</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">char_start</span> <span class=\"o\">&gt;</span> <span class=\"n\">char_end</span> <span class=\"ow\">or</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">context_text</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"n\">char_end</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s2\">&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">context_text</span><span class=\"p\">[</span><span class=\"n\">char_start</span><span class=\"p\">:</span><span class=\"n\">char_end</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_bert_tokens\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_bert_tokens\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_bert_tokens</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"n\">index</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid_index</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">index</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;bert_qid must have &#39;bert_index&#39; (bert_id: qid#bert_index)&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">bert_index</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;bert_tokens_</span><span class=\"si\">{index}</span><span class=\"s2\">&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"n\">bert_index</span><span class=\"p\">]</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/bert/tok_cls.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.bert.tok_cls &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.bert.tok_cls</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.bert.tok_cls</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.collate</span> <span class=\"k\">import</span> <span class=\"n\">FeatLabelPadCollator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.base</span> <span class=\"k\">import</span> <span class=\"n\">DatasetBase</span>\n\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.TokClsBertDataset\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">TokClsBertDataset</span><span class=\"p\">(</span><span class=\"n\">DatasetBase</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Dataset for Token Classification</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        batch: Batch DTO (claf.data.batch)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        helper: helper from data_reader</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">TokClsBertDataset</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;tok_cls_bert&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helper</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idx2text</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idx2text&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n        <span class=\"n\">SEP_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sep_token&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_bert_token_types</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"n\">SEP_token</span><span class=\"o\">=</span><span class=\"n\">SEP_token</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tagged_sub_token_idxs</span> <span class=\"o\">=</span> <span class=\"p\">[{</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">:</span> <span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;tagged_sub_token_idxs&quot;</span><span class=\"p\">]}</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[{</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">:</span> <span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;num_tokens&quot;</span><span class=\"p\">]}</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">]</span>  <span class=\"c1\"># for lazy evaluation</span>\n\n        <span class=\"c1\"># Labels</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">data_index</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">)}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tags</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">],</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span>\n        <span class=\"p\">}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_texts</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idxs</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ignore_tag_idx</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;ignore_tag_idx&quot;</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.collate_fn\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; collate: indexed features and labels -&gt; tensor &quot;&quot;&quot;</span>\n        <span class=\"n\">collator</span> <span class=\"o\">=</span> <span class=\"n\">FeatLabelPadCollator</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">pad_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">make_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n            <span class=\"n\">data_idxs</span><span class=\"p\">,</span> <span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">tagged_token_idxs</span><span class=\"p\">,</span> <span class=\"n\">num_tokens</span><span class=\"p\">,</span> <span class=\"n\">tag_idxs_list</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n            <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;tagged_sub_token_idxs&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">tagged_token_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;num_tokens&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">num_tokens</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">:</span> <span class=\"n\">tag_idxs_list</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">collator</span><span class=\"p\">(</span>\n                <span class=\"n\">features</span><span class=\"p\">,</span>\n                <span class=\"n\">labels</span><span class=\"p\">,</span>\n                <span class=\"n\">apply_pad_labels</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">],</span>\n                <span class=\"n\">apply_pad_values</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ignore_tag_idx</span><span class=\"p\">]</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">make_tensor_fn</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_evaluation</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tagged_sub_token_idxs</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tokens</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idxs</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">dataset_properties</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;total_count&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">(),</span>\n            <span class=\"s2\">&quot;num_tags&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tags</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sequence_maxlen&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_maxlen</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;tags&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idx2text</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">dataset_properties</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">num_tags</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idx2text</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">sequence_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset.get_id\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.get_id\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset.get_ground_truth\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.get_ground_truth\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truth</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_id</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tags</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset.get_tag_texts_with_idxs\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.get_tag_texts_with_idxs\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_tag_texts_with_idxs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tag_idxs</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_tag_text_with_idx</span><span class=\"p\">(</span><span class=\"n\">tag_idx</span><span class=\"p\">)</span><span class=\"k\">for</span> <span class=\"n\">tag_idx</span> <span class=\"ow\">in</span> <span class=\"n\">tag_idxs</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset.get_tag_text_with_idx\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.get_tag_text_with_idx\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_tag_text_with_idx</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tag_index</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">tag_index</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;tag_index is required.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idx2text</span><span class=\"p\">[</span><span class=\"n\">tag_index</span><span class=\"p\">]</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/seq_cls.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.seq_cls &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.seq_cls</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.seq_cls</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.collate</span> <span class=\"k\">import</span> <span class=\"n\">PadCollator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.base</span> <span class=\"k\">import</span> <span class=\"n\">DatasetBase</span>\n\n\n<div class=\"viewcode-block\" id=\"SeqClsDataset\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SeqClsDataset</span><span class=\"p\">(</span><span class=\"n\">DatasetBase</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Dataset for Sequence Classification</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        batch: Batch DTO (claf.data.batch)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        helper: helper from data_reader</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SeqClsDataset</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;seq_cls&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helper</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx2text&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequences</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">}</span>\n\n        <span class=\"c1\"># Features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_idxs</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_idxs</span><span class=\"p\">]</span>  <span class=\"c1\"># for lazy evaluation</span>\n\n        <span class=\"c1\"># Labels</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">data_index</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">)}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classes</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">],</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_text</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"SeqClsDataset.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset.collate_fn\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; collate: indexed features and labels -&gt; tensor &quot;&quot;&quot;</span>\n        <span class=\"n\">collator</span> <span class=\"o\">=</span> <span class=\"n\">PadCollator</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">pad_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">make_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n            <span class=\"n\">data_idxs</span><span class=\"p\">,</span> <span class=\"n\">sequence_idxs</span><span class=\"p\">,</span> <span class=\"n\">class_idxs</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n            <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">sequence_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_idxs</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">collator</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">make_tensor_fn</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_evaluation</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_idxs</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">dataset_properties</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;total_count&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">(),</span>\n            <span class=\"s2\">&quot;num_classes&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_classes</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sequence_maxlen&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_maxlen</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">dataset_properties</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">num_classes</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">sequence_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_idxs</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"SeqClsDataset.get_id\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset.get_id\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SeqClsDataset.get_ground_truth\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset.get_ground_truth\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truth</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_id</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classes</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SeqClsDataset.get_class_text_with_idx\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset.get_class_text_with_idx\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_class_text_with_idx</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">class_index</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">class_index</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;class_index is required.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span><span class=\"p\">[</span><span class=\"n\">class_index</span><span class=\"p\">]</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/seq_cls_bert.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.seq_cls_bert &mdash; CLaF 0.1.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.seq_cls_bert</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.seq_cls_bert</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.collate</span> <span class=\"k\">import</span> <span class=\"n\">PadCollator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.base</span> <span class=\"k\">import</span> <span class=\"n\">DatasetBase</span>\n\n\n<div class=\"viewcode-block\" id=\"SeqClsBertDataset\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.seq_cls_bert.SeqClsBertDataset\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SeqClsBertDataset</span><span class=\"p\">(</span><span class=\"n\">DatasetBase</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Dataset for Sequence Classification using BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        batch: Batch DTO (claf.data.batch)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        helper: helper from data_reader</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertDataset</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;seq_cls_bert&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helper</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">raw_dataset</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;raw_dataset&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx2text&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n        <span class=\"n\">SEP_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sep_token&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_bert_token_types</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"n\">SEP_token</span><span class=\"o\">=</span><span class=\"n\">SEP_token</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">]</span>  <span class=\"c1\"># for lazy evaluation</span>\n\n        <span class=\"c1\"># Labels</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">data_index</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">)}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classes</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">],</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_text</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"SeqClsBertDataset.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.seq_cls_bert.SeqClsBertDataset.collate_fn\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; collate: indexed features and labels -&gt; tensor &quot;&quot;&quot;</span>\n        <span class=\"n\">collator</span> <span class=\"o\">=</span> <span class=\"n\">PadCollator</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">make_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n            <span class=\"n\">data_idxs</span><span class=\"p\">,</span> <span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">class_idxs</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n            <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_idxs</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">collator</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">make_tensor_fn</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_evaluation</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">dataset_properties</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;total_count&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">(),</span>\n            <span class=\"s2\">&quot;num_classes&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_classes</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sequence_maxlen&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_maxlen</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">dataset_properties</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">num_classes</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">sequence_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"SeqClsBertDataset.get_id\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.seq_cls_bert.SeqClsBertDataset.get_id\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SeqClsBertDataset.get_ground_truth\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.seq_cls_bert.SeqClsBertDataset.get_ground_truth\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truth</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_id</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classes</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SeqClsBertDataset.get_class_text_with_idx\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.seq_cls_bert.SeqClsBertDataset.get_class_text_with_idx\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_class_text_with_idx</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">class_index</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">class_index</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;class_index is required.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span><span class=\"p\">[</span><span class=\"n\">class_index</span><span class=\"p\">]</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/squad.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.squad &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.squad</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.squad</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.collate</span> <span class=\"k\">import</span> <span class=\"n\">PadCollator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.base</span> <span class=\"k\">import</span> <span class=\"n\">DatasetBase</span>\n\n\n<div class=\"viewcode-block\" id=\"SQuADDataset\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SQuADDataset</span><span class=\"p\">(</span><span class=\"n\">DatasetBase</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    SQuAD Dataset</span>\n<span class=\"sd\">        compatible with v1.1 and v2.0</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        batch: Batch DTO (claf.data.batch)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        helper: helper from data_reader</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SQuADDataset</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;squad&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helper</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">raw_dataset</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;raw_dataset&quot;</span><span class=\"p\">]</span>  <span class=\"c1\"># for SQuAD official metric</span>\n\n        <span class=\"c1\"># Features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_idx</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_idx</span><span class=\"p\">]</span>  <span class=\"c1\"># for lazy_evaluation</span>\n\n        <span class=\"c1\"># Labels</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">data_index</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">)}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"p\">(</span>\n                <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">],</span>\n                <span class=\"p\">(</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start&quot;</span><span class=\"p\">],</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span>\n        <span class=\"p\">}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_starts</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_ends</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answerables</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"SQuADDataset.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.collate_fn\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; collate: indexed features and labels -&gt; tensor &quot;&quot;&quot;</span>\n        <span class=\"n\">collator</span> <span class=\"o\">=</span> <span class=\"n\">PadCollator</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">pad_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">make_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n            <span class=\"n\">context_idxs</span><span class=\"p\">,</span> <span class=\"n\">question_idxs</span><span class=\"p\">,</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span> \\\n                <span class=\"n\">answer_starts</span><span class=\"p\">,</span> <span class=\"n\">answer_ends</span><span class=\"p\">,</span> <span class=\"n\">answerables</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n            <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;context&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">context_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">question_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">answer_starts</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">answer_ends</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">:</span> <span class=\"n\">answerables</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">collator</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">make_tensor_fn</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_evaluation</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_starts</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_ends</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answerables</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">dataset_properties</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;total_count&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">(),</span>\n            <span class=\"s2\">&quot;HasAns_count&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">([</span><span class=\"kc\">True</span> <span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answerables</span> <span class=\"k\">if</span> <span class=\"n\">item</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"s2\">&quot;NoAns_count&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">([</span><span class=\"kc\">False</span> <span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answerables</span> <span class=\"k\">if</span> <span class=\"n\">item</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">]),</span>\n            <span class=\"s2\">&quot;context_maxlen&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_maxlen</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;question_maxlen&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_maxlen</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">dataset_properties</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">context_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_idx</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">question_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_idx</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"SQuADDataset.get_qid\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_qid\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_qid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADDataset.get_context\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_context\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_context</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADDataset.get_text_span\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_text_span\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_text_span</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"s2\">&quot;text_span&quot;</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADDataset.get_ground_truths\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_ground_truths\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truths</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"n\">answer_texts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">answerable</span><span class=\"p\">,</span> <span class=\"n\">answer_span</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answers</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">answer_texts</span><span class=\"p\">,</span> <span class=\"n\">answerable</span><span class=\"p\">,</span> <span class=\"n\">answer_span</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADDataset.get_predict\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_predict\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_text_with_index</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADDataset.get_text_with_index\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_text_with_index\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_text_with_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">data_index</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;qid or text is required.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_context</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"n\">text_span</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_text_span</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">start</span> <span class=\"o\">&gt;=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">text_span</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"n\">end</span> <span class=\"o\">&gt;=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">text_span</span><span class=\"p\">):</span>\n            <span class=\"c1\"># No_Answer Case</span>\n            <span class=\"k\">return</span> <span class=\"s2\">&quot;&lt;noanswer&gt;&quot;</span>\n\n        <span class=\"n\">char_start</span> <span class=\"o\">=</span> <span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"n\">start</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">char_end</span> <span class=\"o\">=</span> <span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"n\">end</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">char_start</span> <span class=\"o\">&gt;</span> <span class=\"n\">char_end</span> <span class=\"ow\">or</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">context_text</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"n\">char_end</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s2\">&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">context_text</span><span class=\"p\">[</span><span class=\"n\">char_start</span><span class=\"p\">:</span><span class=\"n\">char_end</span><span class=\"p\">]</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/squad_bert.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.squad_bert &mdash; CLaF 0.1.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.squad_bert</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.squad_bert</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.collate</span> <span class=\"k\">import</span> <span class=\"n\">PadCollator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.base</span> <span class=\"k\">import</span> <span class=\"n\">DatasetBase</span>\n\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad_bert.SQuADBertDataset\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SQuADBertDataset</span><span class=\"p\">(</span><span class=\"n\">DatasetBase</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    SQuAD Dataset for BERT</span>\n<span class=\"sd\">        compatible with v1.1 and v2.0</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        batch: Batch DTO (claf.data.batch)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        helper: helper from data_reader</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SQuADBertDataset</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;squad_bert&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helper</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">raw_dataset</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;raw_dataset&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n        <span class=\"n\">SEP_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sep_token&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_bert_token_types</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"n\">SEP_token</span><span class=\"o\">=</span><span class=\"n\">SEP_token</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">]</span>  <span class=\"c1\"># for lazy_evaluation</span>\n\n        <span class=\"c1\"># Labels</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">data_index</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">)}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"p\">(</span>\n                <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">],</span>\n                <span class=\"p\">(</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start&quot;</span><span class=\"p\">],</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span>\n        <span class=\"p\">}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_starts</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_ends</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answerables</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad_bert.SQuADBertDataset.collate_fn\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; collate: indexed features and labels -&gt; tensor &quot;&quot;&quot;</span>\n        <span class=\"n\">collator</span> <span class=\"o\">=</span> <span class=\"n\">PadCollator</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">make_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n            <span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span> <span class=\"n\">answer_starts</span><span class=\"p\">,</span> <span class=\"n\">answer_ends</span><span class=\"p\">,</span> <span class=\"n\">answerables</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span>\n                <span class=\"o\">*</span><span class=\"n\">data</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;answer_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">answer_starts</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">answer_ends</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">:</span> <span class=\"n\">answerables</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">collator</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">make_tensor_fn</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_evaluation</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_starts</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_ends</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answerables</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">dataset_properties</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;total_count&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">(),</span>\n            <span class=\"s2\">&quot;HasAns_count&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">([</span><span class=\"kc\">True</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">v</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"s2\">&quot;NoAns_count&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">([</span><span class=\"kc\">False</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">v</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">]),</span>\n            <span class=\"s2\">&quot;bert_input_maxlen&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_maxlen</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">dataset_properties</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">bert_input_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_qid\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad_bert.SQuADBertDataset.get_qid\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_qid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;#&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">qid</span><span class=\"p\">:</span>\n            <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"n\">qid</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;#&quot;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">qid</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_qid_index\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad_bert.SQuADBertDataset.get_qid_index\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_qid_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qids</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;#&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">qid</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">qid</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;#&quot;</span><span class=\"p\">)[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_context\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad_bert.SQuADBertDataset.get_context\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_context</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_ground_truths\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad_bert.SQuADBertDataset.get_ground_truths\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truths</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"n\">answer_texts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">answerable</span><span class=\"p\">,</span> <span class=\"n\">answer_span</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answers</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">answer_texts</span><span class=\"p\">,</span> <span class=\"n\">answerable</span><span class=\"p\">,</span> <span class=\"n\">answer_span</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_predict\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad_bert.SQuADBertDataset.get_predict\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_text_with_index</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_text_with_index\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad_bert.SQuADBertDataset.get_text_with_index\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_text_with_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">data_index</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;data_id or text is required.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_context</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"n\">bert_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_bert_tokens</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"p\">(</span>\n            <span class=\"n\">start</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">0</span>\n            <span class=\"ow\">or</span> <span class=\"n\">end</span> <span class=\"o\">&gt;=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_token</span><span class=\"p\">)</span>\n            <span class=\"ow\">or</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">start</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span>\n            <span class=\"ow\">or</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">end</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span>\n        <span class=\"p\">):</span>\n            <span class=\"c1\"># No_Answer Case</span>\n            <span class=\"k\">return</span> <span class=\"s2\">&quot;&lt;noanswer&gt;&quot;</span>\n\n        <span class=\"n\">char_start</span> <span class=\"o\">=</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">start</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">char_end</span> <span class=\"o\">=</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">end</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">char_start</span> <span class=\"o\">&gt;</span> <span class=\"n\">char_end</span> <span class=\"ow\">or</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">context_text</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"n\">char_end</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s2\">&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">context_text</span><span class=\"p\">[</span><span class=\"n\">char_start</span><span class=\"p\">:</span><span class=\"n\">char_end</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADBertDataset.get_bert_tokens\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.squad_bert.SQuADBertDataset.get_bert_tokens\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_bert_tokens</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"n\">index</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_qid_index</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">index</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;bert_qid must have &#39;bert_index&#39; (bert_id: qid#bert_index)&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">bert_index</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;bert_tokens_</span><span class=\"si\">{index}</span><span class=\"s2\">&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"n\">bert_index</span><span class=\"p\">]</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/tok_cls_bert.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.tok_cls_bert &mdash; CLaF 0.1.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.tok_cls_bert</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.tok_cls_bert</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"k\">import</span> <span class=\"n\">defaultdict</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">from</span> <span class=\"nn\">seqeval.metrics.sequence_labeling</span> <span class=\"k\">import</span> <span class=\"n\">get_entities</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.collate</span> <span class=\"k\">import</span> <span class=\"n\">FeatLabelPadCollator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.base</span> <span class=\"k\">import</span> <span class=\"n\">DatasetBase</span>\n\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.tok_cls_bert.TokClsBertDataset\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">TokClsBertDataset</span><span class=\"p\">(</span><span class=\"n\">DatasetBase</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Dataset for Token Classification</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        batch: Batch DTO (claf.data.batch)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        helper: helper from data_reader</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">TokClsBertDataset</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;tok_cls_bert&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helper</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">raw_dataset</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;raw_dataset&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idx2text</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idx2text&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n        <span class=\"n\">SEP_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sep_token&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_bert_token_types</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"n\">SEP_token</span><span class=\"o\">=</span><span class=\"n\">SEP_token</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tagged_sub_token_idxs</span> <span class=\"o\">=</span> <span class=\"p\">[{</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">:</span> <span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;tagged_sub_token_idxs&quot;</span><span class=\"p\">]}</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[{</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">:</span> <span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;num_tokens&quot;</span><span class=\"p\">]}</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">]</span>  <span class=\"c1\"># for lazy evaluation</span>\n\n        <span class=\"c1\"># Labels</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">data_index</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">)}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tags</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">],</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span>\n        <span class=\"p\">}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_texts</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idxs</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ignore_tag_idx</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;ignore_tag_idx&quot;</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.tok_cls_bert.TokClsBertDataset.collate_fn\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; collate: indexed features and labels -&gt; tensor &quot;&quot;&quot;</span>\n        <span class=\"n\">collator</span> <span class=\"o\">=</span> <span class=\"n\">FeatLabelPadCollator</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">make_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n            <span class=\"n\">data_idxs</span><span class=\"p\">,</span> <span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">tagged_token_idxs</span><span class=\"p\">,</span> <span class=\"n\">num_tokens</span><span class=\"p\">,</span> <span class=\"n\">tag_idxs_list</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n            <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">bert_input_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">token_type_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;tagged_sub_token_idxs&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">tagged_token_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;num_tokens&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">num_tokens</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">:</span> <span class=\"n\">tag_idxs_list</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">collator</span><span class=\"p\">(</span>\n                <span class=\"n\">features</span><span class=\"p\">,</span>\n                <span class=\"n\">labels</span><span class=\"p\">,</span>\n                <span class=\"n\">apply_pad_labels</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">],</span>\n                <span class=\"n\">apply_pad_values</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ignore_tag_idx</span><span class=\"p\">]</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">make_tensor_fn</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_evaluation</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_type_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tagged_sub_token_idxs</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tokens</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idxs</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">dataset_properties</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;total_count&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">(),</span>\n            <span class=\"s2\">&quot;num_tags&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tags</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sequence_maxlen&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_maxlen</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;tags&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idx2text</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">dataset_properties</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">num_tags</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idx2text</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">sequence_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_input_idx</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset.get_id\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.tok_cls_bert.TokClsBertDataset.get_id\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_ids</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset.get_ground_truth\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.tok_cls_bert.TokClsBertDataset.get_ground_truth\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truth</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_id</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tags</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset.get_tag_texts_with_idxs\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.tok_cls_bert.TokClsBertDataset.get_tag_texts_with_idxs\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_tag_texts_with_idxs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tag_idxs</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_tag_text_with_idx</span><span class=\"p\">(</span><span class=\"n\">tag_idx</span><span class=\"p\">)</span><span class=\"k\">for</span> <span class=\"n\">tag_idx</span> <span class=\"ow\">in</span> <span class=\"n\">tag_idxs</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"TokClsBertDataset.get_tag_text_with_idx\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.tok_cls_bert.TokClsBertDataset.get_tag_text_with_idx\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_tag_text_with_idx</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tag_index</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">tag_index</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;tag_index is required.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_idx2text</span><span class=\"p\">[</span><span class=\"n\">tag_index</span><span class=\"p\">]</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/dataset/wikisql.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset.wikisql &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.dataset.wikisql</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.dataset.wikisql</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.collate</span> <span class=\"k\">import</span> <span class=\"n\">PadCollator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.base</span> <span class=\"k\">import</span> <span class=\"n\">DatasetBase</span>\n\n\n\n<div class=\"viewcode-block\" id=\"WikiSQLDataset\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">WikiSQLDataset</span><span class=\"p\">(</span><span class=\"n\">DatasetBase</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    WikiSQL Dataset</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        batch: Batch DTO (claf.data.batch)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        helper: helper from data_reader</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">WikiSQLDataset</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;wikisql&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helper</span>\n\n        <span class=\"c1\"># Features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;column&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_idx</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_idx</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Labels</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">data_index</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">)}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_idx</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">table_idx</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">data_index</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">)}</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenized_question</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;tokenized_question&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">}</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]:</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;agg_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;aggregator_idx&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sel_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;select_column_idx&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;conds_num&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;conditions_num&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;conds_col&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;conditions_column_idx&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;conds_op&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;conditions_operator_idx&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;conds_val_str&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;conditions_value_string&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;conds_val_pos&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;conditions_value_position&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sql_query&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql_query&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;execution_result&quot;</span><span class=\"p\">:</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;execution_result&quot;</span><span class=\"p\">],</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">for</span> <span class=\"n\">label</span> <span class=\"ow\">in</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">labels</span>\n        <span class=\"p\">}</span>\n\n<div class=\"viewcode-block\" id=\"WikiSQLDataset.collate_fn\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset.collate_fn\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">collate_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; collate: indexed features and labels -&gt; tensor &quot;&quot;&quot;</span>\n        <span class=\"n\">collator</span> <span class=\"o\">=</span> <span class=\"n\">PadCollator</span><span class=\"p\">(</span><span class=\"n\">cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">cuda_device_id</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">pad_index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">make_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n            <span class=\"n\">column_idxs</span><span class=\"p\">,</span> <span class=\"n\">question_idxs</span><span class=\"p\">,</span> <span class=\"n\">data_idxs</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n            <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;column&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">column_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">:</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">question_idxs</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_idxs</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">collator</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">make_tensor_fn</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_evaluation</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_idx</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_indices</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_idx</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">dataset_properties</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;total_count&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"fm\">__len__</span><span class=\"p\">(),</span>\n            <span class=\"s2\">&quot;question_maxlen&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_maxlen</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">dataset_properties</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">question_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_feature_maxlen</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_idx</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"WikiSQLDataset.get_id\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset.get_id\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">:</span>\n            <span class=\"n\">data_index</span> <span class=\"o\">=</span> <span class=\"n\">data_index</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_idx</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"WikiSQLDataset.get_table_id\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset.get_table_id\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_table_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">:</span>\n            <span class=\"n\">data_index</span> <span class=\"o\">=</span> <span class=\"n\">data_index</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">table_idx</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"WikiSQLDataset.get_tokenized_question\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset.get_tokenized_question\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_tokenized_question</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenized_question</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"WikiSQLDataset.get_ground_truth\"><a class=\"viewcode-back\" href=\"../../../../claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset.get_ground_truth\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_ground_truth</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_index</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">:</span>\n            <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"n\">data_index</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">]</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/base.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.base &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.base</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.base</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span><span class=\"p\">,</span> <span class=\"n\">DataHandler</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf</span> <span class=\"k\">import</span> <span class=\"n\">utils</span> <span class=\"k\">as</span> <span class=\"n\">common_utils</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"DataReader\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.base.DataReader\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DataReader</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    DataReader Base Class</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: dictionary of consisting (&#39;train&#39; and &#39;vaild&#39;) file_path</span>\n<span class=\"sd\">        dataset_obj: Dataset Object (claf.data.dataset.base)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">dataset_obj</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">file_paths</span> <span class=\"o\">=</span> <span class=\"n\">file_paths</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dataset_obj</span> <span class=\"o\">=</span> <span class=\"n\">dataset_obj</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span> <span class=\"o\">=</span> <span class=\"n\">DataHandler</span><span class=\"p\">(</span><span class=\"n\">cache_path</span><span class=\"o\">=</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">DATASET</span><span class=\"p\">)</span>  <span class=\"c1\"># for Concrete DataReader</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_columns</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n<div class=\"viewcode-block\" id=\"DataReader.filter_texts\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.base.DataReader.filter_texts\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">filter_texts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">dataset</span><span class=\"p\">):</span>\n        <span class=\"n\">texts</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">append_texts</span><span class=\"p\">(</span><span class=\"n\">datas</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">data</span> <span class=\"ow\">in</span> <span class=\"n\">datas</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                    <span class=\"k\">if</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_columns</span><span class=\"p\">:</span>\n                        <span class=\"n\">texts</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">data_type</span><span class=\"p\">,</span> <span class=\"n\">dataset</span> <span class=\"ow\">in</span> <span class=\"n\">dataset</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">append_texts</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">)</span>\n            <span class=\"c1\"># append_texts(dataset.labels)</span>\n\n        <span class=\"n\">texts</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">common_utils</span><span class=\"o\">.</span><span class=\"n\">flatten</span><span class=\"p\">(</span><span class=\"n\">texts</span><span class=\"p\">))</span>\n        <span class=\"n\">texts</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">texts</span><span class=\"p\">))</span>  <span class=\"c1\"># remove duplicate</span>\n        <span class=\"k\">return</span> <span class=\"n\">texts</span></div>\n\n<div class=\"viewcode-block\" id=\"DataReader.read\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.base.DataReader.read\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; read with Concrete DataReader each type &quot;&quot;&quot;</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">file_paths</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;file_paths type is must be dict. not {type(self.file_paths)}&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Start read dataset&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">datasets</span><span class=\"p\">,</span> <span class=\"n\">helpers</span> <span class=\"o\">=</span> <span class=\"p\">{},</span> <span class=\"p\">{}</span>\n        <span class=\"k\">for</span> <span class=\"n\">data_type</span><span class=\"p\">,</span> <span class=\"n\">file_path</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">file_paths</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"n\">data_type</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n\n            <span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">)</span>\n\n            <span class=\"n\">datasets</span><span class=\"p\">[</span><span class=\"n\">data_type</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">batch</span>\n            <span class=\"n\">helpers</span><span class=\"p\">[</span><span class=\"n\">data_type</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">helper</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Complete read dataset...</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">datasets</span><span class=\"p\">,</span> <span class=\"n\">helpers</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span>\n\n<div class=\"viewcode-block\" id=\"DataReader.read_one_example\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.base.DataReader.read_one_example\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">read_one_example</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">return</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">helper</span></div>\n\n<div class=\"viewcode-block\" id=\"DataReader.convert_to_dataset\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.base.DataReader.convert_to_dataset\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">convert_to_dataset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">datas</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helpers</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Batch to Dataset &quot;&quot;&quot;</span>\n        <span class=\"n\">datasets</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">batch</span> <span class=\"ow\">in</span> <span class=\"n\">datas</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"n\">batch</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">datasets</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dataset_obj</span><span class=\"p\">(</span><span class=\"n\">batch</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"n\">helpers</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">])</span>\n            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{k}</span><span class=\"s2\"> dataset. </span><span class=\"si\">{datasets[k]}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">datasets</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/cola.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.cola &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.cola</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.cola</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"CoLABertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.bert.html#claf.data.reader.CoLABertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:cola_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">CoLABertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    CoLA DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CoLABertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/conll2003.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.conll2003 &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.conll2003</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.conll2003</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">from</span> <span class=\"nn\">itertools</span> <span class=\"k\">import</span> <span class=\"n\">chain</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">TokClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"CoNLL2003BertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.bert.html#claf.data.reader.CoNLL2003BertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:conll2003_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">CoNLL2003BertReader</span><span class=\"p\">(</span><span class=\"n\">TokClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">     CoNLL2003 for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: file paths (train and dev)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        ignore_tag_idx: prediction results that have this number as ground-truth idx are ignored</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">ignore_tag_idx</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CoNLL2003BertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">lang_code</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">ignore_tag_idx</span><span class=\"o\">=</span><span class=\"n\">ignore_tag_idx</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">):</span>\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">texts</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">texts</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">text</span> <span class=\"ow\">in</span> <span class=\"n\">texts</span><span class=\"p\">:</span>\n            <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"n\">text</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">example</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"p\">[</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokens</span><span class=\"p\">]))</span>\n                <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                    <span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot; &quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">example</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]),</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_key</span><span class=\"p\">:</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">example</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n                <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">data</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_tag_dicts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">tags</span> <span class=\"o\">=</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">chain</span><span class=\"o\">.</span><span class=\"n\">from_iterable</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_key</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">d</span> <span class=\"ow\">in</span> <span class=\"n\">data</span><span class=\"p\">))))</span>\n\n        <span class=\"n\">tag_idx2text</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">tag_idx</span><span class=\"p\">:</span> <span class=\"n\">tag_text</span> <span class=\"k\">for</span> <span class=\"n\">tag_idx</span><span class=\"p\">,</span> <span class=\"n\">tag_text</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">tags</span><span class=\"p\">)}</span>\n        <span class=\"n\">tag_text2idx</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">tag_text</span><span class=\"p\">:</span> <span class=\"n\">tag_idx</span> <span class=\"k\">for</span> <span class=\"n\">tag_idx</span><span class=\"p\">,</span> <span class=\"n\">tag_text</span> <span class=\"ow\">in</span> <span class=\"n\">tag_idx2text</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()}</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">tag_idx2text</span><span class=\"p\">,</span> <span class=\"n\">tag_text2idx</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/glue/cola.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.glue.cola &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../../\" src=\"../../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.glue.cola</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.glue.cola</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"CoLABertReader\"><a class=\"viewcode-back\" href=\"../../../../../../claf.data.reader.html#claf.data.reader.CoLABertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:cola_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">CoLABertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    CoLA DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;matthews_corr&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CoLABertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;cola-</span><span class=\"si\">{file_path}</span><span class=\"s2\">-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/glue/mnli.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.glue.mnli &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../../\" src=\"../../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.glue.mnli</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.glue.mnli</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"MNLIBertReader\"><a class=\"viewcode-back\" href=\"../../../../../../claf.data.reader.html#claf.data.reader.MNLIBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:mnli_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">MNLIBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    MNLI DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;contradiction&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;entailment&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;neutral&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;accuracy&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">MNLIBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;mnli-</span><span class=\"si\">{file_path}</span><span class=\"s2\">-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">8</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">9</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/glue/mrpc.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.glue.mrpc &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../../\" src=\"../../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.glue.mrpc</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.glue.mrpc</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"MRPCBertReader\"><a class=\"viewcode-back\" href=\"../../../../../../claf.data.reader.html#claf.data.reader.MRPCBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:mrpc_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">MRPCBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    MRPC DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;f1&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">MRPCBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"mi\">5</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;mrpc-</span><span class=\"si\">{file_path}</span><span class=\"s2\">-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/glue/qnli.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.glue.qnli &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../../\" src=\"../../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.glue.qnli</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.glue.qnli</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"QNLIBertReader\"><a class=\"viewcode-back\" href=\"../../../../../../claf.data.reader.html#claf.data.reader.QNLIBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:qnli_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">QNLIBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    QNLI DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;entailment&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;not_entailment&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;accuracy&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">QNLIBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;qnli-</span><span class=\"si\">{file_path}</span><span class=\"s2\">-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/glue/qqp.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.glue.qqp &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../../\" src=\"../../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.glue.qqp</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.glue.qqp</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"QQPBertReader\"><a class=\"viewcode-back\" href=\"../../../../../../claf.data.reader.html#claf.data.reader.QQPBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:qqp_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">QQPBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Quora Question Pairs DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;f1&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">QQPBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                    <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;qqp-</span><span class=\"si\">{file_path}</span><span class=\"s2\">-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n                    <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">],</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span>\n                <span class=\"p\">})</span>\n            <span class=\"k\">except</span> <span class=\"ne\">IndexError</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/glue/rte.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.glue.rte &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../../\" src=\"../../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.glue.rte</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.glue.rte</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"RTEBertReader\"><a class=\"viewcode-back\" href=\"../../../../../../claf.data.reader.html#claf.data.reader.RTEBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:rte_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">RTEBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    RTE (Recognizing Textual Entailment) DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;entailment&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;not_entailment&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;accuracy&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">RTEBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;rte-</span><span class=\"si\">{file_path}</span><span class=\"s2\">-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/glue/sst.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.glue.sst &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../../\" src=\"../../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.glue.sst</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.glue.sst</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"SSTBertReader\"><a class=\"viewcode-back\" href=\"../../../../../../claf.data.reader.html#claf.data.reader.SSTBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:sst_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">SSTBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    SST DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;accuracy&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SSTBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">data_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;train&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">lines</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;sst-</span><span class=\"si\">{file_path}</span><span class=\"s2\">-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/glue/stsb.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.glue.stsb &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../../\" src=\"../../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.glue.stsb</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.glue.stsb</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">RegressionBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"STSBBertReader\"><a class=\"viewcode-back\" href=\"../../../../../../claf.data.reader.html#claf.data.reader.STSBBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:stsb_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">STSBBertReader</span><span class=\"p\">(</span><span class=\"n\">RegressionBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    STS-B (Semantic Textual Similarity Benchmark) DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;pearson_spearman_corr&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">STSBBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">label_key</span><span class=\"o\">=</span><span class=\"s2\">&quot;score&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;stsb-</span><span class=\"si\">{file_path}</span><span class=\"s2\">-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">7</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">8</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;score&quot;</span><span class=\"p\">:</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/glue/wnli.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.glue.wnli &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../../\" src=\"../../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.glue.wnli</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.glue.wnli</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"WNLIBertReader\"><a class=\"viewcode-back\" href=\"../../../../../../claf.data.reader.html#claf.data.reader.WNLIBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:wnli_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">WNLIBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    WNLI (Winograd NLI) DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;accuracy&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">WNLIBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;wnli-</span><span class=\"si\">{file_path}</span><span class=\"s2\">-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/mnli.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.mnli &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.mnli</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.mnli</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"MNLIBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.MNLIBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:mnli_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">MNLIBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    MNLI DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;contradiction&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;entailment&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;neutral&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">MNLIBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">8</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">9</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/mrpc.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.mrpc &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.mrpc</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.mrpc</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"MRPCBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.MRPCBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:mrpc_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">MRPCBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    MRPC DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">MRPCBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"mi\">5</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/multi_task.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.multi_task &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.multi_task</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.multi_task</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.factory</span> <span class=\"k\">import</span> <span class=\"n\">DataReaderFactory</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.namespace</span> <span class=\"k\">import</span> <span class=\"n\">NestedNamespace</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.registry</span> <span class=\"k\">import</span> <span class=\"n\">Registry</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset</span> <span class=\"k\">import</span> <span class=\"n\">MultiTaskBertDataset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dto</span> <span class=\"k\">import</span> <span class=\"n\">Helper</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader.base</span> <span class=\"k\">import</span> <span class=\"n\">DataReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.multi_task.category</span> <span class=\"k\">import</span> <span class=\"n\">TaskCategory</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.seq_cls</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.squad</span> <span class=\"k\">import</span> <span class=\"n\">SQuADBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.regression</span> <span class=\"k\">import</span> <span class=\"n\">RegressionBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.tok_cls</span> <span class=\"k\">import</span> <span class=\"n\">TokClsBertReader</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"MultiTaskBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.MultiTaskBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:multitask_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">MultiTaskBertReader</span><span class=\"p\">(</span><span class=\"n\">DataReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    DataReader for Multi-Task using BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .json file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: define tokenizers config (subword)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        class_key: name of the label in .json file to use for classification</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">batch_sizes</span><span class=\"o\">=</span><span class=\"p\">[],</span>\n        <span class=\"n\">readers</span><span class=\"o\">=</span><span class=\"p\">[],</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">MultiTaskBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">MultiTaskBertDataset</span><span class=\"p\">)</span>\n        <span class=\"k\">assert</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">batch_sizes</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">readers</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">registry</span> <span class=\"o\">=</span> <span class=\"n\">Registry</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_columns</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizers</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">batch_sizes</span> <span class=\"o\">=</span> <span class=\"n\">batch_sizes</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dataset_batches</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dataset_helpers</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tasks</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">reader</span> <span class=\"ow\">in</span> <span class=\"n\">readers</span><span class=\"p\">:</span>\n            <span class=\"n\">data_reader</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">make_data_reader</span><span class=\"p\">(</span><span class=\"n\">reader</span><span class=\"p\">)</span>\n            <span class=\"n\">batches</span><span class=\"p\">,</span> <span class=\"n\">helpers</span> <span class=\"o\">=</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dataset_batches</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">batches</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dataset_helpers</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">helpers</span><span class=\"p\">)</span>\n\n            <span class=\"n\">dataset_name</span> <span class=\"o\">=</span> <span class=\"n\">reader</span><span class=\"p\">[</span><span class=\"s2\">&quot;dataset&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helpers</span><span class=\"p\">[</span><span class=\"s2\">&quot;train&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">task</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">make_task_by_reader</span><span class=\"p\">(</span><span class=\"n\">dataset_name</span><span class=\"p\">,</span> <span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tasks</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">task</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"MultiTaskBertReader.make_data_reader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.MultiTaskBertReader.make_data_reader\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_data_reader</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config_dict</span><span class=\"p\">):</span>\n        <span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">NestedNamespace</span><span class=\"p\">()</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">load_from_json</span><span class=\"p\">(</span><span class=\"n\">config_dict</span><span class=\"p\">)</span>\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">tokenizers</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizers</span>\n\n        <span class=\"n\">data_reader_factory</span> <span class=\"o\">=</span> <span class=\"n\">DataReaderFactory</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">data_reader_factory</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"MultiTaskBertReader.make_task_by_reader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.MultiTaskBertReader.make_task_by_reader\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_task_by_reader</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"p\">):</span>\n        <span class=\"n\">task</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"n\">task</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">name</span>\n        <span class=\"n\">task</span><span class=\"p\">[</span><span class=\"s2\">&quot;metric_key&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">METRIC_KEY</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n            <span class=\"n\">task</span><span class=\"p\">[</span><span class=\"s2\">&quot;category&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">TaskCategory</span><span class=\"o\">.</span><span class=\"n\">SEQUENCE_CLASSIFICATION</span>\n            <span class=\"n\">task</span><span class=\"p\">[</span><span class=\"s2\">&quot;num_label&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;num_classes&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">SQuADBertReader</span><span class=\"p\">):</span>\n            <span class=\"n\">task</span><span class=\"p\">[</span><span class=\"s2\">&quot;category&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">TaskCategory</span><span class=\"o\">.</span><span class=\"n\">READING_COMPREHENSION</span>\n            <span class=\"n\">task</span><span class=\"p\">[</span><span class=\"s2\">&quot;num_label&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">RegressionBertReader</span><span class=\"p\">):</span>\n            <span class=\"n\">task</span><span class=\"p\">[</span><span class=\"s2\">&quot;category&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">TaskCategory</span><span class=\"o\">.</span><span class=\"n\">REGRESSION</span>\n            <span class=\"n\">task</span><span class=\"p\">[</span><span class=\"s2\">&quot;num_label&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">TokClsBertReader</span><span class=\"p\">):</span>\n            <span class=\"n\">task</span><span class=\"p\">[</span><span class=\"s2\">&quot;category&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">TaskCategory</span><span class=\"o\">.</span><span class=\"n\">TOKEN_CLASSIFICATION</span>\n            <span class=\"n\">task</span><span class=\"p\">[</span><span class=\"s2\">&quot;num_label&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;num_tags&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Check data_reader.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">task</span><span class=\"p\">[</span><span class=\"s2\">&quot;model_params&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n        <span class=\"k\">return</span> <span class=\"n\">task</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; TODO: Doc-String &quot;&quot;&quot;</span>\n\n        <span class=\"n\">batches</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">Helper</span><span class=\"p\">()</span>\n        <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">task_helpers</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">b</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dataset_batches</span><span class=\"p\">:</span>\n            <span class=\"n\">batches</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">[</span><span class=\"n\">data_type</span><span class=\"p\">])</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">h</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dataset_helpers</span><span class=\"p\">):</span>\n            <span class=\"n\">task_helper</span> <span class=\"o\">=</span> <span class=\"n\">h</span><span class=\"p\">[</span><span class=\"n\">data_type</span><span class=\"p\">]</span>\n            <span class=\"n\">task_helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;batch_size&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">batch_sizes</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span>\n\n            <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">task_helpers</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">task_helper</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_model_parameter</span><span class=\"p\">({</span>\n            <span class=\"s2\">&quot;tasks&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tasks</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n        <span class=\"k\">return</span> <span class=\"n\">batches</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"MultiTaskBertReader.read_one_example\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.MultiTaskBertReader.read_one_example\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">read_one_example</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"k\">pass</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/qnli.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.qnli &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.qnli</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.qnli</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"QNLIBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.QNLIBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:qnli_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">QNLIBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    QNLI DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;entailment&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;not_entailment&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">QNLIBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/qqp.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.qqp &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.qqp</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.qqp</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"QQPBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.QQPBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:qqp_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">QQPBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Quora Question Pairs DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">QQPBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                    <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n                    <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">],</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span>\n                <span class=\"p\">})</span>\n            <span class=\"k\">except</span> <span class=\"ne\">IndexError</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/regression.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.regression &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.regression</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.regression</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">uuid</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset</span> <span class=\"k\">import</span> <span class=\"n\">RegressionBertDataset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dto</span> <span class=\"k\">import</span> <span class=\"n\">BertFeature</span><span class=\"p\">,</span> <span class=\"n\">Helper</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader.base</span> <span class=\"k\">import</span> <span class=\"n\">DataReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"RegressionBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.RegressionBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:regression_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">RegressionBertReader</span><span class=\"p\">(</span><span class=\"n\">DataReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Regression DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">label_key</span><span class=\"o\">=</span><span class=\"s2\">&quot;score&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">RegressionBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">RegressionBertDataset</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span> <span class=\"o\">=</span> <span class=\"n\">sequence_max_length</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_columns</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Tokenizers</span>\n        <span class=\"c1\"># - BERT: Word + Subword or Word + Char</span>\n        <span class=\"c1\"># - RoBERTa: BPE</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">input_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;subword&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"p\">[</span><span class=\"s2\">&quot;char&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"n\">input_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;roberta&quot;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;bpe&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;bert&#39; and &#39;roberta&#39; are available input_type.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">label_key</span> <span class=\"o\">=</span> <span class=\"n\">label_key</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span> <span class=\"o\">=</span> <span class=\"n\">cls_token</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span> <span class=\"o\">=</span> <span class=\"n\">sep_token</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_type</span> <span class=\"o\">=</span> <span class=\"n\">input_type</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_test</span> <span class=\"o\">=</span> <span class=\"n\">is_test</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">seq_cls_data</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">seq_cls_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        .json file structure should be something like this:</span>\n\n<span class=\"sd\">        {</span>\n<span class=\"sd\">            &quot;data&quot;: [</span>\n<span class=\"sd\">                {</span>\n<span class=\"sd\">                    &quot;sequence_a&quot;: &quot;what a wonderful day!&quot;,</span>\n<span class=\"sd\">                    &quot;sequence_b&quot;: &quot;what a great day!&quot;,</span>\n<span class=\"sd\">                    &quot;score&quot;: 0.9</span>\n<span class=\"sd\">                },</span>\n<span class=\"sd\">                ...</span>\n<span class=\"sd\">            ]</span>\n<span class=\"sd\">        }</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_data</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">Helper</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span>\n            <span class=\"s2\">&quot;file_path&quot;</span><span class=\"p\">:</span> <span class=\"n\">file_path</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;cls_token&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sep_token&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;dataset&quot;</span><span class=\"p\">:</span> <span class=\"n\">RegressionBertDataset</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;metric_key&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">METRIC_KEY</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n\n        <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">example</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">):</span>\n            <span class=\"n\">sequence_a</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">get_sequence_a</span><span class=\"p\">(</span><span class=\"n\">example</span><span class=\"p\">)</span>\n            <span class=\"n\">sequence_b</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n\n            <span class=\"n\">sequence_a_tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">sequence_a</span><span class=\"p\">)</span>\n            <span class=\"n\">sequence_b_tokens</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n            <span class=\"k\">if</span> <span class=\"n\">sequence_b</span><span class=\"p\">:</span>\n                <span class=\"n\">sequence_b_tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">sequence_b</span><span class=\"p\">)</span>\n\n            <span class=\"n\">bert_input</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_bert_input</span><span class=\"p\">(</span>\n                <span class=\"n\">sequence_a</span><span class=\"p\">,</span>\n                <span class=\"n\">sequence_b</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"p\">,</span>\n                <span class=\"n\">max_seq_length</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n                <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">,</span>\n                <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n                <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n                <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">bert_input</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n\n            <span class=\"k\">if</span> <span class=\"s2\">&quot;uid&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">example</span><span class=\"p\">:</span>\n                <span class=\"n\">data_uid</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">]</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">data_uid</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid1</span><span class=\"p\">())</span>\n\n            <span class=\"n\">feature_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_uid</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">:</span> <span class=\"n\">bert_input</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">features</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">feature_row</span><span class=\"p\">)</span>\n\n            <span class=\"n\">score</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">label_key</span><span class=\"p\">]</span>\n            <span class=\"n\">label_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_uid</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;score&quot;</span><span class=\"p\">:</span> <span class=\"n\">score</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">label_row</span><span class=\"p\">)</span>\n\n            <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_example</span><span class=\"p\">(</span><span class=\"n\">data_uid</span><span class=\"p\">,</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_a</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a_tokens&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_a_tokens</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_b</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_b_tokens&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_b_tokens</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;score&quot;</span><span class=\"p\">:</span> <span class=\"n\">score</span><span class=\"p\">,</span>\n            <span class=\"p\">})</span>\n\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_test</span> <span class=\"ow\">and</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">)</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">10</span><span class=\"p\">:</span>\n                <span class=\"k\">break</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_batch</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">),</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"RegressionBertReader.read_one_example\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.RegressionBertReader.read_one_example\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">read_one_example</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; inputs keys: sequence_a and sequence_b &quot;&quot;&quot;</span>\n        <span class=\"n\">sequence_a</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">get_sequence_a</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">)</span>\n        <span class=\"n\">sequence_b</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n\n        <span class=\"n\">bert_feature</span> <span class=\"o\">=</span> <span class=\"n\">BertFeature</span><span class=\"p\">()</span>\n        <span class=\"n\">bert_feature</span><span class=\"o\">.</span><span class=\"n\">set_input_with_speical_token</span><span class=\"p\">(</span>\n            <span class=\"n\">sequence_a</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_b</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"p\">,</span>\n            <span class=\"n\">max_seq_length</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;predict&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">bert_feature</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()]</span>\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">return</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">helper</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/rte.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.rte &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.rte</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.rte</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"RTEBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.RTEBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:rte_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">RTEBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    RTE (Recognizing Textual Entailment) DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;entailment&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;not_entailment&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">RTEBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/seq_cls.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.seq_cls &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.seq_cls</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.seq_cls</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">import</span> <span class=\"nn\">uuid</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertDataset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dto</span> <span class=\"k\">import</span> <span class=\"n\">BertFeature</span><span class=\"p\">,</span> <span class=\"n\">Helper</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader.base</span> <span class=\"k\">import</span> <span class=\"n\">DataReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"SeqClsBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.bert.html#claf.data.reader.SeqClsBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:seq_cls_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">SeqClsBertReader</span><span class=\"p\">(</span><span class=\"n\">DataReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    DataReader for Sequence (Single and Pair) Classification using BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .json file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: define tokenizers config (subword)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        class_key: name of the label in .json file to use for classification</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"s2\">&quot;class&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">SeqClsBertDataset</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span> <span class=\"o\">=</span> <span class=\"n\">sequence_max_length</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_columns</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Tokenizers</span>\n        <span class=\"c1\"># - BERT: Word + Subword or Word + Char</span>\n        <span class=\"c1\"># - RoBERTa: BPE</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">input_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;subword&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"p\">[</span><span class=\"s2\">&quot;char&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"n\">input_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;roberta&quot;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;bpe&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;bert&#39; and &#39;roberta&#39; are available input_type.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span> <span class=\"o\">=</span> <span class=\"n\">class_key</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span> <span class=\"o\">=</span> <span class=\"n\">cls_token</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span> <span class=\"o\">=</span> <span class=\"n\">sep_token</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_type</span> <span class=\"o\">=</span> <span class=\"n\">input_type</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_test</span> <span class=\"o\">=</span> <span class=\"n\">is_test</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">seq_cls_data</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">seq_cls_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_class_dicts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">seq_cls_data</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">class_data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">CLASS_DATA</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">class_data</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">item</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"n\">seq_cls_data</span><span class=\"p\">]</span>\n            <span class=\"n\">class_data</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">class_data</span><span class=\"p\">))</span>  <span class=\"c1\"># remove duplicate</span>\n\n        <span class=\"n\">class_idx2text</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">class_idx</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">class_text</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">class_idx</span><span class=\"p\">,</span> <span class=\"n\">class_text</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">class_data</span><span class=\"p\">)</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">class_text2idx</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">class_text</span><span class=\"p\">:</span> <span class=\"n\">class_idx</span> <span class=\"k\">for</span> <span class=\"n\">class_idx</span><span class=\"p\">,</span> <span class=\"n\">class_text</span> <span class=\"ow\">in</span> <span class=\"n\">class_idx2text</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()}</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">class_idx2text</span><span class=\"p\">,</span> <span class=\"n\">class_text2idx</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        .json file structure should be something like this:</span>\n\n<span class=\"sd\">        {</span>\n<span class=\"sd\">            &quot;data&quot;: [</span>\n<span class=\"sd\">                {</span>\n<span class=\"sd\">                    &quot;sequence&quot;: &quot;what a wonderful day!&quot;,</span>\n<span class=\"sd\">                    &quot;emotion&quot;: &quot;happy&quot;</span>\n<span class=\"sd\">                },</span>\n<span class=\"sd\">                ...</span>\n<span class=\"sd\">            ],</span>\n<span class=\"sd\">            &quot;emotion&quot;: [  // class_key</span>\n<span class=\"sd\">                &quot;angry&quot;,</span>\n<span class=\"sd\">                &quot;happy&quot;,</span>\n<span class=\"sd\">                &quot;sad&quot;,</span>\n<span class=\"sd\">                ...</span>\n<span class=\"sd\">            ]</span>\n<span class=\"sd\">        }</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_data</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">)</span>\n        <span class=\"n\">class_idx2text</span><span class=\"p\">,</span> <span class=\"n\">class_text2idx</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_class_dicts</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">=</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">Helper</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span>\n            <span class=\"s2\">&quot;file_path&quot;</span><span class=\"p\">:</span> <span class=\"n\">file_path</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;class_idx2text&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_idx2text</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;class_text2idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_text2idx</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;cls_token&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sep_token&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;dataset&quot;</span><span class=\"p\">:</span> <span class=\"n\">SeqClsBertDataset</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;metric_key&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">METRIC_KEY</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n        <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_model_parameter</span><span class=\"p\">({</span>\n            <span class=\"s2\">&quot;num_classes&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">class_idx2text</span><span class=\"p\">),</span>\n        <span class=\"p\">})</span>\n        <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_predict_helper</span><span class=\"p\">({</span>\n            <span class=\"s2\">&quot;class_idx2text&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_idx2text</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n\n        <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">example</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">):</span>\n            <span class=\"n\">sequence_a</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">get_sequence_a</span><span class=\"p\">(</span><span class=\"n\">example</span><span class=\"p\">)</span>\n            <span class=\"n\">sequence_b</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n\n            <span class=\"n\">sequence_a_tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">sequence_a</span><span class=\"p\">)</span>\n            <span class=\"n\">sequence_b_tokens</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n            <span class=\"k\">if</span> <span class=\"n\">sequence_b</span><span class=\"p\">:</span>\n                <span class=\"n\">sequence_b_tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">sequence_b</span><span class=\"p\">)</span>\n\n            <span class=\"n\">bert_input</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_bert_input</span><span class=\"p\">(</span>\n                <span class=\"n\">sequence_a</span><span class=\"p\">,</span>\n                <span class=\"n\">sequence_b</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"p\">,</span>\n                <span class=\"n\">max_seq_length</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n                <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">,</span>\n                <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n                <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n                <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">bert_input</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n\n            <span class=\"k\">if</span> <span class=\"s2\">&quot;uid&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">example</span><span class=\"p\">:</span>\n                <span class=\"n\">data_uid</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">]</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">data_uid</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid1</span><span class=\"p\">())</span>\n\n            <span class=\"c1\"># token_type(segment_ids) will be added in dataset</span>\n            <span class=\"n\">feature_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_uid</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">:</span> <span class=\"n\">bert_input</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">features</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">feature_row</span><span class=\"p\">)</span>\n\n            <span class=\"n\">class_text</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">]</span>\n            <span class=\"n\">label_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_uid</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_text2idx</span><span class=\"p\">[</span><span class=\"n\">class_text</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_text</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">label_row</span><span class=\"p\">)</span>\n\n            <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_example</span><span class=\"p\">(</span><span class=\"n\">data_uid</span><span class=\"p\">,</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_a</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a_tokens&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_a_tokens</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_b</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_b_tokens&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_b_tokens</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_text2idx</span><span class=\"p\">[</span><span class=\"n\">class_text</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_text</span><span class=\"p\">,</span>\n            <span class=\"p\">})</span>\n\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_test</span> <span class=\"ow\">and</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">)</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">10</span><span class=\"p\">:</span>\n                <span class=\"k\">break</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_batch</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">),</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"SeqClsBertReader.read_one_example\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.bert.html#claf.data.reader.SeqClsBertReader.read_one_example\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">read_one_example</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; inputs keys: sequence_a and sequence_b &quot;&quot;&quot;</span>\n        <span class=\"n\">sequence_a</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">get_sequence_a</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">)</span>\n        <span class=\"n\">sequence_b</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n\n        <span class=\"n\">bert_feature</span> <span class=\"o\">=</span> <span class=\"n\">BertFeature</span><span class=\"p\">()</span>\n        <span class=\"n\">bert_feature</span><span class=\"o\">.</span><span class=\"n\">set_input_with_speical_token</span><span class=\"p\">(</span>\n            <span class=\"n\">sequence_a</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_b</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"p\">,</span>\n            <span class=\"n\">max_seq_length</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;predict&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">bert_feature</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()]</span>\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">return</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">helper</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/squad.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.squad &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.squad</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.squad</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"k\">import</span> <span class=\"n\">Counter</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">import</span> <span class=\"nn\">re</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset</span> <span class=\"k\">import</span> <span class=\"n\">SQuADBertDataset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dto</span> <span class=\"k\">import</span> <span class=\"n\">BertFeature</span><span class=\"p\">,</span> <span class=\"n\">Helper</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader.base</span> <span class=\"k\">import</span> <span class=\"n\">DataReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric.squad_v1_official</span> <span class=\"k\">import</span> <span class=\"n\">normalize_answer</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.tokenizer</span> <span class=\"k\">import</span> <span class=\"n\">SentTokenizer</span><span class=\"p\">,</span> <span class=\"n\">WordTokenizer</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"Token\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.bert.html#claf.data.reader.Token\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Token</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">text_span</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">text</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"o\">=</span> <span class=\"n\">text_span</span></div>\n\n\n<div class=\"viewcode-block\" id=\"SQuADBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.bert.html#claf.data.reader.SQuADBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:squad_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">SQuADBertReader</span><span class=\"p\">(</span><span class=\"n\">DataReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    SQuAD DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .json file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config (char/word)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">METRIC_KEY</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;f1&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">lang_code</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">max_seq_length</span><span class=\"o\">=</span><span class=\"mi\">384</span><span class=\"p\">,</span>\n        <span class=\"n\">context_stride</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">,</span>\n        <span class=\"n\">max_question_length</span><span class=\"o\">=</span><span class=\"mi\">64</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SQuADBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">SQuADBertDataset</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_seq_length</span> <span class=\"o\">=</span> <span class=\"n\">max_seq_length</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_stride</span> <span class=\"o\">=</span> <span class=\"n\">context_stride</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_question_length</span> <span class=\"o\">=</span> <span class=\"n\">max_question_length</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span> <span class=\"o\">=</span> <span class=\"n\">cls_token</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span> <span class=\"o\">=</span> <span class=\"n\">sep_token</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_columns</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;context&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">sent_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">SentTokenizer</span><span class=\"p\">(</span><span class=\"s2\">&quot;punkt&quot;</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n        <span class=\"k\">if</span> <span class=\"n\">lang_code</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;ko&quot;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">WordTokenizer</span><span class=\"p\">(</span><span class=\"s2\">&quot;mecab_ko&quot;</span><span class=\"p\">,</span> <span class=\"n\">sent_tokenizer</span><span class=\"p\">,</span> <span class=\"n\">split_with_regex</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">WordTokenizer</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;treebank_en&quot;</span><span class=\"p\">,</span> <span class=\"n\">sent_tokenizer</span><span class=\"p\">,</span> <span class=\"n\">split_with_regex</span><span class=\"o\">=</span><span class=\"kc\">True</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;bpe&quot;</span><span class=\"p\">]</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sub_level_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;bpe&quot;</span><span class=\"p\">]</span>  <span class=\"c1\"># RoBERTa</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;subword&quot;</span><span class=\"p\">]</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sub_level_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;subword&quot;</span><span class=\"p\">]</span>  <span class=\"c1\"># BERT</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;bpe&#39; or &#39;subword&#39; tokenizer is required.&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">word_tokenized_error_count</span><span class=\"p\">,</span> <span class=\"n\">sub_level_tokenized_error_count</span> <span class=\"o\">=</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">squad</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;data&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">squad</span><span class=\"p\">:</span>\n            <span class=\"n\">squad</span> <span class=\"o\">=</span> <span class=\"n\">squad</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">Helper</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span>\n            <span class=\"s2\">&quot;file_path&quot;</span><span class=\"p\">:</span> <span class=\"n\">file_path</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;raw_dataset&quot;</span><span class=\"p\">:</span> <span class=\"n\">squad</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;cls_token&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sep_token&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;dataset&quot;</span><span class=\"p\">:</span> <span class=\"n\">SQuADBertDataset</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n        <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_model_parameter</span><span class=\"p\">({</span>\n            <span class=\"s2\">&quot;lang_code&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n\n        <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n        <span class=\"n\">is_training</span> <span class=\"o\">=</span> <span class=\"n\">data_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;train&quot;</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">article</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">squad</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">paragraph</span> <span class=\"ow\">in</span> <span class=\"n\">article</span><span class=\"p\">[</span><span class=\"s2\">&quot;paragraphs&quot;</span><span class=\"p\">]:</span>\n                <span class=\"n\">context_text</span> <span class=\"o\">=</span> <span class=\"n\">paragraph</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;``&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot; &#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;&#39;&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot; &#39;</span><span class=\"p\">)</span>\n                <span class=\"n\">context_tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">context_text</span><span class=\"p\">)</span>\n\n                <span class=\"n\">context_spans</span><span class=\"p\">,</span> <span class=\"n\">char_to_word_offset</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_convert_to_spans</span><span class=\"p\">(</span>\n                    <span class=\"n\">context_text</span><span class=\"p\">,</span> <span class=\"n\">context_tokens</span>\n                <span class=\"p\">)</span>\n                <span class=\"n\">context_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                    <span class=\"n\">Token</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">span</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">span</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">context_tokens</span><span class=\"p\">,</span> <span class=\"n\">context_spans</span><span class=\"p\">)</span>\n                <span class=\"p\">]</span>\n\n                <span class=\"n\">context_sub_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n                <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">context_tokens</span><span class=\"p\">:</span>\n                    <span class=\"k\">for</span> <span class=\"n\">sub_token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sub_level_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">):</span>\n                        <span class=\"n\">context_sub_tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">Token</span><span class=\"p\">(</span><span class=\"n\">sub_token</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">))</span>\n\n                <span class=\"k\">for</span> <span class=\"n\">qa</span> <span class=\"ow\">in</span> <span class=\"n\">paragraph</span><span class=\"p\">[</span><span class=\"s2\">&quot;qas&quot;</span><span class=\"p\">]:</span>\n                    <span class=\"n\">question_text</span> <span class=\"o\">=</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n                    <span class=\"n\">question_text</span> <span class=\"o\">=</span> <span class=\"s2\">&quot; &quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">question_text</span><span class=\"p\">))</span>\n                    <span class=\"n\">question_sub_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                        <span class=\"n\">Token</span><span class=\"p\">(</span><span class=\"n\">sub_token</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">sub_token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sub_level_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">question_text</span><span class=\"p\">)</span>\n                    <span class=\"p\">]</span>\n\n                    <span class=\"n\">id_</span> <span class=\"o\">=</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span>\n                    <span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">]</span>\n\n                    <span class=\"n\">answer_texts</span><span class=\"p\">,</span> <span class=\"n\">answer_indices</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n\n                    <span class=\"k\">if</span> <span class=\"n\">qa</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;is_impossible&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n                        <span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;plausible_answers&quot;</span><span class=\"p\">]</span>\n                        <span class=\"n\">answerable</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n                    <span class=\"k\">else</span><span class=\"p\">:</span>\n                        <span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">]</span>\n                        <span class=\"n\">answerable</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n\n                    <span class=\"k\">for</span> <span class=\"n\">answer</span> <span class=\"ow\">in</span> <span class=\"n\">answers</span><span class=\"p\">:</span>\n                        <span class=\"n\">answer_start</span> <span class=\"o\">=</span> <span class=\"n\">answer</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start&quot;</span><span class=\"p\">]</span>\n                        <span class=\"n\">answer_end</span> <span class=\"o\">=</span> <span class=\"n\">answer_start</span> <span class=\"o\">+</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">answer</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">])</span> <span class=\"o\">-</span> <span class=\"mi\">1</span>\n\n                        <span class=\"n\">answer_texts</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">answer</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">])</span>\n                        <span class=\"n\">answer_indices</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span><span class=\"p\">))</span>\n\n                    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">answer_indices</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                        <span class=\"n\">answer_char_start</span><span class=\"p\">,</span> <span class=\"n\">answer_char_end</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_find_one_most_common</span><span class=\"p\">(</span>\n                            <span class=\"n\">answer_indices</span>\n                        <span class=\"p\">)</span>\n                        <span class=\"n\">answer_word_start</span> <span class=\"o\">=</span> <span class=\"n\">char_to_word_offset</span><span class=\"p\">[</span><span class=\"n\">answer_char_start</span><span class=\"p\">]</span>\n                        <span class=\"n\">answer_word_end</span> <span class=\"o\">=</span> <span class=\"n\">char_to_word_offset</span><span class=\"p\">[</span><span class=\"n\">answer_char_end</span><span class=\"p\">]</span>\n\n                        <span class=\"n\">char_answer_text</span> <span class=\"o\">=</span> <span class=\"n\">context_text</span><span class=\"p\">[</span><span class=\"n\">answer_char_start</span> <span class=\"p\">:</span> <span class=\"n\">answer_char_end</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n                        <span class=\"n\">word_answer_text</span> <span class=\"o\">=</span> <span class=\"n\">context_text</span><span class=\"p\">[</span>\n                            <span class=\"n\">context_spans</span><span class=\"p\">[</span><span class=\"n\">answer_word_start</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"p\">:</span> <span class=\"n\">context_spans</span><span class=\"p\">[</span><span class=\"n\">answer_word_end</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n                        <span class=\"p\">]</span>\n\n                        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_is_rebuild</span><span class=\"p\">(</span><span class=\"n\">char_answer_text</span><span class=\"p\">,</span> <span class=\"n\">word_answer_text</span><span class=\"p\">):</span>\n                            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;word_tokenized_error: </span><span class=\"si\">{char_answer_text}</span><span class=\"s2\">  ###  </span><span class=\"si\">{word_answer_text}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n                            <span class=\"n\">word_tokenized_error_count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n                    <span class=\"k\">else</span><span class=\"p\">:</span>\n                        <span class=\"c1\"># Unanswerable</span>\n                        <span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;&lt;noanswer&gt;&quot;</span><span class=\"p\">]</span>\n                        <span class=\"n\">answer_char_start</span><span class=\"p\">,</span> <span class=\"n\">answer_char_end</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n                        <span class=\"n\">answer_word_start</span><span class=\"p\">,</span> <span class=\"n\">answer_word_end</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n\n                    <span class=\"n\">bert_features</span><span class=\"p\">,</span> <span class=\"n\">bert_labels</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_features_and_labels</span><span class=\"p\">(</span>\n                        <span class=\"n\">context_sub_tokens</span><span class=\"p\">,</span>\n                        <span class=\"n\">question_sub_tokens</span><span class=\"p\">,</span>\n                        <span class=\"n\">answer_char_start</span><span class=\"p\">,</span>\n                        <span class=\"n\">answer_char_end</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">,</span>\n                    <span class=\"p\">)</span>\n\n                    <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">feature</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">))</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">bert_features</span><span class=\"p\">,</span> <span class=\"n\">bert_labels</span><span class=\"p\">)):</span>\n                        <span class=\"n\">bert_tokens</span> <span class=\"o\">=</span> <span class=\"n\">feature</span>\n                        <span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span> <span class=\"o\">=</span> <span class=\"n\">label</span>\n\n                        <span class=\"k\">if</span> <span class=\"n\">is_training</span> <span class=\"ow\">and</span> <span class=\"p\">(</span>\n                            <span class=\"n\">answer_start</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span>\n                            <span class=\"ow\">or</span> <span class=\"n\">answer_start</span> <span class=\"o\">&gt;=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_tokens</span><span class=\"p\">)</span>\n                            <span class=\"ow\">or</span> <span class=\"n\">answer_end</span> <span class=\"o\">&gt;=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_tokens</span><span class=\"p\">)</span>\n                            <span class=\"ow\">or</span> <span class=\"n\">bert_tokens</span><span class=\"p\">[</span><span class=\"n\">answer_start</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span>\n                            <span class=\"ow\">or</span> <span class=\"n\">bert_tokens</span><span class=\"p\">[</span><span class=\"n\">answer_end</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span>\n                        <span class=\"p\">):</span>\n                            <span class=\"k\">continue</span>\n\n                        <span class=\"k\">if</span> <span class=\"n\">is_training</span><span class=\"p\">:</span>\n                            <span class=\"n\">char_start</span> <span class=\"o\">=</span> <span class=\"n\">bert_tokens</span><span class=\"p\">[</span><span class=\"n\">answer_start</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n                            <span class=\"n\">char_end</span> <span class=\"o\">=</span> <span class=\"n\">bert_tokens</span><span class=\"p\">[</span><span class=\"n\">answer_end</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n                            <span class=\"n\">bert_answer</span> <span class=\"o\">=</span> <span class=\"n\">context_text</span><span class=\"p\">[</span><span class=\"n\">char_start</span><span class=\"p\">:</span><span class=\"n\">char_end</span><span class=\"p\">]</span>\n\n                            <span class=\"k\">if</span> <span class=\"n\">char_answer_text</span> <span class=\"o\">!=</span> <span class=\"n\">bert_answer</span><span class=\"p\">:</span>\n                                <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;sub_level_tokenized_error: </span><span class=\"si\">{char_answer_text}</span><span class=\"s2\"> ### </span><span class=\"si\">{word_answer_text}</span><span class=\"s2\">)&quot;</span><span class=\"p\">)</span>\n                                <span class=\"n\">sub_level_tokenized_error_count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n\n                        <span class=\"n\">feature_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                            <span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">text</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">bert_tokens</span><span class=\"p\">],</span>\n                            <span class=\"s2\">&quot;bert_token&quot;</span><span class=\"p\">:</span> <span class=\"n\">bert_tokens</span><span class=\"p\">,</span>\n                        <span class=\"p\">}</span>\n                        <span class=\"n\">features</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">feature_row</span><span class=\"p\">)</span>\n\n                        <span class=\"n\">bert_id</span> <span class=\"o\">=</span> <span class=\"n\">id_</span> <span class=\"o\">+</span> <span class=\"n\">f</span><span class=\"s2\">&quot;#</span><span class=\"si\">{index}</span><span class=\"s2\">&quot;</span>\n                        <span class=\"n\">label_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                            <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"n\">bert_id</span><span class=\"p\">,</span>  <span class=\"c1\"># question_id + bert_index</span>\n                            <span class=\"s2\">&quot;answer_texts&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">answer_texts</span><span class=\"p\">),</span>\n                            <span class=\"s2\">&quot;answer_start&quot;</span><span class=\"p\">:</span> <span class=\"n\">answer_start</span><span class=\"p\">,</span>\n                            <span class=\"s2\">&quot;answer_end&quot;</span><span class=\"p\">:</span> <span class=\"n\">answer_end</span><span class=\"p\">,</span>\n                            <span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">:</span> <span class=\"n\">answerable</span><span class=\"p\">,</span>\n                        <span class=\"p\">}</span>\n                        <span class=\"n\">labels</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">label_row</span><span class=\"p\">)</span>\n\n                        <span class=\"k\">if</span> <span class=\"n\">id_</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">examples</span><span class=\"p\">:</span>\n                            <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_example</span><span class=\"p\">(</span><span class=\"n\">id_</span><span class=\"p\">,</span> <span class=\"p\">{</span>\n                                <span class=\"s2\">&quot;context&quot;</span><span class=\"p\">:</span> <span class=\"n\">context_text</span><span class=\"p\">,</span>\n                                <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">:</span> <span class=\"n\">question_text</span><span class=\"p\">,</span>\n                                <span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">:</span> <span class=\"n\">answer_texts</span><span class=\"p\">,</span>\n                            <span class=\"p\">})</span>\n                        <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_example</span><span class=\"p\">(</span><span class=\"n\">id_</span><span class=\"p\">,</span> <span class=\"p\">{</span>\n                            <span class=\"n\">f</span><span class=\"s2\">&quot;bert_tokens_</span><span class=\"si\">{index}</span><span class=\"s2\">&quot;</span><span class=\"p\">:</span> <span class=\"n\">bert_tokens</span><span class=\"p\">,</span>\n                        <span class=\"p\">},</span> <span class=\"n\">update</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span>\n            <span class=\"n\">f</span><span class=\"s2\">&quot;tokenized_error_count - word: </span><span class=\"si\">{word_tokenized_error_count}</span><span class=\"s2\"> | sub_level: </span><span class=\"si\">{sub_level_tokenized_error_count}</span><span class=\"s2\">&quot;</span>\n        <span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_batch</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">),</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"SQuADBertReader.read_one_example\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.bert.html#claf.data.reader.SQuADBertReader.read_one_example\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">read_one_example</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; inputs keys: question, context &quot;&quot;&quot;</span>\n        <span class=\"n\">context_text</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;``&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot; &#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;&#39;&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot; &#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">tokenized_context</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">context_text</span><span class=\"p\">)</span>\n        <span class=\"n\">context_spans</span><span class=\"p\">,</span> <span class=\"n\">char_to_word_offset</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_convert_to_spans</span><span class=\"p\">(</span><span class=\"n\">context_text</span><span class=\"p\">,</span> <span class=\"n\">tokenized_context</span><span class=\"p\">)</span>\n        <span class=\"n\">context_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">Token</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">span</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">span</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">tokenized_context</span><span class=\"p\">,</span> <span class=\"n\">context_spans</span><span class=\"p\">)</span>\n        <span class=\"p\">]</span>\n\n        <span class=\"n\">context_sub_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">context_tokens</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">sub_token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sub_level_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">):</span>\n                <span class=\"n\">context_sub_tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">Token</span><span class=\"p\">(</span><span class=\"n\">sub_token</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">))</span>\n\n        <span class=\"n\">question_text</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">question_text</span> <span class=\"o\">=</span> <span class=\"s2\">&quot; &quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">question_text</span><span class=\"p\">))</span>\n        <span class=\"n\">question_sub_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">Token</span><span class=\"p\">(</span><span class=\"n\">sub_token</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">sub_token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sub_level_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">question_text</span><span class=\"p\">)</span>\n        <span class=\"p\">]</span>\n\n        <span class=\"n\">bert_tokens</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_features_and_labels</span><span class=\"p\">(</span>\n            <span class=\"n\">context_sub_tokens</span><span class=\"p\">,</span> <span class=\"n\">question_sub_tokens</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">Helper</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span>\n            <span class=\"s2\">&quot;bert_token&quot;</span><span class=\"p\">:</span> <span class=\"p\">[],</span>\n            <span class=\"s2\">&quot;tokenized_context&quot;</span><span class=\"p\">:</span> <span class=\"n\">tokenized_context</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;token_key&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;tokenized_context&quot;</span>  <span class=\"c1\"># for 1-example inference latency key</span>\n        <span class=\"p\">})</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">bert_token</span> <span class=\"ow\">in</span> <span class=\"n\">bert_tokens</span><span class=\"p\">:</span>\n            <span class=\"n\">bert_input</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">text</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">bert_token</span><span class=\"p\">]</span>\n\n            <span class=\"n\">bert_feature</span> <span class=\"o\">=</span> <span class=\"n\">BertFeature</span><span class=\"p\">()</span>\n            <span class=\"n\">bert_feature</span><span class=\"o\">.</span><span class=\"n\">set_input</span><span class=\"p\">(</span><span class=\"n\">bert_input</span><span class=\"p\">)</span>\n\n            <span class=\"n\">features</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">bert_feature</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">())</span>\n            <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">bert_token</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">bert_token</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_find_one_most_common</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">answers</span><span class=\"p\">):</span>\n        <span class=\"n\">answer_counter</span> <span class=\"o\">=</span> <span class=\"n\">Counter</span><span class=\"p\">(</span><span class=\"n\">answers</span><span class=\"p\">)</span>\n        <span class=\"n\">value</span> <span class=\"o\">=</span> <span class=\"n\">answer_counter</span><span class=\"o\">.</span><span class=\"n\">most_common</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">value</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">value</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_convert_to_spans</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">raw_text</span><span class=\"p\">,</span> <span class=\"n\">tokenized_text</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Convert a tokenized version of `raw_text` into a series character spans referencing the `raw_text` &quot;&quot;&quot;</span>\n        <span class=\"n\">double_quote_re</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">compile</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\&quot;</span><span class=\"s2\">|``|&#39;&#39;&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">curr_idx</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">spans</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">char_to_words</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span> <span class=\"k\">for</span> <span class=\"n\">_</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">raw_text</span><span class=\"p\">))]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokenized_text</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Tokenizer might transform double quotes, for this case search over several</span>\n            <span class=\"c1\"># possible encodings</span>\n            <span class=\"k\">if</span> <span class=\"n\">double_quote_re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">):</span>\n                <span class=\"n\">span</span> <span class=\"o\">=</span> <span class=\"n\">double_quote_re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">raw_text</span><span class=\"p\">[</span><span class=\"n\">curr_idx</span><span class=\"p\">:])</span>\n                <span class=\"n\">temp</span> <span class=\"o\">=</span> <span class=\"n\">curr_idx</span> <span class=\"o\">+</span> <span class=\"n\">span</span><span class=\"o\">.</span><span class=\"n\">start</span><span class=\"p\">()</span>\n                <span class=\"n\">token_length</span> <span class=\"o\">=</span> <span class=\"n\">span</span><span class=\"o\">.</span><span class=\"n\">end</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">span</span><span class=\"o\">.</span><span class=\"n\">start</span><span class=\"p\">()</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">temp</span> <span class=\"o\">=</span> <span class=\"n\">raw_text</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">curr_idx</span><span class=\"p\">)</span>\n                <span class=\"n\">token_length</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">temp</span> <span class=\"o\">&lt;</span> <span class=\"n\">curr_idx</span><span class=\"p\">:</span>\n                <span class=\"n\">joined_tokenized_text</span> <span class=\"o\">=</span> <span class=\"s2\">&quot; &quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">tokenized_text</span><span class=\"p\">)</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                    <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"si\">{raw_text}</span><span class=\"s2\"> </span><span class=\"se\">\\n\\n</span><span class=\"si\">{joined_tokenized_text}</span><span class=\"s2\"> </span><span class=\"se\">\\n</span><span class=\"s2\">Token: </span><span class=\"si\">{token}</span><span class=\"s2\">, Index: </span><span class=\"si\">{temp}</span><span class=\"s2\">, Current Index: </span><span class=\"si\">{curr_idx}</span><span class=\"s2\">&quot;</span>\n                <span class=\"p\">)</span>\n            <span class=\"n\">curr_idx</span> <span class=\"o\">=</span> <span class=\"n\">temp</span>\n            <span class=\"n\">spans</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"n\">curr_idx</span><span class=\"p\">,</span> <span class=\"n\">curr_idx</span> <span class=\"o\">+</span> <span class=\"n\">token_length</span><span class=\"p\">))</span>\n            <span class=\"n\">curr_idx</span> <span class=\"o\">+=</span> <span class=\"n\">token_length</span>\n\n            <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span> <span class=\"o\">=</span> <span class=\"n\">spans</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n            <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"p\">):</span>\n                <span class=\"n\">char_to_words</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">spans</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">raw_text</span><span class=\"p\">)):</span>\n            <span class=\"k\">if</span> <span class=\"n\">char_to_words</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n\n            <span class=\"k\">for</span> <span class=\"n\">j</span><span class=\"p\">,</span> <span class=\"n\">span</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">spans</span><span class=\"p\">):</span>\n                <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span> <span class=\"o\">=</span> <span class=\"n\">span</span>\n                <span class=\"k\">if</span> <span class=\"n\">start</span> <span class=\"o\">&lt;</span> <span class=\"n\">i</span> <span class=\"o\">&lt;=</span> <span class=\"n\">end</span><span class=\"p\">:</span>\n                    <span class=\"n\">char_to_words</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">j</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">spans</span><span class=\"p\">,</span> <span class=\"n\">char_to_words</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_is_rebuild</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">char_answer_text</span><span class=\"p\">,</span> <span class=\"n\">word_answer_text</span><span class=\"p\">):</span>\n        <span class=\"n\">norm_char_answer_text</span> <span class=\"o\">=</span> <span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">char_answer_text</span><span class=\"p\">)</span>\n        <span class=\"n\">norm_word_answer_text</span> <span class=\"o\">=</span> <span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">word_answer_text</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">norm_char_answer_text</span> <span class=\"o\">!=</span> <span class=\"n\">norm_word_answer_text</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_make_features_and_labels</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context_sub_tokens</span><span class=\"p\">,</span> <span class=\"n\">question_sub_tokens</span><span class=\"p\">,</span> <span class=\"n\">answer_char_start</span><span class=\"p\">,</span> <span class=\"n\">answer_char_end</span>\n    <span class=\"p\">):</span>\n        <span class=\"c1\"># sub_token, context_stride logic with context_max_length</span>\n        <span class=\"n\">context_max_length</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_seq_length</span> <span class=\"o\">-</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">question_sub_tokens</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">3</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># [CLS], [SEP], [SEP]</span>\n        <span class=\"n\">start_offset</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n\n        <span class=\"n\">context_stride_spans</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">while</span> <span class=\"n\">start_offset</span> <span class=\"o\">&lt;</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">context_sub_tokens</span><span class=\"p\">):</span>\n            <span class=\"n\">strided_context_length</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">context_sub_tokens</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">start_offset</span>\n            <span class=\"k\">if</span> <span class=\"n\">strided_context_length</span> <span class=\"o\">&gt;</span> <span class=\"n\">context_max_length</span><span class=\"p\">:</span>\n                <span class=\"n\">strided_context_length</span> <span class=\"o\">=</span> <span class=\"n\">context_max_length</span>\n\n            <span class=\"n\">context_stride_spans</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"n\">start_offset</span><span class=\"p\">,</span> <span class=\"n\">strided_context_length</span><span class=\"p\">))</span>\n            <span class=\"k\">if</span> <span class=\"n\">start_offset</span> <span class=\"o\">+</span> <span class=\"n\">strided_context_length</span> <span class=\"o\">==</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">context_sub_tokens</span><span class=\"p\">):</span>\n                <span class=\"k\">break</span>\n            <span class=\"n\">start_offset</span> <span class=\"o\">+=</span> <span class=\"nb\">min</span><span class=\"p\">(</span><span class=\"n\">strided_context_length</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_stride</span><span class=\"p\">)</span>\n\n        <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">start_offset</span><span class=\"p\">,</span> <span class=\"n\">length</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"n\">context_stride_spans</span><span class=\"p\">:</span>\n            <span class=\"n\">bert_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">Token</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">)]</span>\n            <span class=\"n\">bert_tokens</span> <span class=\"o\">+=</span> <span class=\"n\">question_sub_tokens</span><span class=\"p\">[:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_question_length</span><span class=\"p\">]</span>\n            <span class=\"n\">bert_tokens</span> <span class=\"o\">+=</span> <span class=\"p\">[</span><span class=\"n\">Token</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">)]</span>\n            <span class=\"n\">bert_tokens</span> <span class=\"o\">+=</span> <span class=\"n\">context_sub_tokens</span><span class=\"p\">[</span><span class=\"n\">start_offset</span> <span class=\"p\">:</span> <span class=\"n\">start_offset</span> <span class=\"o\">+</span> <span class=\"n\">length</span><span class=\"p\">]</span>\n            <span class=\"n\">bert_tokens</span> <span class=\"o\">+=</span> <span class=\"p\">[</span><span class=\"n\">Token</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">)]</span>\n            <span class=\"n\">features</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">bert_tokens</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">answer_char_start</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">1</span> <span class=\"ow\">and</span> <span class=\"n\">answer_char_end</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span> <span class=\"o\">=</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_closest_answer_spans</span><span class=\"p\">(</span>\n                    <span class=\"n\">bert_tokens</span><span class=\"p\">,</span> <span class=\"n\">answer_char_start</span><span class=\"p\">,</span> <span class=\"n\">answer_char_end</span>\n                <span class=\"p\">)</span>\n\n            <span class=\"n\">labels</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_closest_answer_spans</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokens</span><span class=\"p\">,</span> <span class=\"n\">char_start</span><span class=\"p\">,</span> <span class=\"n\">char_end</span><span class=\"p\">):</span>\n        <span class=\"n\">NONE_VALUE</span><span class=\"p\">,</span> <span class=\"n\">DISTANCE_THRESHOLD</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"mi\">2</span>\n\n        <span class=\"n\">text_spans</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"p\">(</span><span class=\"n\">NONE_VALUE</span><span class=\"p\">,</span> <span class=\"n\">NONE_VALUE</span><span class=\"p\">)</span> <span class=\"k\">if</span> <span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span> <span class=\"k\">else</span> <span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">text_span</span>\n            <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokens</span>\n        <span class=\"p\">]</span>\n\n        <span class=\"n\">start_distances</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"nb\">abs</span><span class=\"p\">(</span><span class=\"n\">span</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">char_start</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">span</span> <span class=\"ow\">in</span> <span class=\"n\">text_spans</span><span class=\"p\">]</span>\n        <span class=\"n\">end_distances</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"nb\">abs</span><span class=\"p\">(</span><span class=\"n\">span</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"n\">char_end</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">span</span> <span class=\"ow\">in</span> <span class=\"n\">text_spans</span><span class=\"p\">]</span>\n\n        <span class=\"n\">min_start_distance</span><span class=\"p\">,</span> <span class=\"n\">min_end_distance</span> <span class=\"o\">=</span> <span class=\"nb\">min</span><span class=\"p\">(</span><span class=\"n\">start_distances</span><span class=\"p\">),</span> <span class=\"nb\">min</span><span class=\"p\">(</span><span class=\"n\">end_distances</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">min_start_distance</span> <span class=\"o\">&lt;</span> <span class=\"n\">DISTANCE_THRESHOLD</span><span class=\"p\">:</span>\n            <span class=\"n\">answer_start</span> <span class=\"o\">=</span> <span class=\"n\">start_distances</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">min_start_distance</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">answer_start</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">min_end_distance</span> <span class=\"o\">&lt;</span> <span class=\"n\">DISTANCE_THRESHOLD</span><span class=\"p\">:</span>\n            <span class=\"n\">answer_end</span> <span class=\"o\">=</span> <span class=\"n\">end_distances</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">min_end_distance</span><span class=\"p\">)</span>\n            <span class=\"n\">start_from</span> <span class=\"o\">=</span> <span class=\"n\">answer_end</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"c1\"># e.g.) end_distances: [3, 1, 1, 4], min_end_distance = 1 =&gt; use 2 index instead of 1</span>\n                <span class=\"n\">answer_end</span> <span class=\"o\">=</span> <span class=\"n\">end_distances</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">min_end_distance</span><span class=\"p\">,</span> <span class=\"n\">start_from</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"ne\">ValueError</span><span class=\"p\">:</span>\n                <span class=\"k\">pass</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">answer_end</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"k\">return</span> <span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/sst.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.sst &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.sst</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.sst</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"SSTBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.SSTBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:sst_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">SSTBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    SST DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SSTBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">data_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;train&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">lines</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/stsb.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.stsb &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.stsb</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.stsb</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">RegressionBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"STSBBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.STSBBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:stsb_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">STSBBertReader</span><span class=\"p\">(</span><span class=\"n\">RegressionBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    STS-B (Semantic Textual Similarity Benchmark) DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">STSBBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">label_key</span><span class=\"o\">=</span><span class=\"s2\">&quot;score&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">7</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">8</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;score&quot;</span><span class=\"p\">:</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/tok_cls.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.tok_cls &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.tok_cls</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.tok_cls</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">itertools</span> <span class=\"k\">import</span> <span class=\"n\">chain</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">import</span> <span class=\"nn\">uuid</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset</span> <span class=\"k\">import</span> <span class=\"n\">TokClsBertDataset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dto</span> <span class=\"k\">import</span> <span class=\"n\">BertFeature</span><span class=\"p\">,</span> <span class=\"n\">Helper</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader.base</span> <span class=\"k\">import</span> <span class=\"n\">DataReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.tokenizer</span> <span class=\"k\">import</span> <span class=\"n\">WordTokenizer</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.data.utils</span> <span class=\"k\">as</span> <span class=\"nn\">utils</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"TokClsBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.bert.html#claf.data.reader.TokClsBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:tok_cls_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">TokClsBertReader</span><span class=\"p\">(</span><span class=\"n\">DataReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    DataReader for Token Classification using BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .json file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: define tokenizers config (subword)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lang_code: language code: set as &#39;ko&#39; if using BERT model trained with mecab-tokenized data</span>\n<span class=\"sd\">        tag_key: name of the label in .json file to use for classification</span>\n<span class=\"sd\">        ignore_tag_idx: prediction results that have this number as ground-truth idx are ignored</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">lang_code</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">tag_key</span><span class=\"o\">=</span><span class=\"s2\">&quot;tags&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">ignore_tag_idx</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">TokClsBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">TokClsBertDataset</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span> <span class=\"o\">=</span> <span class=\"n\">sequence_max_length</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_columns</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;subword&quot;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">tokenizers</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;WordTokenizer and SubwordTokenizer is required.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">subword_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;subword&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sent_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;sent&quot;</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">lang_code</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;ko&quot;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mecab_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">WordTokenizer</span><span class=\"p\">(</span><span class=\"s2\">&quot;mecab_ko&quot;</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sent_tokenizer</span><span class=\"p\">,</span> <span class=\"n\">split_with_regex</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_key</span> <span class=\"o\">=</span> <span class=\"n\">tag_key</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span> <span class=\"o\">=</span> <span class=\"n\">cls_token</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span> <span class=\"o\">=</span> <span class=\"n\">sep_token</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ignore_tag_idx</span> <span class=\"o\">=</span> <span class=\"n\">ignore_tag_idx</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">):</span>\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">tok_cls_data</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">tok_cls_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_tag_dicts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n            <span class=\"n\">tag_idx2text</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">tag_idx</span><span class=\"p\">:</span> <span class=\"n\">tag_text</span> <span class=\"k\">for</span> <span class=\"n\">tag_idx</span><span class=\"p\">,</span> <span class=\"n\">tag_text</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_key</span><span class=\"p\">])}</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n            <span class=\"n\">tags</span> <span class=\"o\">=</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">chain</span><span class=\"o\">.</span><span class=\"n\">from_iterable</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_key</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">d</span> <span class=\"ow\">in</span> <span class=\"n\">data</span><span class=\"p\">))))</span>\n            <span class=\"n\">tag_idx2text</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">tag_idx</span><span class=\"p\">:</span> <span class=\"n\">tag_text</span> <span class=\"k\">for</span> <span class=\"n\">tag_idx</span><span class=\"p\">,</span> <span class=\"n\">tag_text</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">tags</span><span class=\"p\">)}</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;check _get_data return type.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">tag_text2idx</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">tag_text</span><span class=\"p\">:</span> <span class=\"n\">tag_idx</span> <span class=\"k\">for</span> <span class=\"n\">tag_idx</span><span class=\"p\">,</span> <span class=\"n\">tag_text</span> <span class=\"ow\">in</span> <span class=\"n\">tag_idx2text</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()}</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">tag_idx2text</span><span class=\"p\">,</span> <span class=\"n\">tag_text2idx</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        .json file structure should be something like this:</span>\n\n<span class=\"sd\">        {</span>\n<span class=\"sd\">            &quot;data&quot;: [</span>\n<span class=\"sd\">                {</span>\n<span class=\"sd\">                    &quot;sequence&quot;: &quot;i&#39;m looking for a flight from New York to London.&quot;,</span>\n<span class=\"sd\">                    &quot;slots&quot;: [&quot;O&quot;, &quot;O&quot;, &quot;O&quot;, &quot;O&quot;, &quot;O&quot;, &quot;O&quot;, &quot;B-city.dept&quot;, &quot;I-city.dept&quot; &quot;O&quot;, &quot;B-city.dest&quot;]</span>\n<span class=\"sd\">                    // the number of tokens in sequence.split() and tags must match</span>\n<span class=\"sd\">                },</span>\n<span class=\"sd\">                ...</span>\n<span class=\"sd\">            ],</span>\n<span class=\"sd\">            &quot;slots&quot;: [  // tag_key</span>\n<span class=\"sd\">                &quot;O&quot;,    // tags should be in IOB format</span>\n<span class=\"sd\">                &quot;B-city.dept&quot;,</span>\n<span class=\"sd\">                &quot;I-city.dept&quot;,</span>\n<span class=\"sd\">                &quot;B-city.dest&quot;,</span>\n<span class=\"sd\">                &quot;I-city.dest&quot;,</span>\n<span class=\"sd\">                ...</span>\n<span class=\"sd\">            ]</span>\n<span class=\"sd\">        }</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_data</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">tag_idx2text</span><span class=\"p\">,</span> <span class=\"n\">tag_text2idx</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_tag_dicts</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">=</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">Helper</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span>\n            <span class=\"s2\">&quot;file_path&quot;</span><span class=\"p\">:</span> <span class=\"n\">file_path</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;tag_idx2text&quot;</span><span class=\"p\">:</span> <span class=\"n\">tag_idx2text</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;ignore_tag_idx&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ignore_tag_idx</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;cls_token&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sep_token&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n        <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_model_parameter</span><span class=\"p\">({</span>\n            <span class=\"s2\">&quot;num_tags&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tag_idx2text</span><span class=\"p\">),</span>\n            <span class=\"s2\">&quot;ignore_tag_idx&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ignore_tag_idx</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n        <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_predict_helper</span><span class=\"p\">({</span>\n            <span class=\"s2\">&quot;tag_idx2text&quot;</span><span class=\"p\">:</span> <span class=\"n\">tag_idx2text</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n\n        <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">example</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">):</span>\n            <span class=\"n\">sequence_text</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n            <span class=\"n\">sequence_tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">sequence_text</span><span class=\"p\">)</span>\n            <span class=\"n\">naive_tokens</span> <span class=\"o\">=</span> <span class=\"n\">sequence_text</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()</span>\n            <span class=\"n\">is_head_word</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">get_is_head_of_word</span><span class=\"p\">(</span><span class=\"n\">naive_tokens</span><span class=\"p\">,</span> <span class=\"n\">sequence_tokens</span><span class=\"p\">)</span>\n\n            <span class=\"n\">sequence_sub_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"n\">tagged_sub_token_idxs</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"n\">curr_sub_token_idx</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># skip CLS_TOKEN</span>\n            <span class=\"k\">for</span> <span class=\"n\">token_idx</span><span class=\"p\">,</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">sequence_tokens</span><span class=\"p\">):</span>\n                <span class=\"k\">for</span> <span class=\"n\">sub_token_pos</span><span class=\"p\">,</span> <span class=\"n\">sub_token</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span>\n                        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">subword_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">)</span>\n                <span class=\"p\">):</span>\n                    <span class=\"n\">sequence_sub_tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">sub_token</span><span class=\"p\">)</span>\n                    <span class=\"k\">if</span> <span class=\"n\">is_head_word</span><span class=\"p\">[</span><span class=\"n\">token_idx</span><span class=\"p\">]</span> <span class=\"ow\">and</span> <span class=\"n\">sub_token_pos</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                        <span class=\"n\">tagged_sub_token_idxs</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">curr_sub_token_idx</span><span class=\"p\">)</span>\n                    <span class=\"n\">curr_sub_token_idx</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n\n            <span class=\"n\">bert_input</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">sequence_sub_tokens</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">]</span>\n\n            <span class=\"k\">if</span> <span class=\"p\">(</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n                    <span class=\"ow\">and</span> <span class=\"n\">data_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;train&quot;</span>\n                    <span class=\"ow\">and</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_input</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span>\n            <span class=\"p\">):</span>\n                <span class=\"k\">continue</span>\n\n            <span class=\"k\">if</span> <span class=\"s2\">&quot;uid&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">example</span><span class=\"p\">:</span>\n                <span class=\"n\">data_uid</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">]</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">data_uid</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid1</span><span class=\"p\">())</span>\n\n            <span class=\"n\">tag_texts</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tag_key</span><span class=\"p\">]</span>\n            <span class=\"n\">tag_idxs</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">tag_text2idx</span><span class=\"p\">[</span><span class=\"n\">tag_text</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">tag_text</span> <span class=\"ow\">in</span> <span class=\"n\">tag_texts</span><span class=\"p\">]</span>\n\n            <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">sanity_check_iob</span><span class=\"p\">(</span><span class=\"n\">naive_tokens</span><span class=\"p\">,</span> <span class=\"n\">tag_texts</span><span class=\"p\">)</span>\n            <span class=\"k\">assert</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">naive_tokens</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tagged_sub_token_idxs</span><span class=\"p\">),</span> \\\n                <span class=\"n\">f</span><span class=\"s2\">&quot;&quot;&quot;Wrong tagged_sub_token_idxs: followings mismatch.</span>\n<span class=\"s2\">                naive_tokens: </span><span class=\"si\">{naive_tokens}</span><span class=\"s2\"></span>\n<span class=\"s2\">                sequence_sub_tokens: </span><span class=\"si\">{sequence_sub_tokens}</span><span class=\"s2\"></span>\n<span class=\"s2\">                tagged_sub_token_idxs: </span><span class=\"si\">{tagged_sub_token_idxs}</span><span class=\"s2\">&quot;&quot;&quot;</span>\n\n            <span class=\"n\">feature_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_uid</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">:</span> <span class=\"n\">bert_input</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;tagged_sub_token_idxs&quot;</span><span class=\"p\">:</span> <span class=\"n\">tagged_sub_token_idxs</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;num_tokens&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">naive_tokens</span><span class=\"p\">),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">features</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">feature_row</span><span class=\"p\">)</span>\n\n            <span class=\"n\">label_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_uid</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">:</span> <span class=\"n\">tag_idxs</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">:</span> <span class=\"n\">tag_texts</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">label_row</span><span class=\"p\">)</span>\n\n            <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_example</span><span class=\"p\">(</span><span class=\"n\">data_uid</span><span class=\"p\">,</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_text</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_sub_tokens&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_sub_tokens</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">:</span> <span class=\"n\">tag_idxs</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">:</span> <span class=\"n\">tag_texts</span><span class=\"p\">,</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_batch</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">),</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"TokClsBertReader.read_one_example\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.bert.html#claf.data.reader.TokClsBertReader.read_one_example\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">read_one_example</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; inputs keys: sequence &quot;&quot;&quot;</span>\n        <span class=\"n\">sequence_text</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">sequence_tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">sequence_text</span><span class=\"p\">)</span>\n        <span class=\"n\">naive_tokens</span> <span class=\"o\">=</span> <span class=\"n\">sequence_text</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()</span>\n        <span class=\"n\">is_head_word</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">get_is_head_of_word</span><span class=\"p\">(</span><span class=\"n\">naive_tokens</span><span class=\"p\">,</span> <span class=\"n\">sequence_tokens</span><span class=\"p\">)</span>\n\n        <span class=\"n\">sequence_sub_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">tagged_sub_token_idxs</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">curr_sub_token_idx</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># skip CLS_TOKEN</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_idx</span><span class=\"p\">,</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">sequence_tokens</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">sub_token_pos</span><span class=\"p\">,</span> <span class=\"n\">sub_token</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">subword_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">)</span>\n            <span class=\"p\">):</span>\n                <span class=\"n\">sequence_sub_tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">sub_token</span><span class=\"p\">)</span>\n                <span class=\"k\">if</span> <span class=\"n\">is_head_word</span><span class=\"p\">[</span><span class=\"n\">token_idx</span><span class=\"p\">]</span> <span class=\"ow\">and</span> <span class=\"n\">sub_token_pos</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                    <span class=\"n\">tagged_sub_token_idxs</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">curr_sub_token_idx</span><span class=\"p\">)</span>\n                <span class=\"n\">curr_sub_token_idx</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">sequence_sub_tokens</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span><span class=\"p\">:</span>\n            <span class=\"n\">sequence_sub_tokens</span> <span class=\"o\">=</span> <span class=\"n\">sequence_sub_tokens</span><span class=\"p\">[:</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span><span class=\"p\">]</span>\n\n        <span class=\"n\">bert_input</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">sequence_sub_tokens</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">]</span>\n        <span class=\"k\">assert</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">naive_tokens</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tagged_sub_token_idxs</span><span class=\"p\">),</span> \\\n            <span class=\"n\">f</span><span class=\"s2\">&quot;&quot;&quot;Wrong tagged_sub_token_idxs: followings mismatch.</span>\n<span class=\"s2\">            naive_tokens: </span><span class=\"si\">{naive_tokens}</span><span class=\"s2\"></span>\n<span class=\"s2\">            sequence_sub_tokens: </span><span class=\"si\">{sequence_sub_tokens}</span><span class=\"s2\"></span>\n<span class=\"s2\">            tagged_sub_token_idxs: </span><span class=\"si\">{tagged_sub_token_idxs}</span><span class=\"s2\">&quot;&quot;&quot;</span>\n\n        <span class=\"n\">bert_feature</span> <span class=\"o\">=</span> <span class=\"n\">BertFeature</span><span class=\"p\">()</span>\n        <span class=\"n\">bert_feature</span><span class=\"o\">.</span><span class=\"n\">set_input</span><span class=\"p\">(</span><span class=\"n\">bert_input</span><span class=\"p\">)</span>\n        <span class=\"n\">bert_feature</span><span class=\"o\">.</span><span class=\"n\">set_feature</span><span class=\"p\">(</span><span class=\"s2\">&quot;tagged_sub_token_idxs&quot;</span><span class=\"p\">,</span> <span class=\"n\">tagged_sub_token_idxs</span><span class=\"p\">)</span>\n        <span class=\"n\">bert_feature</span><span class=\"o\">.</span><span class=\"n\">set_feature</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_tokens&quot;</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">naive_tokens</span><span class=\"p\">))</span>\n\n        <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">bert_feature</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()]</span>\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">return</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">helper</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/bert/wnli.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert.wnli &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert.wnli</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.bert.wnli</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsBertReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"WNLIBertReader\"><a class=\"viewcode-back\" href=\"../../../../../claf.data.reader.html#claf.data.reader.WNLIBertReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:wnli_bert&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">WNLIBertReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsBertReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    WNLI (Winograd NLI) DataReader for BERT</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .tsv file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n        <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">WNLIBertReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n            <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"n\">cls_token</span><span class=\"p\">,</span>\n            <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"n\">sep_token</span><span class=\"p\">,</span>\n            <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"n\">input_type</span><span class=\"p\">,</span>\n            <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"n\">is_test</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">],</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/cola.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.cola &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.cola</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.cola</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"CoLAReader\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.cola.CoLAReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:cola&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">CoLAReader</span><span class=\"p\">(</span><span class=\"n\">SeqClsReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    CoLA DataReader</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .json file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: define tokenizers config (word)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"p\">,</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CoLAReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">file_paths</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizers</span><span class=\"p\">,</span>\n            <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"n\">sequence_max_length</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_type&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">_file</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"n\">_file</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">data_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;train&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">lines</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lines</span><span class=\"p\">):</span>\n            <span class=\"n\">line_tokens</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span>\n                    <span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{data_type}</span><span class=\"s2\">-</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">:</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"k\">if</span> <span class=\"n\">data_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;test&quot;</span> <span class=\"k\">else</span> <span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span> <span class=\"k\">if</span> <span class=\"n\">data_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;test&quot;</span> <span class=\"k\">else</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">line_tokens</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n                <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/seq_cls.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.seq_cls &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.seq_cls</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.seq_cls</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">import</span> <span class=\"nn\">uuid</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset.seq_cls</span> <span class=\"k\">import</span> <span class=\"n\">SeqClsDataset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dto</span> <span class=\"k\">import</span> <span class=\"n\">Helper</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader.base</span> <span class=\"k\">import</span> <span class=\"n\">DataReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"SeqClsReader\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.seq_cls.SeqClsReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:seq_cls&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">SeqClsReader</span><span class=\"p\">(</span><span class=\"n\">DataReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    DataReader for Sequence Classification</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .json file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: define tokenizers config (word)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        class_key: name of the label in .json file to use for classification</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">CLASS_DATA</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">sequence_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">class_key</span><span class=\"o\">=</span><span class=\"s2\">&quot;class&quot;</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SeqClsReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">SeqClsDataset</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span> <span class=\"o\">=</span> <span class=\"n\">sequence_max_length</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_columns</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;word&quot;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">tokenizers</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;WordTokenizer is required. define WordTokenizer&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span> <span class=\"o\">=</span> <span class=\"n\">class_key</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">seq_cls_data</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">seq_cls_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_class_dicts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">seq_cls_data</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">class_data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">CLASS_DATA</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">class_data</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">item</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"n\">seq_cls_data</span><span class=\"p\">]</span>\n            <span class=\"n\">class_data</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">class_data</span><span class=\"p\">))</span>  <span class=\"c1\"># remove duplicate</span>\n\n        <span class=\"n\">class_idx2text</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">class_idx</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">class_text</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">class_idx</span><span class=\"p\">,</span> <span class=\"n\">class_text</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">class_data</span><span class=\"p\">)</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">class_text2idx</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">class_text</span><span class=\"p\">:</span> <span class=\"n\">class_idx</span> <span class=\"k\">for</span> <span class=\"n\">class_idx</span><span class=\"p\">,</span> <span class=\"n\">class_text</span> <span class=\"ow\">in</span> <span class=\"n\">class_idx2text</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()}</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">class_idx2text</span><span class=\"p\">,</span> <span class=\"n\">class_text2idx</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        .json file structure should be something like this:</span>\n\n<span class=\"sd\">        {</span>\n<span class=\"sd\">            &quot;data&quot;: [</span>\n<span class=\"sd\">                {</span>\n<span class=\"sd\">                    &quot;sequence&quot;: &quot;what a wonderful day!&quot;,</span>\n<span class=\"sd\">                    &quot;emotion&quot;: &quot;happy&quot;</span>\n<span class=\"sd\">                },</span>\n<span class=\"sd\">                ...</span>\n<span class=\"sd\">            ],</span>\n<span class=\"sd\">            &quot;emotion&quot;: [  // class_key</span>\n<span class=\"sd\">                &quot;angry&quot;,</span>\n<span class=\"sd\">                &quot;happy&quot;,</span>\n<span class=\"sd\">                &quot;sad&quot;,</span>\n<span class=\"sd\">                ...</span>\n<span class=\"sd\">            ]</span>\n<span class=\"sd\">        }</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_data</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">)</span>\n        <span class=\"n\">class_idx2text</span><span class=\"p\">,</span> <span class=\"n\">class_text2idx</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_class_dicts</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">=</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">Helper</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span>\n            <span class=\"s2\">&quot;file_path&quot;</span><span class=\"p\">:</span> <span class=\"n\">file_path</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;class_idx2text&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_idx2text</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;class_text2idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_text2idx</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n        <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_model_parameter</span><span class=\"p\">({</span>\n            <span class=\"s2\">&quot;num_classes&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">class_idx2text</span><span class=\"p\">),</span>\n        <span class=\"p\">})</span>\n        <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_predict_helper</span><span class=\"p\">({</span>\n            <span class=\"s2\">&quot;class_idx2text&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_idx2text</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n\n        <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">example</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">):</span>\n            <span class=\"n\">sequence</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n            <span class=\"n\">sequence_words</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"p\">(</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n                    <span class=\"ow\">and</span> <span class=\"n\">data_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;train&quot;</span>\n                    <span class=\"ow\">and</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">sequence_words</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sequence_max_length</span>\n            <span class=\"p\">):</span>\n                <span class=\"k\">continue</span>\n\n            <span class=\"k\">if</span> <span class=\"s2\">&quot;uid&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">example</span><span class=\"p\">:</span>\n                <span class=\"n\">data_uid</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"s2\">&quot;uid&quot;</span><span class=\"p\">]</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">data_uid</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid1</span><span class=\"p\">())</span>\n\n            <span class=\"n\">feature_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_uid</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">features</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">feature_row</span><span class=\"p\">)</span>\n\n            <span class=\"n\">class_text</span> <span class=\"o\">=</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">class_key</span><span class=\"p\">]</span>\n            <span class=\"n\">label_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_uid</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_text2idx</span><span class=\"p\">[</span><span class=\"n\">class_text</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_text</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">labels</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">label_row</span><span class=\"p\">)</span>\n\n            <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_example</span><span class=\"p\">(</span><span class=\"n\">data_uid</span><span class=\"p\">,</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_text2idx</span><span class=\"p\">[</span><span class=\"n\">class_text</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_text</span><span class=\"p\">,</span>\n            <span class=\"p\">})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_batch</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">),</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"SeqClsReader.read_one_example\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.seq_cls.SeqClsReader.read_one_example\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">read_one_example</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; inputs keys: sequence &quot;&quot;&quot;</span>\n        <span class=\"n\">sequence</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">sequence</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"p\">{}</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/squad.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.squad &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.squad</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.squad</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"k\">import</span> <span class=\"n\">Counter</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">import</span> <span class=\"nn\">re</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset</span> <span class=\"k\">import</span> <span class=\"n\">SQuADDataset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dto</span> <span class=\"k\">import</span> <span class=\"n\">Helper</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader.base</span> <span class=\"k\">import</span> <span class=\"n\">DataReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric.squad_v1_official</span> <span class=\"k\">import</span> <span class=\"n\">normalize_answer</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"SQuADReader\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.squad.SQuADReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:squad&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">SQuADReader</span><span class=\"p\">(</span><span class=\"n\">DataReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    SQuAD DataReader</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .json file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config (char/word)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">lang_code</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">context_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SQuADReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">SQuADDataset</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_max_length</span> <span class=\"o\">=</span> <span class=\"n\">context_max_length</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_columns</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;word&quot;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">tokenizers</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;WordTokenizer is required. define English WordTokenizer&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">tokenized_error_count</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n        <span class=\"n\">squad</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;data&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">squad</span><span class=\"p\">:</span>\n            <span class=\"n\">squad</span> <span class=\"o\">=</span> <span class=\"n\">squad</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">Helper</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span>\n            <span class=\"s2\">&quot;file_path&quot;</span><span class=\"p\">:</span> <span class=\"n\">file_path</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;raw_dataset&quot;</span><span class=\"p\">:</span> <span class=\"n\">squad</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n        <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_model_parameter</span><span class=\"p\">({</span>\n            <span class=\"s2\">&quot;lang_code&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n\n        <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">article</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">squad</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">paragraph</span> <span class=\"ow\">in</span> <span class=\"n\">article</span><span class=\"p\">[</span><span class=\"s2\">&quot;paragraphs&quot;</span><span class=\"p\">]:</span>\n                <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"n\">paragraph</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;``&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot; &#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;&#39;&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot; &#39;</span><span class=\"p\">)</span>\n                <span class=\"n\">context_words</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span>\n\n                <span class=\"k\">if</span> <span class=\"p\">(</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_max_length</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n                    <span class=\"ow\">and</span> <span class=\"n\">data_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;train&quot;</span>\n                    <span class=\"ow\">and</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">context_words</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_max_length</span>\n                <span class=\"p\">):</span>\n                    <span class=\"k\">continue</span>\n\n                <span class=\"k\">for</span> <span class=\"n\">qa</span> <span class=\"ow\">in</span> <span class=\"n\">paragraph</span><span class=\"p\">[</span><span class=\"s2\">&quot;qas&quot;</span><span class=\"p\">]:</span>\n                    <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n                    <span class=\"n\">id_</span> <span class=\"o\">=</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span>\n\n                    <span class=\"n\">answer_texts</span><span class=\"p\">,</span> <span class=\"n\">answer_indices</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n\n                    <span class=\"k\">if</span> <span class=\"n\">qa</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;is_impossible&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n                        <span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;plausible_answers&quot;</span><span class=\"p\">]</span>\n                        <span class=\"n\">answerable</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n                    <span class=\"k\">else</span><span class=\"p\">:</span>\n                        <span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">]</span>\n                        <span class=\"n\">answerable</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n\n                    <span class=\"k\">for</span> <span class=\"n\">answer</span> <span class=\"ow\">in</span> <span class=\"n\">answers</span><span class=\"p\">:</span>\n                        <span class=\"n\">answer_start</span> <span class=\"o\">=</span> <span class=\"n\">answer</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start&quot;</span><span class=\"p\">]</span>\n                        <span class=\"n\">answer_end</span> <span class=\"o\">=</span> <span class=\"n\">answer_start</span> <span class=\"o\">+</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">answer</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">])</span>\n\n                        <span class=\"n\">answer_texts</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">answer</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">])</span>\n                        <span class=\"n\">answer_indices</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span><span class=\"p\">))</span>\n\n                    <span class=\"n\">feature_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                        <span class=\"s2\">&quot;context&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_clean_text</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">),</span>\n                        <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">:</span> <span class=\"n\">question</span><span class=\"p\">,</span>\n                    <span class=\"p\">}</span>\n                    <span class=\"n\">features</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">feature_row</span><span class=\"p\">)</span>\n\n                    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">answer_indices</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                        <span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_find_one_most_common</span><span class=\"p\">(</span><span class=\"n\">answer_indices</span><span class=\"p\">)</span>\n                        <span class=\"n\">text_spans</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_convert_to_spans</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">context_words</span><span class=\"p\">)</span>\n                        <span class=\"n\">word_idxs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_word_span_idxs</span><span class=\"p\">(</span><span class=\"n\">text_spans</span><span class=\"p\">,</span> <span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span><span class=\"p\">)</span>\n\n                        <span class=\"n\">word_answer_start</span> <span class=\"o\">=</span> <span class=\"n\">word_idxs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n                        <span class=\"n\">word_answer_end</span> <span class=\"o\">=</span> <span class=\"n\">word_idxs</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n\n                        <span class=\"c1\"># To check rebuild answer: char_answer_text - word_answer_text</span>\n                        <span class=\"n\">char_answer_text</span> <span class=\"o\">=</span> <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"n\">answer_start</span><span class=\"p\">:</span><span class=\"n\">answer_end</span><span class=\"p\">]</span>\n                        <span class=\"n\">word_answer_text</span> <span class=\"o\">=</span> <span class=\"n\">context</span><span class=\"p\">[</span>\n                            <span class=\"n\">text_spans</span><span class=\"p\">[</span><span class=\"n\">word_answer_start</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"p\">:</span> <span class=\"n\">text_spans</span><span class=\"p\">[</span><span class=\"n\">word_answer_end</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n                        <span class=\"p\">]</span>\n\n                        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_is_rebuild</span><span class=\"p\">(</span><span class=\"n\">char_answer_text</span><span class=\"p\">,</span> <span class=\"n\">word_answer_text</span><span class=\"p\">):</span>\n                            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;word_tokenized_error: </span><span class=\"si\">{char_answer_text}</span><span class=\"s2\">  ###  </span><span class=\"si\">{word_answer_text}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n                            <span class=\"n\">tokenized_error_count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n\n                    <span class=\"k\">else</span><span class=\"p\">:</span>\n                        <span class=\"c1\"># Unanswerable</span>\n                        <span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;&lt;noanswer&gt;&quot;</span><span class=\"p\">]</span>\n                        <span class=\"n\">text_spans</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n                        <span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span> <span class=\"o\">=</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span>\n                        <span class=\"n\">word_answer_start</span><span class=\"p\">,</span> <span class=\"n\">word_answer_end</span> <span class=\"o\">=</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span>\n\n                    <span class=\"n\">label_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                        <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"n\">id_</span><span class=\"p\">,</span>\n                        <span class=\"s2\">&quot;answer_start&quot;</span><span class=\"p\">:</span> <span class=\"n\">word_answer_start</span><span class=\"p\">,</span>\n                        <span class=\"s2\">&quot;answer_end&quot;</span><span class=\"p\">:</span> <span class=\"n\">word_answer_end</span><span class=\"p\">,</span>\n                        <span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">:</span> <span class=\"n\">answerable</span><span class=\"p\">,</span>\n                    <span class=\"p\">}</span>\n                    <span class=\"n\">labels</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">label_row</span><span class=\"p\">)</span>\n\n                    <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_example</span><span class=\"p\">(</span><span class=\"n\">id_</span><span class=\"p\">,</span> <span class=\"p\">{</span>\n                        <span class=\"s2\">&quot;context&quot;</span><span class=\"p\">:</span> <span class=\"n\">context</span><span class=\"p\">,</span>\n                        <span class=\"s2\">&quot;text_span&quot;</span><span class=\"p\">:</span> <span class=\"n\">text_spans</span><span class=\"p\">,</span>\n                        <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">:</span> <span class=\"n\">question</span><span class=\"p\">,</span>\n                        <span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">:</span> <span class=\"n\">answer_texts</span><span class=\"p\">,</span>\n                    <span class=\"p\">})</span>\n\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;tokenized_error_count: </span><span class=\"si\">{tokenized_error_count}</span><span class=\"s2\"> &quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_batch</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">),</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"SQuADReader.read_one_example\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.squad.SQuADReader.read_one_example\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">read_one_example</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; inputs keys: question, context &quot;&quot;&quot;</span>\n        <span class=\"n\">context_text</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">tokenized_context</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">context_text</span><span class=\"p\">)</span>\n        <span class=\"n\">question_text</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_clean_text</span><span class=\"p\">(</span><span class=\"n\">context_text</span><span class=\"p\">)</span>\n        <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_clean_text</span><span class=\"p\">(</span><span class=\"n\">question_text</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;text_span&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_convert_to_spans</span><span class=\"p\">(</span><span class=\"n\">context_text</span><span class=\"p\">,</span> <span class=\"n\">tokenized_context</span><span class=\"p\">),</span>\n            <span class=\"s2\">&quot;tokenized_context&quot;</span><span class=\"p\">:</span> <span class=\"n\">tokenized_context</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;token_key&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;tokenized_context&quot;</span>  <span class=\"c1\"># for 1-example inference latency key</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">helper</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_clean_text</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"c1\"># https://github.com/allenai/document-qa/blob/2f9fa6878b60ed8a8a31bcf03f802cde292fe48b/docqa/data_processing/text_utils.py#L124</span>\n        <span class=\"c1\"># be consistent with quotes, and replace \\u2014 and \\u2212 which I have seen being mapped to UNK</span>\n        <span class=\"c1\"># by glove word vecs</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"n\">text</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;&#39;&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot;&#39;</span><span class=\"p\">)</span>\n            <span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;``&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot;&#39;</span><span class=\"p\">)</span>\n            <span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\u2212</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;-&quot;</span><span class=\"p\">)</span>\n            <span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\u2014</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\u2013</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_find_one_most_common</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">answers</span><span class=\"p\">):</span>\n        <span class=\"n\">answer_counter</span> <span class=\"o\">=</span> <span class=\"n\">Counter</span><span class=\"p\">(</span><span class=\"n\">answers</span><span class=\"p\">)</span>\n        <span class=\"n\">value</span> <span class=\"o\">=</span> <span class=\"n\">answer_counter</span><span class=\"o\">.</span><span class=\"n\">most_common</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">value</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">value</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_convert_to_spans</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">raw_text</span><span class=\"p\">,</span> <span class=\"n\">tokenized_text</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Convert a tokenized version of `raw_text` into a series character spans referencing the `raw_text` &quot;&quot;&quot;</span>\n        <span class=\"n\">double_quote_re</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">compile</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\&quot;</span><span class=\"s2\">|``|&#39;&#39;&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">curr_idx</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">spans</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokenized_text</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Tokenizer might transform double quotes, for this case search over several</span>\n            <span class=\"c1\"># possible encodings</span>\n            <span class=\"k\">if</span> <span class=\"n\">double_quote_re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">):</span>\n                <span class=\"n\">span</span> <span class=\"o\">=</span> <span class=\"n\">double_quote_re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">raw_text</span><span class=\"p\">[</span><span class=\"n\">curr_idx</span><span class=\"p\">:])</span>\n                <span class=\"n\">temp</span> <span class=\"o\">=</span> <span class=\"n\">curr_idx</span> <span class=\"o\">+</span> <span class=\"n\">span</span><span class=\"o\">.</span><span class=\"n\">start</span><span class=\"p\">()</span>\n                <span class=\"n\">token_length</span> <span class=\"o\">=</span> <span class=\"n\">span</span><span class=\"o\">.</span><span class=\"n\">end</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">span</span><span class=\"o\">.</span><span class=\"n\">start</span><span class=\"p\">()</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">temp</span> <span class=\"o\">=</span> <span class=\"n\">raw_text</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">curr_idx</span><span class=\"p\">)</span>\n                <span class=\"n\">token_length</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">temp</span> <span class=\"o\">&lt;</span> <span class=\"n\">curr_idx</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{raw_text}</span><span class=\"s2\"> </span><span class=\"se\">\\n</span><span class=\"si\">{tokenized_text}</span><span class=\"s2\"> </span><span class=\"se\">\\n</span><span class=\"si\">{token}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"n\">curr_idx</span> <span class=\"o\">=</span> <span class=\"n\">temp</span>\n            <span class=\"n\">spans</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"n\">curr_idx</span><span class=\"p\">,</span> <span class=\"n\">curr_idx</span> <span class=\"o\">+</span> <span class=\"n\">token_length</span><span class=\"p\">))</span>\n            <span class=\"n\">curr_idx</span> <span class=\"o\">+=</span> <span class=\"n\">token_length</span>\n        <span class=\"k\">return</span> <span class=\"n\">spans</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_word_span_idxs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">spans</span><span class=\"p\">,</span> <span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"p\">):</span>\n        <span class=\"n\">idxs</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">word_ix</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">,</span> <span class=\"n\">e</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">spans</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">e</span> <span class=\"o\">&gt;</span> <span class=\"n\">start</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">s</span> <span class=\"o\">&lt;</span> <span class=\"n\">end</span><span class=\"p\">:</span>\n                    <span class=\"n\">idxs</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">word_ix</span><span class=\"p\">)</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"k\">break</span>\n        <span class=\"k\">return</span> <span class=\"n\">idxs</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_is_rebuild</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">char_answer_text</span><span class=\"p\">,</span> <span class=\"n\">word_answer_text</span><span class=\"p\">):</span>\n        <span class=\"n\">norm_char_answer_text</span> <span class=\"o\">=</span> <span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">char_answer_text</span><span class=\"p\">)</span>\n        <span class=\"n\">norm_word_answer_text</span> <span class=\"o\">=</span> <span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">word_answer_text</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">norm_char_answer_text</span> <span class=\"o\">!=</span> <span class=\"n\">norm_word_answer_text</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">True</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/reader/wikisql.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.wikisql &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.reader.wikisql</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.reader.wikisql</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pathlib</span> <span class=\"k\">import</span> <span class=\"n\">Path</span>\n<span class=\"kn\">import</span> <span class=\"nn\">uuid</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dataset</span> <span class=\"k\">import</span> <span class=\"n\">WikiSQLDataset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dto</span> <span class=\"k\">import</span> <span class=\"n\">Helper</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.reader.base</span> <span class=\"k\">import</span> <span class=\"n\">DataReader</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric.wikisql_lib.dbengine</span> <span class=\"k\">import</span> <span class=\"n\">DBEngine</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric.wikisql_lib.query</span> <span class=\"k\">import</span> <span class=\"n\">Query</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"WikiSQLReader\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.wikisql.WikiSQLReader\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;reader:wikisql&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">WikiSQLReader</span><span class=\"p\">(</span><span class=\"n\">DataReader</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    WikiSQL DataReader</span>\n<span class=\"sd\">    (http://arxiv.org/abs/1709.00103)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        file_paths: .json file paths (train and dev)</span>\n<span class=\"sd\">        tokenizers: defined tokenizers config (char/word)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">context_max_length</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">is_test</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">WikiSQLReader</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">file_paths</span><span class=\"p\">,</span> <span class=\"n\">WikiSQLDataset</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_test</span> <span class=\"o\">=</span> <span class=\"n\">is_test</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_columns</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;column&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;word&quot;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">tokenizers</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;WordTokenizer is required. define English WordTokenizer&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dbengine</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">file_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">return_path</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"n\">file_path</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data_dir</span> <span class=\"o\">=</span> <span class=\"n\">file_path</span><span class=\"o\">.</span><span class=\"n\">parent</span>\n        <span class=\"n\">file_name</span> <span class=\"o\">=</span> <span class=\"n\">file_path</span><span class=\"o\">.</span><span class=\"n\">stem</span>\n\n        <span class=\"n\">db_path</span> <span class=\"o\">=</span> <span class=\"n\">data_dir</span> <span class=\"o\">/</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{file_name}</span><span class=\"s2\">.db&quot;</span>\n        <span class=\"n\">table_path</span> <span class=\"o\">=</span> <span class=\"n\">data_dir</span> <span class=\"o\">/</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{file_name}</span><span class=\"s2\">.tables.jsonl&quot;</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dbengine</span> <span class=\"o\">=</span> <span class=\"n\">DBEngine</span><span class=\"p\">(</span><span class=\"n\">db_path</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">Helper</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span>\n            <span class=\"s2\">&quot;file_path&quot;</span><span class=\"p\">:</span> <span class=\"n\">file_path</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;db_path&quot;</span><span class=\"p\">:</span> <span class=\"n\">db_path</span><span class=\"p\">,</span>\n        <span class=\"p\">})</span>\n\n        <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n\n        <span class=\"n\">sql_datas</span><span class=\"p\">,</span> <span class=\"n\">table_data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">load_data</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">table_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">sql_data</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">sql_datas</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">data_type</span><span class=\"p\">):</span>\n            <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">sql_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">table_id</span> <span class=\"o\">=</span> <span class=\"n\">sql_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">column_headers</span> <span class=\"o\">=</span> <span class=\"n\">table_data</span><span class=\"p\">[</span><span class=\"n\">table_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;header&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">feature_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;column&quot;</span><span class=\"p\">:</span> <span class=\"n\">column_headers</span><span class=\"p\">,</span> <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">:</span> <span class=\"n\">question</span><span class=\"p\">}</span>\n\n            <span class=\"n\">data_uid</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid1</span><span class=\"p\">())</span>\n            <span class=\"n\">conditions_value_position</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_coditions_value_position</span><span class=\"p\">(</span>\n                <span class=\"n\">sql_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">sql_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;conds&quot;</span><span class=\"p\">]]</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"n\">sql_query</span> <span class=\"o\">=</span> <span class=\"n\">Query</span><span class=\"o\">.</span><span class=\"n\">from_dict</span><span class=\"p\">(</span><span class=\"n\">sql_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql&quot;</span><span class=\"p\">],</span> <span class=\"n\">ordered</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n            <span class=\"n\">execution_result</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dbengine</span><span class=\"o\">.</span><span class=\"n\">execute_query</span><span class=\"p\">(</span><span class=\"n\">table_id</span><span class=\"p\">,</span> <span class=\"n\">sql_query</span><span class=\"p\">,</span> <span class=\"n\">lower</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n            <span class=\"n\">label_row</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"n\">data_uid</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">:</span> <span class=\"n\">table_id</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;tokenized_question&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">),</span>\n                <span class=\"s2\">&quot;aggregator_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">sql_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;agg&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;select_column_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">sql_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;sel&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;conditions_num&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">sql_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;conds&quot;</span><span class=\"p\">]),</span>\n                <span class=\"s2\">&quot;conditions_column_idx&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">sql_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;conds&quot;</span><span class=\"p\">]],</span>\n                <span class=\"s2\">&quot;conditions_operator_idx&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">sql_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;conds&quot;</span><span class=\"p\">]],</span>\n                <span class=\"s2\">&quot;conditions_value_string&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">])</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">sql_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;conds&quot;</span><span class=\"p\">]],</span>\n                <span class=\"s2\">&quot;conditions_value_position&quot;</span><span class=\"p\">:</span> <span class=\"n\">conditions_value_position</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sql_query&quot;</span><span class=\"p\">:</span> <span class=\"n\">sql_query</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;execution_result&quot;</span><span class=\"p\">:</span> <span class=\"n\">execution_result</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n\n            <span class=\"n\">features</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">feature_row</span><span class=\"p\">)</span>\n            <span class=\"n\">labels</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">label_row</span><span class=\"p\">)</span>\n\n            <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">set_example</span><span class=\"p\">(</span><span class=\"n\">data_uid</span><span class=\"p\">,</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">:</span> <span class=\"n\">question</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;sql_query&quot;</span><span class=\"p\">:</span> <span class=\"n\">sql_query</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;execution_result&quot;</span><span class=\"p\">:</span> <span class=\"n\">execution_result</span><span class=\"p\">,</span>\n            <span class=\"p\">})</span>\n\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_test</span> <span class=\"ow\">and</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">labels</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">10</span><span class=\"p\">:</span>\n                <span class=\"k\">break</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">make_batch</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">),</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"WikiSQLReader.read_one_example\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.wikisql.WikiSQLReader.read_one_example\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">read_one_example</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; inputs keys: question, column, db_path, table_id &quot;&quot;&quot;</span>\n        <span class=\"n\">question_text</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;tokenized_question&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">question_text</span><span class=\"p\">)}</span>\n        <span class=\"k\">return</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">helper</span></div>\n\n<div class=\"viewcode-block\" id=\"WikiSQLReader.load_data\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.wikisql.WikiSQLReader.load_data\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">load_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">sql_path</span><span class=\"p\">,</span> <span class=\"n\">table_path</span><span class=\"p\">,</span> <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">sql_data</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">table_data</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Loading data from </span><span class=\"si\">{sql_path}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">sql_path</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">inf</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">inf</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"s2\">&quot;sql_</span><span class=\"si\">{data_type}</span><span class=\"s2\">&quot;</span><span class=\"p\">):</span>\n                <span class=\"n\">sql</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">())</span>\n                <span class=\"n\">sql_data</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">sql</span><span class=\"p\">)</span>\n\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Loading data from </span><span class=\"si\">{table_path}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">table_path</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">inf</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">inf</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"s2\">&quot;table_</span><span class=\"si\">{data_type}</span><span class=\"s2\">&quot;</span><span class=\"p\">):</span>\n                <span class=\"n\">tab</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">())</span>\n                <span class=\"n\">table_data</span><span class=\"p\">[</span><span class=\"n\">tab</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]]</span> <span class=\"o\">=</span> <span class=\"n\">tab</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">sql</span> <span class=\"ow\">in</span> <span class=\"n\">sql_data</span><span class=\"p\">:</span>\n            <span class=\"k\">assert</span> <span class=\"n\">sql</span><span class=\"p\">[</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">]</span> <span class=\"ow\">in</span> <span class=\"n\">table_data</span>\n        <span class=\"k\">return</span> <span class=\"n\">sql_data</span><span class=\"p\">,</span> <span class=\"n\">table_data</span></div>\n\n<div class=\"viewcode-block\" id=\"WikiSQLReader.get_coditions_value_position\"><a class=\"viewcode-back\" href=\"../../../../claf.data.reader.html#claf.data.reader.wikisql.WikiSQLReader.get_coditions_value_position\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_coditions_value_position</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">,</span> <span class=\"n\">values</span><span class=\"p\">):</span>\n        <span class=\"n\">tokenized_question</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">())</span>\n        <span class=\"n\">tokenized_values</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">())</span> <span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">values</span><span class=\"p\">]</span>\n\n        <span class=\"n\">START_TOKEN</span><span class=\"p\">,</span> <span class=\"n\">END_TOKEN</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&lt;BEG&gt;&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&lt;END&gt;&quot;</span>\n\n        <span class=\"n\">token_to_index</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">START_TOKEN</span><span class=\"p\">:</span> <span class=\"mi\">0</span><span class=\"p\">}</span>\n        <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokenized_question</span><span class=\"p\">:</span>\n            <span class=\"n\">token_to_index</span><span class=\"p\">[</span><span class=\"n\">token</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">token_to_index</span><span class=\"p\">)</span>\n        <span class=\"n\">token_to_index</span><span class=\"p\">[</span><span class=\"n\">END_TOKEN</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">token_to_index</span><span class=\"p\">)</span>\n\n        <span class=\"n\">position_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">tokenized_values</span><span class=\"p\">:</span>\n            <span class=\"n\">position_token</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">token_to_index</span><span class=\"p\">[</span><span class=\"n\">START_TOKEN</span><span class=\"p\">]]</span>\n            <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">value</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">token_to_index</span><span class=\"p\">:</span>\n                    <span class=\"n\">position_token</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">token_to_index</span><span class=\"p\">[</span><span class=\"n\">token</span><span class=\"p\">])</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tokenized_question</span><span class=\"p\">)):</span>\n                        <span class=\"n\">q_token</span> <span class=\"o\">=</span> <span class=\"n\">tokenized_question</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span>\n                        <span class=\"k\">if</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">q_token</span><span class=\"p\">:</span>\n                            <span class=\"n\">position_token</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">token_to_index</span><span class=\"p\">[</span><span class=\"n\">q_token</span><span class=\"p\">])</span>\n            <span class=\"n\">position_token</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">token_to_index</span><span class=\"p\">[</span><span class=\"n\">END_TOKEN</span><span class=\"p\">])</span>\n\n            <span class=\"k\">assert</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">position_token</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"mi\">2</span>\n            <span class=\"n\">position_tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">position_token</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">position_tokens</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/data/utils.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.utils &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.data.utils</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.data.utils</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"k\">import</span> <span class=\"n\">defaultdict</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.dto.batch</span> <span class=\"k\">import</span> <span class=\"n\">Batch</span>\n\n\n<div class=\"viewcode-block\" id=\"make_batch\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.make_batch\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">make_batch</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">Batch</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span><span class=\"s2\">&quot;features&quot;</span><span class=\"p\">:</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">:</span> <span class=\"n\">labels</span><span class=\"p\">})</span></div>\n\n\n<div class=\"viewcode-block\" id=\"make_bert_input\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.make_bert_input\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">make_bert_input</span><span class=\"p\">(</span>\n    <span class=\"n\">sequence_a</span><span class=\"p\">,</span>\n    <span class=\"n\">sequence_b</span><span class=\"p\">,</span>\n    <span class=\"n\">bert_tokenizer</span><span class=\"p\">,</span>\n    <span class=\"n\">max_seq_length</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">,</span>\n    <span class=\"n\">data_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;train&quot;</span><span class=\"p\">,</span>\n    <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[CLS]&quot;</span><span class=\"p\">,</span>\n    <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">,</span>\n    <span class=\"n\">input_type</span><span class=\"o\">=</span><span class=\"s2\">&quot;bert&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">):</span>\n    <span class=\"n\">sequence_a_tokens</span> <span class=\"o\">=</span> <span class=\"n\">bert_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">sequence_a</span><span class=\"p\">)</span>\n    <span class=\"n\">bert_input</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">cls_token</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">sequence_a_tokens</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"n\">sep_token</span><span class=\"p\">]</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">sequence_b</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">input_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;roberta&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">bert_input</span> <span class=\"o\">+=</span> <span class=\"p\">[</span><span class=\"n\">sep_token</span><span class=\"p\">]</span>\n\n        <span class=\"n\">sequence_b_tokens</span> <span class=\"o\">=</span> <span class=\"n\">bert_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">sequence_b</span><span class=\"p\">)</span>\n        <span class=\"n\">bert_input</span> <span class=\"o\">+=</span> <span class=\"n\">sequence_b_tokens</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"n\">sep_token</span><span class=\"p\">]</span>\n\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_input</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"n\">max_seq_length</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">data_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;train&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>  <span class=\"c1\"># for skip</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">bert_input</span><span class=\"p\">[:</span><span class=\"n\">max_seq_length</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"n\">sep_token</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"n\">bert_input</span></div>\n\n\n<div class=\"viewcode-block\" id=\"make_bert_token_types\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.make_bert_token_types\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">make_bert_token_types</span><span class=\"p\">(</span><span class=\"n\">bert_inputs</span><span class=\"p\">,</span> <span class=\"n\">SEP_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Bert Inputs segment_ids</span>\n\n<span class=\"sd\">    ex) [CLS] hi [SEP] he ##llo [SEP] =&gt; 0 0 0 1 1 1</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        bert_inputs: feature dictionary consisting of</span>\n<span class=\"sd\">            - text: text from data_reader</span>\n<span class=\"sd\">            - token_name: text converted to corresponding token_type</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        SEP_token: SEP special token for BERT</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">feature_keys</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">bert_inputs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>  <span class=\"c1\"># TODO: hard-code</span>\n    <span class=\"k\">if</span> <span class=\"s2\">&quot;text&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">feature_keys</span><span class=\"p\">:</span>\n        <span class=\"n\">feature_keys</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">feature_key</span> <span class=\"o\">=</span> <span class=\"n\">feature_keys</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n    <span class=\"n\">token_types</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">bert_input</span> <span class=\"ow\">in</span> <span class=\"n\">bert_inputs</span><span class=\"p\">:</span>\n        <span class=\"n\">token_type</span> <span class=\"o\">=</span> <span class=\"n\">make_bert_token_type</span><span class=\"p\">(</span><span class=\"n\">bert_input</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">],</span> <span class=\"n\">SEP_token</span><span class=\"o\">=</span><span class=\"n\">SEP_token</span><span class=\"p\">)</span>\n        <span class=\"n\">token_types</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span><span class=\"n\">feature_key</span><span class=\"p\">:</span> <span class=\"n\">token_type</span><span class=\"p\">})</span>\n    <span class=\"k\">return</span> <span class=\"n\">token_types</span></div>\n\n\n<div class=\"viewcode-block\" id=\"make_bert_token_type\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.make_bert_token_type\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">make_bert_token_type</span><span class=\"p\">(</span><span class=\"n\">bert_input_text</span><span class=\"p\">,</span> <span class=\"n\">SEP_token</span><span class=\"o\">=</span><span class=\"s2\">&quot;[SEP]&quot;</span><span class=\"p\">):</span>\n    <span class=\"n\">SEP_index</span> <span class=\"o\">=</span> <span class=\"n\">bert_input_text</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">SEP_token</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n\n    <span class=\"n\">token_type</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">*</span> <span class=\"n\">SEP_index</span>\n    <span class=\"n\">token_type</span> <span class=\"o\">+=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_input_text</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">SEP_index</span><span class=\"p\">)</span>\n\n    <span class=\"k\">assert</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">token_type</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_input_text</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">token_type</span></div>\n\n\n<div class=\"viewcode-block\" id=\"padding_tokens\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.padding_tokens\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">padding_tokens</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">,</span> <span class=\"n\">max_len</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot; Padding tokens according to token&#39;s dimension &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_pad_tokens</span><span class=\"p\">(</span><span class=\"n\">seqs</span><span class=\"p\">,</span> <span class=\"n\">maxlen</span><span class=\"p\">,</span> <span class=\"n\">pad_id</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">):</span>\n        <span class=\"n\">lens</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">seq</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">seq</span> <span class=\"ow\">in</span> <span class=\"n\">seqs</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">pad_id</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"n\">padded_seqs</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">seqs</span><span class=\"p\">),</span> <span class=\"n\">maxlen</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">padded_seqs</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">ones</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">seqs</span><span class=\"p\">),</span> <span class=\"n\">maxlen</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span> <span class=\"o\">*</span> <span class=\"n\">pad_id</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">seq</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">seqs</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">seq</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n                <span class=\"k\">pass</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">seq</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">s</span> <span class=\"ow\">in</span> <span class=\"n\">seq</span><span class=\"p\">]</span>\n                <span class=\"n\">end</span> <span class=\"o\">=</span> <span class=\"n\">lens</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span>\n                <span class=\"n\">padded_seqs</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"p\">:</span><span class=\"n\">end</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">LongTensor</span><span class=\"p\">(</span><span class=\"n\">seq</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">padded_seqs</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_pad_char_tokens</span><span class=\"p\">(</span><span class=\"n\">seqs</span><span class=\"p\">,</span> <span class=\"n\">seq_maxlen</span><span class=\"p\">,</span> <span class=\"n\">char_minlen</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">char_maxlen</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">char_maxlen</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">char_maxlen</span> <span class=\"o\">=</span> <span class=\"nb\">max</span><span class=\"p\">([</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">chars</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">seq</span> <span class=\"ow\">in</span> <span class=\"n\">seqs</span> <span class=\"k\">for</span> <span class=\"n\">chars</span> <span class=\"ow\">in</span> <span class=\"n\">seq</span><span class=\"p\">])</span>\n            <span class=\"k\">if</span> <span class=\"n\">char_maxlen</span> <span class=\"o\">&lt;</span> <span class=\"n\">char_minlen</span><span class=\"p\">:</span>\n                <span class=\"n\">char_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">char_minlen</span>\n\n        <span class=\"n\">padded_chars</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">seqs</span><span class=\"p\">),</span> <span class=\"n\">seq_maxlen</span><span class=\"p\">,</span> <span class=\"n\">char_maxlen</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">seqs</span><span class=\"p\">)):</span>\n            <span class=\"n\">char_tokens</span> <span class=\"o\">=</span> <span class=\"n\">_pad_with_value</span><span class=\"p\">(</span><span class=\"n\">seqs</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">],</span> <span class=\"n\">seq_maxlen</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"p\">[[</span><span class=\"n\">pad_value</span><span class=\"p\">]])</span>\n            <span class=\"n\">padded_chars</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">_pad_tokens</span><span class=\"p\">(</span><span class=\"n\">char_tokens</span><span class=\"p\">,</span> <span class=\"n\">char_maxlen</span><span class=\"p\">,</span> <span class=\"n\">pad_id</span><span class=\"o\">=</span><span class=\"n\">pad_value</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">padded_chars</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_pad_with_value</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">size</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">pad_value</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;pad_value data type is list.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">data</span> <span class=\"o\">+</span> <span class=\"n\">pad_value</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">size</span> <span class=\"o\">-</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">))</span>\n\n    <span class=\"n\">token_dim</span> <span class=\"o\">=</span> <span class=\"n\">get_token_dim</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">token_dim</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span> <span class=\"ow\">and</span> <span class=\"n\">max_len</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">max_len</span> <span class=\"o\">=</span> <span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokens</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">token_dim</span> <span class=\"o\">==</span> <span class=\"mi\">2</span><span class=\"p\">:</span>  <span class=\"c1\"># word</span>\n        <span class=\"k\">return</span> <span class=\"n\">_pad_tokens</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">,</span> <span class=\"n\">max_len</span><span class=\"p\">,</span> <span class=\"n\">pad_id</span><span class=\"o\">=</span><span class=\"n\">pad_value</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">token_dim</span> <span class=\"o\">==</span> <span class=\"mi\">3</span><span class=\"p\">:</span>  <span class=\"c1\"># char</span>\n        <span class=\"k\">if</span> <span class=\"n\">token_name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;elmo&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_pad_char_tokens</span><span class=\"p\">(</span>\n                <span class=\"n\">tokens</span><span class=\"p\">,</span> <span class=\"n\">max_len</span><span class=\"p\">,</span> <span class=\"n\">char_maxlen</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"mi\">261</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>  <span class=\"c1\"># 260: padding_character, +1 for mask</span>\n        <span class=\"k\">elif</span> <span class=\"n\">token_name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;char&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_pad_char_tokens</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">,</span> <span class=\"n\">max_len</span><span class=\"p\">,</span> <span class=\"n\">char_minlen</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"n\">pad_value</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_pad_char_tokens</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">,</span> <span class=\"n\">max_len</span><span class=\"p\">,</span> <span class=\"n\">char_minlen</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">pad_value</span><span class=\"o\">=</span><span class=\"n\">pad_value</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">tokens</span></div>\n\n\n<div class=\"viewcode-block\" id=\"get_sequence_a\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.get_sequence_a\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_sequence_a</span><span class=\"p\">(</span><span class=\"n\">example</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"s2\">&quot;sequence&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">example</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span>\n    <span class=\"k\">elif</span> <span class=\"s2\">&quot;sequence_a&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">example</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">example</span><span class=\"p\">[</span><span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">]</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;sequence&#39; or &#39;sequence_a&#39; key is required.&quot;</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"get_token_dim\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.get_token_dim\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_token_dim</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">:</span>\n        <span class=\"n\">dim</span> <span class=\"o\">=</span> <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"n\">dim</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n        <span class=\"k\">return</span> <span class=\"n\">dim</span>\n\n    <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">ndarray</span><span class=\"p\">:</span>\n        <span class=\"n\">dim</span> <span class=\"o\">=</span> <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">ndim</span>\n        <span class=\"k\">if</span> <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">shape</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"n\">dim</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n        <span class=\"k\">return</span> <span class=\"n\">dim</span>\n\n    <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">list</span> <span class=\"ow\">or</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">tuple</span><span class=\"p\">:</span>\n        <span class=\"n\">dim</span> <span class=\"o\">=</span> <span class=\"n\">get_token_dim</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">dim</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">dim</span></div>\n\n\n<div class=\"viewcode-block\" id=\"get_token_type\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.get_token_type\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_token_type</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">):</span>\n    <span class=\"n\">token</span> <span class=\"o\">=</span> <span class=\"n\">tokens</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"k\">while</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">ndarray</span><span class=\"p\">)</span> <span class=\"ow\">and</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"nb\">list</span><span class=\"p\">):</span>\n        <span class=\"n\">token</span> <span class=\"o\">=</span> <span class=\"n\">token</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"is_lazy\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.is_lazy\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">is_lazy</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n        <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"n\">tokens</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">callable</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"kc\">False</span></div>\n\n\n<div class=\"viewcode-block\" id=\"transpose\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.transpose\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">transpose</span><span class=\"p\">(</span><span class=\"n\">list_of_dict</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[]):</span>\n    <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">skip_keys</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;skip_keys type must be list. not {type(skip_keys)}&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">dict_of_list</span> <span class=\"o\">=</span> <span class=\"n\">defaultdict</span><span class=\"p\">(</span><span class=\"k\">lambda</span><span class=\"p\">:</span> <span class=\"p\">[])</span>\n    <span class=\"k\">for</span> <span class=\"n\">dic</span> <span class=\"ow\">in</span> <span class=\"n\">list_of_dict</span><span class=\"p\">:</span>\n        <span class=\"k\">for</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">dic</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">skip_keys</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">dict_of_list</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">dict_of_list</span></div>\n\n\n<div class=\"viewcode-block\" id=\"sanity_check_iob\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.sanity_check_iob\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">sanity_check_iob</span><span class=\"p\">(</span><span class=\"n\">naive_tokens</span><span class=\"p\">,</span> <span class=\"n\">tag_texts</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Check if the IOB tags are valid.</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        naive_tokens: tokens split by .split()</span>\n<span class=\"sd\">        tag_texts: list of tags in IOB format</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">prefix</span><span class=\"p\">(</span><span class=\"n\">tag</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">tag</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;O&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">tag</span>\n        <span class=\"k\">return</span> <span class=\"n\">tag</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;-&quot;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">body</span><span class=\"p\">(</span><span class=\"n\">tag</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">tag</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;O&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n        <span class=\"k\">return</span> <span class=\"n\">tag</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;-&quot;</span><span class=\"p\">)[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n\n    <span class=\"c1\"># same number check</span>\n    <span class=\"k\">assert</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">naive_tokens</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tag_texts</span><span class=\"p\">),</span> \\\n        <span class=\"n\">f</span><span class=\"s2\">&quot;&quot;&quot;Number of tokens and tags doest not match.</span>\n<span class=\"s2\">        original tokens: </span><span class=\"si\">{naive_tokens}</span><span class=\"s2\"></span>\n<span class=\"s2\">        tags: </span><span class=\"si\">{tag_texts}</span><span class=\"s2\">&quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># IOB format check</span>\n    <span class=\"n\">prev_tag</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">for</span> <span class=\"n\">tag_text</span> <span class=\"ow\">in</span> <span class=\"n\">tag_texts</span><span class=\"p\">:</span>\n        <span class=\"n\">curr_tag</span> <span class=\"o\">=</span> <span class=\"n\">tag_text</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">prev_tag</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>  <span class=\"c1\"># first tag</span>\n            <span class=\"k\">assert</span> <span class=\"n\">prefix</span><span class=\"p\">(</span><span class=\"n\">curr_tag</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s2\">&quot;B&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;O&quot;</span><span class=\"p\">],</span> \\\n                <span class=\"n\">f</span><span class=\"s2\">&quot;&quot;&quot;Wrong tag: first tag starts with I.</span>\n<span class=\"s2\">                tag: </span><span class=\"si\">{curr_tag}</span><span class=\"s2\">&quot;&quot;&quot;&quot;&quot;</span>\n\n        <span class=\"k\">else</span><span class=\"p\">:</span>  <span class=\"c1\"># following tags</span>\n            <span class=\"k\">if</span> <span class=\"n\">prefix</span><span class=\"p\">(</span><span class=\"n\">prev_tag</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s2\">&quot;B&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;I&quot;</span><span class=\"p\">]:</span>\n                <span class=\"k\">assert</span> <span class=\"p\">(</span>\n                        <span class=\"p\">(</span><span class=\"n\">prefix</span><span class=\"p\">(</span><span class=\"n\">curr_tag</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;I&quot;</span> <span class=\"ow\">and</span> <span class=\"n\">body</span><span class=\"p\">(</span><span class=\"n\">curr_tag</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">body</span><span class=\"p\">(</span><span class=\"n\">prev_tag</span><span class=\"p\">))</span>\n                        <span class=\"ow\">or</span> <span class=\"p\">(</span><span class=\"n\">prefix</span><span class=\"p\">(</span><span class=\"n\">curr_tag</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;B&quot;</span><span class=\"p\">)</span>\n                        <span class=\"ow\">or</span> <span class=\"p\">(</span><span class=\"n\">prefix</span><span class=\"p\">(</span><span class=\"n\">curr_tag</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;O&quot;</span><span class=\"p\">)</span>\n                <span class=\"p\">),</span> <span class=\"n\">f</span><span class=\"s2\">&quot;&quot;&quot;Wrong tag: following tag mismatch.</span>\n<span class=\"s2\">                    previous tag: </span><span class=\"si\">{prev_tag}</span><span class=\"s2\"></span>\n<span class=\"s2\">                    current tag: </span><span class=\"si\">{curr_tag}</span><span class=\"s2\">&quot;&quot;&quot;</span>\n\n            <span class=\"k\">elif</span> <span class=\"n\">prefix</span><span class=\"p\">(</span><span class=\"n\">prev_tag</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s2\">&quot;O&quot;</span><span class=\"p\">]:</span>\n                <span class=\"k\">assert</span> <span class=\"n\">prefix</span><span class=\"p\">(</span><span class=\"n\">curr_tag</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s2\">&quot;B&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;O&quot;</span><span class=\"p\">],</span> \\\n                    <span class=\"n\">f</span><span class=\"s2\">&quot;&quot;&quot;Wrong tag: following tag mismatch.</span>\n<span class=\"s2\">                    previous tag: </span><span class=\"si\">{prev_tag}</span><span class=\"s2\"></span>\n<span class=\"s2\">                    current tag: </span><span class=\"si\">{curr_tag}</span><span class=\"s2\">&quot;&quot;&quot;</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">RuntimeError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Encountered unknown tag: </span><span class=\"si\">{prev_tag}</span><span class=\"s2\">.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">prev_tag</span> <span class=\"o\">=</span> <span class=\"n\">curr_tag</span></div>\n\n<div class=\"viewcode-block\" id=\"get_is_head_of_word\"><a class=\"viewcode-back\" href=\"../../../claf.data.html#claf.data.utils.get_is_head_of_word\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_is_head_of_word</span><span class=\"p\">(</span><span class=\"n\">naive_tokens</span><span class=\"p\">,</span> <span class=\"n\">sequence_tokens</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Return a list of flags whether the token is head(prefix) of naively split tokens</span>\n\n<span class=\"sd\">    ex) naive_tokens: [&quot;hello.&quot;, &quot;how&quot;, &quot;are&quot;, &quot;you?&quot;]</span>\n<span class=\"sd\">        sequence_tokens: [&quot;hello&quot;, &quot;.&quot;, &quot;how&quot;, &quot;are&quot;, &quot;you&quot;, &quot;?&quot;]</span>\n\n<span class=\"sd\">        =&gt; [1, 0, 1, 1, 1, 0]</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        naive_tokens: a list of tokens, naively split by whitespace</span>\n<span class=\"sd\">        sequence_tokens: a list of tokens, split by &#39;word_tokenizer&#39;</span>\n\n<span class=\"sd\">    * Returns:</span>\n<span class=\"sd\">        is_head_of_word: a list with its length the same as that of &#39;sequence_tokens&#39;.</span>\n<span class=\"sd\">            has 1 if the tokenized word at the position is head(prefix) of a `naive_token`</span>\n<span class=\"sd\">            and 0 if otherwise.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">is_head_of_word</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">naive_token</span> <span class=\"ow\">in</span> <span class=\"n\">naive_tokens</span><span class=\"p\">:</span>\n        <span class=\"n\">consumed_chars</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">consumed_words</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"k\">for</span> <span class=\"n\">sequence_token</span> <span class=\"ow\">in</span> <span class=\"n\">sequence_tokens</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">naive_token</span><span class=\"p\">[</span><span class=\"n\">consumed_chars</span><span class=\"p\">:]</span><span class=\"o\">.</span><span class=\"n\">startswith</span><span class=\"p\">(</span><span class=\"n\">sequence_token</span><span class=\"p\">):</span>\n                <span class=\"n\">is_head_of_word</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"mi\">0</span> <span class=\"k\">if</span> <span class=\"n\">consumed_chars</span> <span class=\"k\">else</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n                <span class=\"n\">consumed_chars</span> <span class=\"o\">+=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">sequence_token</span><span class=\"p\">)</span>\n                <span class=\"n\">consumed_words</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">break</span>\n        <span class=\"n\">sequence_tokens</span> <span class=\"o\">=</span> <span class=\"n\">sequence_tokens</span><span class=\"p\">[</span><span class=\"n\">consumed_words</span><span class=\"p\">:]</span>\n    <span class=\"k\">return</span> <span class=\"n\">is_head_of_word</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/decorator/arguments.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.decorator.arguments &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.decorator.arguments</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.decorator.arguments</h1><div class=\"highlight\"><pre>\n<div class=\"viewcode-block\" id=\"arguments_required\"><a class=\"viewcode-back\" href=\"../../../claf.decorator.html#claf.decorator.arguments.arguments_required\">[docs]</a><span></span><span class=\"k\">class</span> <span class=\"nc\">arguments_required</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Decorator Class</span>\n<span class=\"sd\">        check required arguments for predict function</span>\n<span class=\"sd\">        (eg. @arguments_required([&quot;db_path&quot;, &quot;table_id&quot;]))</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">required_fields</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">required_fields</span> <span class=\"o\">=</span> <span class=\"n\">required_fields</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__call__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">fn</span><span class=\"p\">):</span>\n        <span class=\"k\">def</span> <span class=\"nf\">wrapper</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n            <span class=\"n\">arguments</span> <span class=\"o\">=</span> <span class=\"n\">args</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n            <span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">required_fields</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">arguments</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">item</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                    <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;--</span><span class=\"si\">{item}</span><span class=\"s2\"> is required argument.&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">fn</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">wrapper</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/decorator/register.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.decorator.register &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.decorator.register</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.decorator.register</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.registry</span> <span class=\"k\">import</span> <span class=\"n\">Registry</span>\n\n\n<div class=\"viewcode-block\" id=\"register\"><a class=\"viewcode-back\" href=\"../../../claf.decorator.html#claf.decorator.register.register\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">register</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Decorator Class</span>\n<span class=\"sd\">        register subclass with decorator.</span>\n<span class=\"sd\">        (eg. @register(&quot;model:bidaf&quot;), @register(&quot;reader:squad&quot;) )</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__call__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"n\">registry</span> <span class=\"o\">=</span> <span class=\"n\">Registry</span><span class=\"p\">()</span>\n        <span class=\"n\">registry</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/learn/experiment.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.learn.experiment &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.learn.experiment</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.learn.experiment</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">atexit</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pathlib</span> <span class=\"k\">import</span> <span class=\"n\">Path</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf</span> <span class=\"k\">import</span> <span class=\"n\">nsml</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.factory</span> <span class=\"k\">import</span> <span class=\"p\">(</span>\n    <span class=\"n\">DataReaderFactory</span><span class=\"p\">,</span>\n    <span class=\"n\">DataLoaderFactory</span><span class=\"p\">,</span>\n    <span class=\"n\">TokenMakersFactory</span><span class=\"p\">,</span>\n    <span class=\"n\">ModelFactory</span><span class=\"p\">,</span>\n    <span class=\"n\">OptimizerFactory</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf</span> <span class=\"k\">import</span> <span class=\"n\">utils</span> <span class=\"k\">as</span> <span class=\"n\">common_utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.args</span> <span class=\"k\">import</span> <span class=\"n\">NestedNamespace</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.utils</span> <span class=\"k\">import</span> <span class=\"n\">convert_config2dict</span><span class=\"p\">,</span> <span class=\"n\">pretty_json_dumps</span><span class=\"p\">,</span> <span class=\"n\">set_global_seed</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.text_handler</span> <span class=\"k\">import</span> <span class=\"n\">TextHandler</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn.mode</span> <span class=\"k\">import</span> <span class=\"n\">Mode</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn.trainer</span> <span class=\"k\">import</span> <span class=\"n\">Trainer</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"Experiment\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.experiment.Experiment\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Experiment</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Experiment settings with config.</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        mode: Mode (ex. TRAIN, EVAL, INFER_EVAL, PREDICT)</span>\n<span class=\"sd\">        config: (NestedNamespace) Argument config according to mode</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"n\">common_utils</span><span class=\"o\">.</span><span class=\"n\">set_logging_config</span><span class=\"p\">(</span><span class=\"n\">mode</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"n\">config</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># self.config (experiment overall config) / config (argument according to mode)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">config</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mode</span> <span class=\"o\">=</span> <span class=\"n\">mode</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">common_setting</span><span class=\"p\">(</span><span class=\"n\">mode</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">mode</span> <span class=\"o\">!=</span> <span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">TRAIN</span><span class=\"p\">:</span>  <span class=\"c1\"># evaluate and predict</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">load_setting</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Set evaluation config</span>\n            <span class=\"k\">if</span> <span class=\"n\">mode</span><span class=\"o\">.</span><span class=\"n\">endswith</span><span class=\"p\">(</span><span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">EVAL</span><span class=\"p\">):</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">train_file_path</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">valid_file_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span><span class=\"o\">.</span><span class=\"n\">data_file_path</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">iterator</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span>\n\n                <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span><span class=\"p\">,</span> <span class=\"s2\">&quot;inference_latency&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">max_latency</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span><span class=\"o\">.</span><span class=\"n\">inference_latency</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">predict_settings</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n<div class=\"viewcode-block\" id=\"Experiment.common_setting\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.experiment.Experiment.common_setting\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">common_setting</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Common Setting - experiment config, use_gpu and cuda_device_ids &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config_dict</span> <span class=\"o\">=</span> <span class=\"n\">convert_config2dict</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">)</span>\n\n        <span class=\"n\">cuda_devices</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_cuda_devices</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span> <span class=\"o\">=</span> <span class=\"n\">cuda_devices</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">slack_url</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;slack_url&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_cuda_devices</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;use_gpu&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">use_gpu</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">use_gpu</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">gpu_num</span><span class=\"p\">))</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n<div class=\"viewcode-block\" id=\"Experiment.load_setting\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.experiment.Experiment.load_setting\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">load_setting</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Load Setting - need to load checkpoint case (ex. evaluate and predict) &quot;&quot;&quot;</span>\n        <span class=\"n\">cuda_devices</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span>\n        <span class=\"n\">checkpoint_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span><span class=\"o\">.</span><span class=\"n\">checkpoint_path</span>\n        <span class=\"n\">prev_cuda_device_id</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span><span class=\"p\">,</span> <span class=\"s2\">&quot;prev_cuda_device_id&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_checkpoint</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_read_checkpoint</span><span class=\"p\">(</span>\n            <span class=\"n\">cuda_devices</span><span class=\"p\">,</span> <span class=\"n\">checkpoint_path</span><span class=\"p\">,</span> <span class=\"n\">prev_cuda_device_id</span><span class=\"o\">=</span><span class=\"n\">prev_cuda_device_id</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_set_saved_config</span><span class=\"p\">(</span><span class=\"n\">cuda_devices</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_read_checkpoint</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_devices</span><span class=\"p\">,</span> <span class=\"n\">checkpoint_path</span><span class=\"p\">,</span> <span class=\"n\">prev_cuda_device_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">cuda_devices</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;cpu&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">checkpoint_path</span><span class=\"p\">,</span> <span class=\"n\">map_location</span><span class=\"o\">=</span><span class=\"s2\">&quot;cpu&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># use CPU</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">():</span>\n            <span class=\"n\">checkpoint</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span>\n                <span class=\"n\">checkpoint_path</span><span class=\"p\">,</span>\n                <span class=\"n\">map_location</span><span class=\"o\">=</span><span class=\"p\">{</span>\n                    <span class=\"n\">f</span><span class=\"s2\">&quot;cuda:</span><span class=\"si\">{prev_cuda_device_id}</span><span class=\"s2\">&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;cuda:</span><span class=\"si\">{cuda_devices[0]}</span><span class=\"s2\">&quot;</span>\n                <span class=\"p\">},</span>  <span class=\"c1\"># different cuda_device id case (save/load)</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">checkpoint</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">checkpoint_path</span><span class=\"p\">,</span> <span class=\"n\">map_location</span><span class=\"o\">=</span><span class=\"s2\">&quot;cpu&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># use CPU</span>\n        <span class=\"k\">return</span> <span class=\"n\">checkpoint</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_set_saved_config</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">cuda_devices</span><span class=\"p\">):</span>\n        <span class=\"n\">saved_config_dict</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;config&quot;</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config_dict</span> <span class=\"o\">=</span> <span class=\"n\">saved_config_dict</span>\n\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Load saved_config ...&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">pretty_json_dumps</span><span class=\"p\">(</span><span class=\"n\">saved_config_dict</span><span class=\"p\">))</span>\n\n        <span class=\"n\">saved_config</span> <span class=\"o\">=</span> <span class=\"n\">NestedNamespace</span><span class=\"p\">()</span>\n        <span class=\"n\">saved_config</span><span class=\"o\">.</span><span class=\"n\">load_from_json</span><span class=\"p\">(</span><span class=\"n\">saved_config_dict</span><span class=\"p\">)</span>\n\n        <span class=\"n\">is_use_gpu</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">use_gpu</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">saved_config</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">use_gpu</span> <span class=\"o\">=</span> <span class=\"n\">is_use_gpu</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span> <span class=\"o\">=</span> <span class=\"n\">cuda_devices</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__call__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Run Trainer &quot;&quot;&quot;</span>\n\n        <span class=\"n\">set_global_seed</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">seed_num</span><span class=\"p\">)</span>  <span class=\"c1\"># For Reproducible</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mode</span> <span class=\"o\">==</span> <span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">TRAIN</span><span class=\"p\">:</span>\n            <span class=\"c1\"># exit trigger slack notification</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">slack_url</span><span class=\"p\">:</span>\n                <span class=\"n\">atexit</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">send_message_to_slack</span><span class=\"p\">)</span>\n\n            <span class=\"n\">train_loader</span><span class=\"p\">,</span> <span class=\"n\">valid_loader</span><span class=\"p\">,</span> <span class=\"n\">optimizer</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">set_train_mode</span><span class=\"p\">()</span>\n\n            <span class=\"k\">assert</span> <span class=\"n\">train_loader</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n            <span class=\"k\">assert</span> <span class=\"n\">optimizer</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">valid_loader</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"o\">.</span><span class=\"n\">train</span><span class=\"p\">(</span><span class=\"n\">train_loader</span><span class=\"p\">,</span> <span class=\"n\">optimizer</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"o\">.</span><span class=\"n\">train_and_evaluate</span><span class=\"p\">(</span><span class=\"n\">train_loader</span><span class=\"p\">,</span> <span class=\"n\">valid_loader</span><span class=\"p\">,</span> <span class=\"n\">optimizer</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_summary_experiments</span><span class=\"p\">()</span>\n\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mode</span> <span class=\"o\">==</span> <span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">EVAL</span><span class=\"p\">:</span>\n            <span class=\"n\">valid_loader</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">set_eval_mode</span><span class=\"p\">()</span>\n\n            <span class=\"k\">assert</span> <span class=\"n\">valid_loader</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"o\">.</span><span class=\"n\">evaluate</span><span class=\"p\">(</span><span class=\"n\">valid_loader</span><span class=\"p\">)</span>\n\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mode</span> <span class=\"o\">==</span> <span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">INFER_EVAL</span><span class=\"p\">:</span>\n            <span class=\"n\">raw_examples</span><span class=\"p\">,</span> <span class=\"n\">raw_to_tensor_fn</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">set_eval_inference_latency_mode</span><span class=\"p\">()</span>\n\n            <span class=\"k\">assert</span> <span class=\"n\">raw_examples</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n            <span class=\"k\">assert</span> <span class=\"n\">raw_to_tensor_fn</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"o\">.</span><span class=\"n\">evaluate_inference_latency</span><span class=\"p\">(</span><span class=\"n\">raw_examples</span><span class=\"p\">,</span> <span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">,</span> <span class=\"n\">max_latency</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">max_latency</span><span class=\"p\">)</span>\n\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mode</span><span class=\"o\">.</span><span class=\"n\">endswith</span><span class=\"p\">(</span><span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">PREDICT</span><span class=\"p\">):</span>\n            <span class=\"n\">raw_features</span><span class=\"p\">,</span> <span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">,</span> <span class=\"n\">arguments</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">set_predict_mode</span><span class=\"p\">()</span>\n\n            <span class=\"k\">assert</span> <span class=\"n\">raw_features</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n            <span class=\"k\">assert</span> <span class=\"n\">raw_to_tensor_fn</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span>\n                <span class=\"n\">raw_features</span><span class=\"p\">,</span>\n                <span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">,</span>\n                <span class=\"n\">arguments</span><span class=\"p\">,</span>\n                <span class=\"n\">interactive</span><span class=\"o\">=</span><span class=\"n\">arguments</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;interactive&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">),</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;unknown mode: </span><span class=\"si\">{self.mode}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Experiment.set_train_mode\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.experiment.Experiment.set_train_mode\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">set_train_mode</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Training Mode</span>\n\n<span class=\"sd\">        - Pipeline</span>\n<span class=\"sd\">          1. read raw_data (DataReader)</span>\n<span class=\"sd\">          2. build vocabs (DataReader, Token)</span>\n<span class=\"sd\">          3. indexing tokens (DataReader, Token)</span>\n<span class=\"sd\">          4. convert to DataSet (DataReader)</span>\n<span class=\"sd\">          5. create DataLoader (DataLoader)</span>\n<span class=\"sd\">          6. define model and optimizer</span>\n<span class=\"sd\">          7. run!</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Config. </span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span> <span class=\"o\">+</span> <span class=\"n\">pretty_json_dumps</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config_dict</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_data_and_token_makers</span><span class=\"p\">()</span>\n        <span class=\"n\">datas</span><span class=\"p\">,</span> <span class=\"n\">helpers</span> <span class=\"o\">=</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Token &amp; Vocab</span>\n        <span class=\"n\">text_handler</span> <span class=\"o\">=</span> <span class=\"n\">TextHandler</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">lazy_indexing</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">text_handler</span><span class=\"o\">.</span><span class=\"n\">is_all_vocab_use_pretrained</span><span class=\"p\">():</span>\n            <span class=\"n\">token_counters</span> <span class=\"o\">=</span> <span class=\"n\">token_makers</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">texts</span> <span class=\"o\">=</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">filter_texts</span><span class=\"p\">(</span><span class=\"n\">datas</span><span class=\"p\">)</span>\n            <span class=\"n\">token_counters</span> <span class=\"o\">=</span> <span class=\"n\">text_handler</span><span class=\"o\">.</span><span class=\"n\">make_token_counters</span><span class=\"p\">(</span><span class=\"n\">texts</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">)</span>\n\n        <span class=\"n\">vocabs</span> <span class=\"o\">=</span> <span class=\"n\">text_handler</span><span class=\"o\">.</span><span class=\"n\">build_vocabs</span><span class=\"p\">(</span><span class=\"n\">token_counters</span><span class=\"p\">)</span>\n        <span class=\"n\">text_handler</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">datas</span><span class=\"p\">,</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">text_columns</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># iterator</span>\n        <span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocabs</span><span class=\"p\">[</span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"nb\">iter</span><span class=\"p\">(</span><span class=\"n\">vocabs</span><span class=\"p\">))]</span>\n        <span class=\"n\">datasets</span> <span class=\"o\">=</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">convert_to_dataset</span><span class=\"p\">(</span><span class=\"n\">datas</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helpers</span><span class=\"o\">=</span><span class=\"n\">helpers</span><span class=\"p\">)</span>  <span class=\"c1\"># with name</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">iterator</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span>\n        <span class=\"n\">train_loader</span><span class=\"p\">,</span> <span class=\"n\">valid_loader</span><span class=\"p\">,</span> <span class=\"n\">test_loader</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_by_factory</span><span class=\"p\">(</span>\n            <span class=\"n\">DataLoaderFactory</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">iterator</span><span class=\"p\">,</span> <span class=\"n\">param</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;datasets&quot;</span><span class=\"p\">:</span> <span class=\"n\">datasets</span><span class=\"p\">}</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># calculate &#39;num_train_steps&#39;</span>\n        <span class=\"n\">num_train_steps</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_num_train_steps</span><span class=\"p\">(</span><span class=\"n\">train_loader</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">optimizer</span><span class=\"o\">.</span><span class=\"n\">num_train_steps</span> <span class=\"o\">=</span> <span class=\"n\">num_train_steps</span>\n\n        <span class=\"n\">checkpoint_dir</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"o\">.</span><span class=\"n\">log_dir</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;checkpoint&quot;</span>\n        <span class=\"n\">checkpoints</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"n\">checkpoint_dir</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n            <span class=\"n\">checkpoints</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_load_exist_checkpoints</span><span class=\"p\">(</span><span class=\"n\">checkpoint_dir</span><span class=\"p\">)</span>  <span class=\"c1\"># contain model and optimizer</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">checkpoints</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_model</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">helpers</span><span class=\"o\">=</span><span class=\"n\">helpers</span><span class=\"p\">)</span>\n            <span class=\"n\">op_dict</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_by_factory</span><span class=\"p\">(</span>\n                <span class=\"n\">OptimizerFactory</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">optimizer</span><span class=\"p\">,</span> <span class=\"n\">param</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"p\">}</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_model</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">checkpoint</span><span class=\"o\">=</span><span class=\"n\">checkpoints</span><span class=\"p\">)</span>\n            <span class=\"n\">op_dict</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_by_factory</span><span class=\"p\">(</span>\n                <span class=\"n\">OptimizerFactory</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">optimizer</span><span class=\"p\">,</span> <span class=\"n\">param</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"p\">}</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">load_optimizer_checkpoint</span><span class=\"p\">(</span><span class=\"n\">op_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">],</span> <span class=\"n\">checkpoints</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">set_trainer</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">op_dict</span><span class=\"o\">=</span><span class=\"n\">op_dict</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">train_loader</span><span class=\"p\">,</span> <span class=\"n\">valid_loader</span><span class=\"p\">,</span> <span class=\"n\">op_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">]</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_create_data_and_token_makers</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">token_makers</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_by_factory</span><span class=\"p\">(</span><span class=\"n\">TokenMakersFactory</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">token</span><span class=\"p\">)</span>\n        <span class=\"n\">tokenizers</span> <span class=\"o\">=</span> <span class=\"n\">token_makers</span><span class=\"p\">[</span><span class=\"s2\">&quot;tokenizers&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">del</span> <span class=\"n\">token_makers</span><span class=\"p\">[</span><span class=\"s2\">&quot;tokenizers&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">tokenizers</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span>\n        <span class=\"n\">data_reader</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_by_factory</span><span class=\"p\">(</span><span class=\"n\">DataReaderFactory</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">data_reader</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_create_by_factory</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">factory</span><span class=\"p\">,</span> <span class=\"n\">item_config</span><span class=\"p\">,</span> <span class=\"n\">param</span><span class=\"o\">=</span><span class=\"p\">{}):</span>\n        <span class=\"k\">return</span> <span class=\"n\">factory</span><span class=\"p\">(</span><span class=\"n\">item_config</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">param</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_num_train_steps</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">train_loader</span><span class=\"p\">):</span>\n        <span class=\"n\">train_set_size</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">train_loader</span><span class=\"o\">.</span><span class=\"n\">dataset</span><span class=\"p\">)</span>\n        <span class=\"n\">batch_size</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">iterator</span><span class=\"o\">.</span><span class=\"n\">batch_size</span>\n        <span class=\"n\">gradient_accumulation_steps</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">optimizer</span><span class=\"p\">,</span> <span class=\"s2\">&quot;gradient_accumulation_steps&quot;</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">num_epochs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"o\">.</span><span class=\"n\">num_epochs</span>\n\n        <span class=\"n\">one_epoch_steps</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">train_set_size</span> <span class=\"o\">/</span> <span class=\"n\">batch_size</span> <span class=\"o\">/</span> <span class=\"n\">gradient_accumulation_steps</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">one_epoch_steps</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"n\">one_epoch_steps</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n        <span class=\"n\">num_train_steps</span> <span class=\"o\">=</span> <span class=\"n\">one_epoch_steps</span> <span class=\"o\">*</span> <span class=\"n\">num_epochs</span>\n        <span class=\"k\">return</span> <span class=\"n\">num_train_steps</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_load_exist_checkpoints</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">checkpoint_dir</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n        <span class=\"n\">checkpoints</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">get_sorted_path</span><span class=\"p\">(</span><span class=\"n\">checkpoint_dir</span><span class=\"p\">,</span> <span class=\"n\">both_exist</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"n\">train_counts</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">checkpoints</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">train_counts</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n        <span class=\"n\">seperator</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;-&quot;</span> <span class=\"o\">*</span> <span class=\"mi\">50</span>\n        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{seperator}</span><span class=\"se\">\\n</span><span class=\"s2\"> !! Find exist checkpoints </span><span class=\"si\">{train_counts}</span><span class=\"s2\">.</span><span class=\"se\">\\n</span><span class=\"s2\"> If you want to recover, input train_count in list.</span><span class=\"se\">\\n</span><span class=\"s2\"> If you don&#39;t want to recover, input 0.</span><span class=\"se\">\\n</span><span class=\"si\">{seperator}</span><span class=\"s2\">&quot;</span>\n        <span class=\"n\">selected_train_count</span> <span class=\"o\">=</span> <span class=\"n\">common_utils</span><span class=\"o\">.</span><span class=\"n\">get_user_input</span><span class=\"p\">(</span><span class=\"n\">message</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">selected_train_count</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n        <span class=\"n\">model_path</span> <span class=\"o\">=</span> <span class=\"n\">checkpoints</span><span class=\"p\">[</span><span class=\"n\">selected_train_count</span><span class=\"p\">][</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">model_checkpoint</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_read_checkpoint</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span><span class=\"p\">,</span> <span class=\"n\">model_path</span><span class=\"p\">)</span>\n\n        <span class=\"n\">optimizer_path</span> <span class=\"o\">=</span> <span class=\"n\">checkpoints</span><span class=\"p\">[</span><span class=\"n\">selected_train_count</span><span class=\"p\">][</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">optimizer_checkpoint</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_read_checkpoint</span><span class=\"p\">(</span><span class=\"s2\">&quot;cpu&quot;</span><span class=\"p\">,</span> <span class=\"n\">optimizer_path</span><span class=\"p\">)</span>\n\n        <span class=\"n\">checkpoints</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"n\">checkpoints</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">model_checkpoint</span><span class=\"p\">)</span>\n        <span class=\"n\">checkpoints</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">optimizer_checkpoint</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">checkpoints</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_create_model</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">checkpoint</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">helpers</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">checkpoint</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">assert</span> <span class=\"n\">helpers</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n            <span class=\"n\">first_key</span> <span class=\"o\">=</span> <span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"nb\">iter</span><span class=\"p\">(</span><span class=\"n\">helpers</span><span class=\"p\">))</span>\n            <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">helpers</span><span class=\"p\">[</span><span class=\"n\">first_key</span><span class=\"p\">]</span>  <span class=\"c1\"># get first helper</span>\n            <span class=\"n\">model_init_params</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n            <span class=\"n\">predict_helper</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;predict_helper&quot;</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">model_init_params</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;init_params&quot;</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n            <span class=\"n\">predict_helper</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;predict_helper&quot;</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n\n        <span class=\"n\">model_params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;token_makers&quot;</span><span class=\"p\">:</span> <span class=\"n\">token_makers</span><span class=\"p\">}</span>\n        <span class=\"n\">model_params</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">model_init_params</span><span class=\"p\">)</span>\n\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_by_factory</span><span class=\"p\">(</span>\n            <span class=\"n\">ModelFactory</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">param</span><span class=\"o\">=</span><span class=\"n\">model_params</span>\n        <span class=\"p\">)</span>\n        <span class=\"c1\"># Save params</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">init_params</span> <span class=\"o\">=</span> <span class=\"n\">model_init_params</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict_helper</span> <span class=\"o\">=</span> <span class=\"n\">predict_helper</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">checkpoint</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">load_model_checkpoint</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">checkpoint</span><span class=\"p\">)</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_set_gpu_env</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">model</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_set_gpu_env</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">use_gpu</span><span class=\"p\">:</span>\n            <span class=\"n\">cuda_devices</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_cuda_devices</span><span class=\"p\">()</span>\n            <span class=\"n\">num_gpu</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">cuda_devices</span><span class=\"p\">)</span>\n\n            <span class=\"n\">use_multi_gpu</span> <span class=\"o\">=</span> <span class=\"n\">num_gpu</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span>\n            <span class=\"k\">if</span> <span class=\"n\">use_multi_gpu</span><span class=\"p\">:</span>\n                <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">DataParallel</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">device_ids</span><span class=\"o\">=</span><span class=\"n\">cuda_devices</span><span class=\"p\">)</span>\n            <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"p\">()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">num_gpu</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n\n        <span class=\"n\">num_gpu_state</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">num_gpu</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">num_gpu</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"n\">num_gpu_state</span> <span class=\"o\">+=</span> <span class=\"s2\">&quot; (Multi-GPU)&quot;</span>\n\n        <span class=\"c1\"># TODO: distributed training and 16-bits training (FP16)</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;use_gpu: </span><span class=\"si\">{self.config.use_gpu}</span><span class=\"s2\"> num_gpu: </span><span class=\"si\">{num_gpu_state}</span><span class=\"s2\">, distributed training: False, 16-bits training: False&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">model</span>\n\n<div class=\"viewcode-block\" id=\"Experiment.set_trainer\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.experiment.Experiment.set_trainer\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">set_trainer</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">op_dict</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">save_params</span><span class=\"o\">=</span><span class=\"p\">{}):</span>\n        <span class=\"n\">trainer_config</span> <span class=\"o\">=</span> <span class=\"nb\">vars</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"p\">)</span>\n        <span class=\"n\">trainer_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;config&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config_dict</span>\n        <span class=\"n\">trainer_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">model</span>\n        <span class=\"n\">trainer_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;learning_rate_scheduler&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">op_dict</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;learning_rate_scheduler&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n        <span class=\"n\">trainer_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;exponential_moving_average&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">op_dict</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n            <span class=\"s2\">&quot;exponential_moving_average&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">trainer</span> <span class=\"o\">=</span> <span class=\"n\">Trainer</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">trainer_config</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Set NSML</span>\n        <span class=\"k\">if</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span><span class=\"p\">:</span>\n            <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">bind_nsml</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">optimizer</span><span class=\"o\">=</span><span class=\"n\">op_dict</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">))</span>\n            <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">nsml</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pause&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n                <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">paused</span><span class=\"p\">(</span><span class=\"n\">scope</span><span class=\"o\">=</span><span class=\"nb\">locals</span><span class=\"p\">())</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_summary_experiments</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">hr_text</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;-&quot;</span> <span class=\"o\">*</span> <span class=\"mi\">50</span>\n        <span class=\"n\">summary_logs</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n\\n\\n</span><span class=\"s2\">Experiment Summary. </span><span class=\"si\">{nsml.SESSION_NAME}</span><span class=\"se\">\\n</span><span class=\"si\">{hr_text}</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span>\n        <span class=\"n\">summary_logs</span> <span class=\"o\">+=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;Config.</span><span class=\"se\">\\n</span><span class=\"s2\">{pretty_json_dumps(self.config_dict)}</span><span class=\"se\">\\n</span><span class=\"si\">{hr_text}</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span>\n        <span class=\"n\">summary_logs</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n            <span class=\"n\">f</span><span class=\"s2\">&quot;Training Logs.</span><span class=\"se\">\\n</span><span class=\"s2\">{pretty_json_dumps(self.trainer.training_logs)}</span><span class=\"se\">\\n</span><span class=\"si\">{hr_text}</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">summary_logs</span> <span class=\"o\">+=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;Metric Logs.</span><span class=\"se\">\\n</span><span class=\"s2\">{pretty_json_dumps(self.trainer.metric_logs)}&quot;</span>\n\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">summary_logs</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">slack_url</span><span class=\"p\">:</span>  <span class=\"c1\"># pragma: no cover</span>\n            <span class=\"n\">simple_summary_title</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;Session Name: </span><span class=\"si\">{nsml.SESSION_NAME}</span><span class=\"s2\"> &quot;</span>\n            <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;base_config&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n                <span class=\"n\">simple_summary_title</span> <span class=\"o\">+=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;(</span><span class=\"si\">{self.config.base_config}</span><span class=\"s2\">)&quot;</span>\n\n            <span class=\"n\">simple_summary_logs</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot; - Dataset: </span><span class=\"si\">{self.config.data_reader.dataset}</span><span class=\"s2\"> </span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span>\n            <span class=\"n\">simple_summary_logs</span> <span class=\"o\">+=</span> <span class=\"n\">f</span><span class=\"s2\">&quot; - Model: </span><span class=\"si\">{self.config.model.name}</span><span class=\"s2\">&quot;</span>\n\n            <span class=\"n\">best_metrics</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;epoch&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_epoch&quot;</span><span class=\"p\">]}</span>\n            <span class=\"n\">best_metrics</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;best&quot;</span><span class=\"p\">])</span>\n\n            <span class=\"n\">simple_summary_logs</span> <span class=\"o\">+=</span> <span class=\"n\">f</span><span class=\"s2\">&quot; - Best metrics.</span><span class=\"se\">\\n</span><span class=\"s2\"> {pretty_json_dumps(best_metrics)} &quot;</span>\n\n            <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">send_message_to_slack</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">slack_url</span><span class=\"p\">,</span> <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"n\">simple_summary_title</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"o\">=</span><span class=\"n\">simple_summary_logs</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Experiment.set_eval_mode\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.experiment.Experiment.set_eval_mode\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">set_eval_mode</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Evaluate Mode</span>\n\n<span class=\"sd\">        - Pipeline</span>\n<span class=\"sd\">          1. read raw_data (DataReader)</span>\n<span class=\"sd\">          2. load vocabs from checkpoint (DataReader, Token)</span>\n<span class=\"sd\">          3. indexing tokens (DataReader, Token)</span>\n<span class=\"sd\">          4. convert to DataSet (DataReader)</span>\n<span class=\"sd\">          5. create DataLoader (DataLoader)</span>\n<span class=\"sd\">          6. define and load model</span>\n<span class=\"sd\">          7. run!</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_data_and_token_makers</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># DataReader</span>\n        <span class=\"n\">datas</span><span class=\"p\">,</span> <span class=\"n\">helpers</span> <span class=\"o\">=</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Token &amp; Vocab</span>\n        <span class=\"n\">vocabs</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">load_vocabs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_checkpoint</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span> <span class=\"ow\">in</span> <span class=\"n\">token_makers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">set_vocab</span><span class=\"p\">(</span><span class=\"n\">vocabs</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">])</span>\n\n        <span class=\"n\">text_handler</span> <span class=\"o\">=</span> <span class=\"n\">TextHandler</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">lazy_indexing</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">text_handler</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">datas</span><span class=\"p\">,</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">text_columns</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># iterator</span>\n        <span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocabs</span><span class=\"p\">[</span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"nb\">iter</span><span class=\"p\">(</span><span class=\"n\">vocabs</span><span class=\"p\">))]</span>\n        <span class=\"n\">datasets</span> <span class=\"o\">=</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">convert_to_dataset</span><span class=\"p\">(</span><span class=\"n\">datas</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">helpers</span><span class=\"o\">=</span><span class=\"n\">helpers</span><span class=\"p\">)</span>  <span class=\"c1\"># with name</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">iterator</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span>\n        <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">valid_loader</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_by_factory</span><span class=\"p\">(</span>\n            <span class=\"n\">DataLoaderFactory</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">iterator</span><span class=\"p\">,</span> <span class=\"n\">param</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;datasets&quot;</span><span class=\"p\">:</span> <span class=\"n\">datasets</span><span class=\"p\">}</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># Model</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_model</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">checkpoint</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_checkpoint</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">set_trainer</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">valid_loader</span></div>\n\n<div class=\"viewcode-block\" id=\"Experiment.set_eval_inference_latency_mode\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.experiment.Experiment.set_eval_inference_latency_mode\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">set_eval_inference_latency_mode</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Evaluate Inference Latency Mode</span>\n\n<span class=\"sd\">        - Pipeline</span>\n<span class=\"sd\">          1. read raw_data (DataReader)</span>\n<span class=\"sd\">          2. load vocabs from checkpoint (DataReader, Token)</span>\n<span class=\"sd\">          3. define raw_to_tensor_fn (DataReader, Token)</span>\n<span class=\"sd\">          4. define and load model</span>\n<span class=\"sd\">          5. run!</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_data_and_token_makers</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Token &amp; Vocab</span>\n        <span class=\"n\">vocabs</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">load_vocabs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_checkpoint</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span> <span class=\"ow\">in</span> <span class=\"n\">token_makers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">set_vocab</span><span class=\"p\">(</span><span class=\"n\">vocabs</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">])</span>\n\n        <span class=\"n\">text_handler</span> <span class=\"o\">=</span> <span class=\"n\">TextHandler</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">lazy_indexing</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">helpers</span> <span class=\"o\">=</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span>\n        <span class=\"n\">raw_examples</span> <span class=\"o\">=</span> <span class=\"n\">helpers</span><span class=\"p\">[</span><span class=\"s2\">&quot;valid&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">cuda_device</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">use_gpu</span> <span class=\"k\">else</span> <span class=\"kc\">None</span>\n        <span class=\"n\">raw_to_tensor_fn</span> <span class=\"o\">=</span> <span class=\"n\">text_handler</span><span class=\"o\">.</span><span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">cuda_device</span><span class=\"o\">=</span><span class=\"n\">cuda_device</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Model</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_model</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">checkpoint</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_checkpoint</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">set_trainer</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">raw_examples</span><span class=\"p\">,</span> <span class=\"n\">raw_to_tensor_fn</span></div>\n\n<div class=\"viewcode-block\" id=\"Experiment.predict\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.experiment.Experiment.predict\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">raw_features</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">predict_settings</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;To use &#39;predict()&#39;, you must call &#39;set_predict_mode()&#39; first, with preload=True parameter&quot;</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"n\">raw_to_tensor_fn</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">predict_settings</span><span class=\"p\">[</span><span class=\"s2\">&quot;raw_to_tensor_fn&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">arguments</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">predict_settings</span><span class=\"p\">[</span><span class=\"s2\">&quot;arguments&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">arguments</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">raw_features</span><span class=\"p\">)</span>\n\n        <span class=\"k\">assert</span> <span class=\"n\">raw_features</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n        <span class=\"k\">assert</span> <span class=\"n\">raw_to_tensor_fn</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span>\n            <span class=\"n\">raw_features</span><span class=\"p\">,</span>\n            <span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">,</span>\n            <span class=\"n\">arguments</span><span class=\"p\">,</span>\n            <span class=\"n\">interactive</span><span class=\"o\">=</span><span class=\"n\">arguments</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;interactive&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">),</span>\n        <span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"Experiment.set_predict_mode\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.experiment.Experiment.set_predict_mode\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">set_predict_mode</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">preload</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Predict Mode</span>\n\n<span class=\"sd\">        - Pipeline</span>\n<span class=\"sd\">          1. read raw_data (Argument)</span>\n<span class=\"sd\">          2. load vocabs from checkpoint (DataReader, Token)</span>\n<span class=\"sd\">          3. define raw_to_tensor_fn (DataReader, Token)</span>\n<span class=\"sd\">          4. define and load model</span>\n<span class=\"sd\">          5. run!</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_data_and_token_makers</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Token &amp; Vocab</span>\n        <span class=\"n\">vocabs</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">load_vocabs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_checkpoint</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span> <span class=\"ow\">in</span> <span class=\"n\">token_makers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">set_vocab</span><span class=\"p\">(</span><span class=\"n\">vocabs</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">])</span>\n\n        <span class=\"n\">text_handler</span> <span class=\"o\">=</span> <span class=\"n\">TextHandler</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">lazy_indexing</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Set predict config</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span><span class=\"o\">.</span><span class=\"n\">interactive</span><span class=\"p\">:</span>\n            <span class=\"n\">raw_features</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">feature_name</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span> <span class=\"k\">for</span> <span class=\"n\">feature_name</span> <span class=\"ow\">in</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">text_columns</span><span class=\"p\">}</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">raw_features</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n            <span class=\"k\">for</span> <span class=\"n\">feature_name</span> <span class=\"ow\">in</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">text_columns</span><span class=\"p\">:</span>\n                <span class=\"n\">feature</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span><span class=\"p\">,</span> <span class=\"n\">feature_name</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n                <span class=\"c1\"># if feature is None:</span>\n                <span class=\"c1\"># raise ValueError(f&quot;--{feature_name} argument is required!&quot;)</span>\n                <span class=\"n\">raw_features</span><span class=\"p\">[</span><span class=\"n\">feature_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">feature</span>\n\n        <span class=\"n\">cuda_device</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">use_gpu</span> <span class=\"k\">else</span> <span class=\"kc\">None</span>\n        <span class=\"n\">raw_to_tensor_fn</span> <span class=\"o\">=</span> <span class=\"n\">text_handler</span><span class=\"o\">.</span><span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">(</span>\n            <span class=\"n\">data_reader</span><span class=\"p\">,</span>\n            <span class=\"n\">cuda_device</span><span class=\"o\">=</span><span class=\"n\">cuda_device</span><span class=\"p\">,</span>\n            <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_checkpoint</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;predict_helper&quot;</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># Model</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_create_model</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">checkpoint</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_checkpoint</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">set_trainer</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">)</span>\n\n        <span class=\"n\">arguments</span> <span class=\"o\">=</span> <span class=\"nb\">vars</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">argument</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">preload</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">predict_settings</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;raw_to_tensor_fn&quot;</span><span class=\"p\">:</span> <span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">,</span> <span class=\"s2\">&quot;arguments&quot;</span><span class=\"p\">:</span> <span class=\"n\">arguments</span><span class=\"p\">}</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">raw_features</span><span class=\"p\">,</span> <span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">,</span> <span class=\"n\">arguments</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/learn/mode.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.learn.mode &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.learn.mode</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.learn.mode</h1><div class=\"highlight\"><pre>\n<div class=\"viewcode-block\" id=\"Mode\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.mode.Mode\">[docs]</a><span></span><span class=\"k\">class</span> <span class=\"nc\">Mode</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot; Experiment Flag class &quot;&quot;&quot;</span>\n\n    <span class=\"n\">TRAIN</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;train&quot;</span>\n    <span class=\"n\">EVAL</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;eval&quot;</span>\n    <span class=\"n\">INFER_EVAL</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;infer_eval&quot;</span>\n    <span class=\"n\">PREDICT</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;predict&quot;</span>\n    <span class=\"n\">MACHINE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;machine&quot;</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/learn/tensorboard.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.learn.tensorboard &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.learn.tensorboard</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.learn.tensorboard</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">tensorboardX</span> <span class=\"k\">import</span> <span class=\"n\">SummaryWriter</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf</span> <span class=\"k\">import</span> <span class=\"n\">nsml</span>\n\n\n<div class=\"viewcode-block\" id=\"TensorBoard\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.tensorboard.TensorBoard\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">TensorBoard</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot; TensorBoard Wrapper for Pytorch &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">log_dir</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">(</span><span class=\"n\">log_dir</span><span class=\"p\">):</span>\n            <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">makedirs</span><span class=\"p\">(</span><span class=\"n\">log_dir</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">writer</span> <span class=\"o\">=</span> <span class=\"n\">SummaryWriter</span><span class=\"p\">(</span><span class=\"n\">log_dir</span><span class=\"o\">=</span><span class=\"n\">log_dir</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"TensorBoard.scalar_summaries\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.tensorboard.TensorBoard.scalar_summaries\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">scalar_summaries</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">step</span><span class=\"p\">,</span> <span class=\"n\">summary</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">summary</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;summary type is dict. not {type(summary)}&quot;</span><span class=\"p\">)</span>\n            <span class=\"n\">kwargs</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;summary&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"s2\">&quot;scope&quot;</span><span class=\"p\">:</span> <span class=\"nb\">locals</span><span class=\"p\">(),</span> <span class=\"s2\">&quot;step&quot;</span><span class=\"p\">:</span> <span class=\"n\">step</span><span class=\"p\">}</span>\n            <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">summary</span><span class=\"p\">)</span>\n\n            <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">report</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">tag</span><span class=\"p\">,</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">summary</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">scalar_summary</span><span class=\"p\">(</span><span class=\"n\">step</span><span class=\"p\">,</span> <span class=\"n\">tag</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"TensorBoard.scalar_summary\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.tensorboard.TensorBoard.scalar_summary\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">scalar_summary</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">step</span><span class=\"p\">,</span> <span class=\"n\">tag</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Log a scalar variable.&quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span><span class=\"p\">:</span>\n            <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">report</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span><span class=\"s2\">&quot;summary&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"s2\">&quot;scope&quot;</span><span class=\"p\">:</span> <span class=\"nb\">locals</span><span class=\"p\">(),</span> <span class=\"s2\">&quot;step&quot;</span><span class=\"p\">:</span> <span class=\"n\">step</span><span class=\"p\">,</span> <span class=\"n\">tag</span><span class=\"p\">:</span> <span class=\"n\">value</span><span class=\"p\">})</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"n\">add_scalar</span><span class=\"p\">(</span><span class=\"n\">tag</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"n\">step</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"TensorBoard.image_summary\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.tensorboard.TensorBoard.image_summary\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">image_summary</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tag</span><span class=\"p\">,</span> <span class=\"n\">images</span><span class=\"p\">,</span> <span class=\"n\">step</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Log a list of images.&quot;&quot;&quot;</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"TensorBoard.embedding_summary\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.tensorboard.TensorBoard.embedding_summary\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">embedding_summary</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">metadata</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">label_img</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"TensorBoard.histogram_summary\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.tensorboard.TensorBoard.histogram_summary\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">histogram_summary</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tag</span><span class=\"p\">,</span> <span class=\"n\">values</span><span class=\"p\">,</span> <span class=\"n\">step</span><span class=\"p\">,</span> <span class=\"n\">bins</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Log a histogram of the tensor of values.&quot;&quot;&quot;</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"TensorBoard.graph_summary\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.tensorboard.TensorBoard.graph_summary\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">graph_summary</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">input_to_model</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">()</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/learn/trainer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.learn.trainer &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.learn.trainer</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.learn.trainer</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"c1\"># -*- coding: utf-8 -*-</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">import</span> <span class=\"nn\">time</span>\n<span class=\"kn\">import</span> <span class=\"nn\">random</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">from</span> <span class=\"nn\">torch.nn.utils</span> <span class=\"k\">import</span> <span class=\"n\">clip_grad_norm_</span>\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf</span> <span class=\"k\">import</span> <span class=\"n\">nsml</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.utils</span> <span class=\"k\">import</span> <span class=\"n\">pretty_json_dumps</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn.optimization.exponential_moving_avarage</span> <span class=\"k\">import</span> <span class=\"n\">EMA</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn.tensorboard</span> <span class=\"k\">import</span> <span class=\"n\">TensorBoard</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"Trainer\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.trainer.Trainer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Trainer</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Trainer</span>\n<span class=\"sd\">    Run experiment</span>\n\n<span class=\"sd\">    - train</span>\n<span class=\"sd\">    - train_and_evaluate</span>\n<span class=\"sd\">    - evaluate</span>\n<span class=\"sd\">    - evaluate_inference_latency</span>\n<span class=\"sd\">    - predict</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        config: experiment overall config</span>\n<span class=\"sd\">        model: Model based on torch.nn.Module</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        log_dir: path to directory for save model and other options</span>\n<span class=\"sd\">        grad_max_norm: Clips gradient norm of an iterable of parameters.</span>\n<span class=\"sd\">        learning_rate_scheduler: PyTorch&#39;s Learning Rate Scheduler.</span>\n<span class=\"sd\">            (https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html)</span>\n<span class=\"sd\">        exponential_moving_average: the moving averages of all weights of the model are maintained</span>\n<span class=\"sd\">            with the exponential decay rate of {ema}.</span>\n<span class=\"sd\">        num_epochs: the number of maximun epochs (Default is 20)</span>\n<span class=\"sd\">        early_stopping_threshold: the number of early stopping threshold (Default is 10)</span>\n<span class=\"sd\">        max_eval_examples: print evaluation examples</span>\n<span class=\"sd\">        metric_key: metric score&#39;s control point</span>\n<span class=\"sd\">        verbose_step_count: print verbose step count (Default is 100)</span>\n<span class=\"sd\">        eval_and_save_step_count: evaluate valid_dataset then save every n step_count (Default is &#39;epoch&#39;)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">model</span><span class=\"p\">,</span>\n        <span class=\"n\">config</span><span class=\"o\">=</span><span class=\"p\">{},</span>\n        <span class=\"n\">log_dir</span><span class=\"o\">=</span><span class=\"s2\">&quot;logs/experiment&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">grad_max_norm</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">gradient_accumulation_steps</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">learning_rate_scheduler</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">exponential_moving_average</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">num_epochs</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span>\n        <span class=\"n\">early_stopping_threshold</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span>\n        <span class=\"n\">max_eval_examples</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">,</span>\n        <span class=\"n\">metric_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_step_count</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n        <span class=\"n\">eval_and_save_step_count</span><span class=\"o\">=</span><span class=\"s2\">&quot;epoch&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">save_checkpoint</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"k\">assert</span> <span class=\"n\">metric_key</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n\n        <span class=\"c1\"># CUDA</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_multi_gpu</span> <span class=\"o\">=</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">DataParallel</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"s2\">&quot;train_counter&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span> <span class=\"o\">=</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train_counter</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">TrainCounter</span><span class=\"p\">(</span><span class=\"n\">display_unit</span><span class=\"o\">=</span><span class=\"n\">eval_and_save_step_count</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">model</span>\n        <span class=\"n\">model_config</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_name</span> <span class=\"o\">=</span> <span class=\"n\">model_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;model&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">set_model_base_properties</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"n\">log_dir</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Logs</span>\n        <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">makedirs</span><span class=\"p\">(</span><span class=\"n\">log_dir</span><span class=\"p\">,</span> <span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tensorboard</span> <span class=\"o\">=</span> <span class=\"n\">TensorBoard</span><span class=\"p\">(</span><span class=\"n\">log_dir</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;best_epoch&quot;</span><span class=\"p\">:</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"s2\">&quot;best_global_step&quot;</span><span class=\"p\">:</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"s2\">&quot;best&quot;</span><span class=\"p\">:</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"s2\">&quot;best_score&quot;</span><span class=\"p\">:</span> <span class=\"mi\">0</span><span class=\"p\">}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training_logs</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;early_stopping_count&quot;</span><span class=\"p\">:</span> <span class=\"mi\">0</span><span class=\"p\">}</span>\n\n        <span class=\"c1\"># optimization options</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">grad_max_norm</span> <span class=\"o\">=</span> <span class=\"n\">grad_max_norm</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">gradient_accumulation_steps</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">gradient_accumulation_steps</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">gradient_accumulation_steps</span> <span class=\"o\">=</span> <span class=\"n\">gradient_accumulation_steps</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">learning_rate_scheduler</span> <span class=\"o\">=</span> <span class=\"n\">learning_rate_scheduler</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">exponential_moving_average</span> <span class=\"o\">=</span> <span class=\"n\">exponential_moving_average</span>\n        <span class=\"k\">if</span> <span class=\"n\">exponential_moving_average</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">exponential_moving_average</span> <span class=\"o\">=</span> <span class=\"n\">EMA</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">exponential_moving_average</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># property</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_epochs</span> <span class=\"o\">=</span> <span class=\"n\">num_epochs</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">early_stopping</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">early_stopping_threshold</span> <span class=\"o\">=</span> <span class=\"n\">early_stopping_threshold</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_eval_examples</span> <span class=\"o\">=</span> <span class=\"n\">max_eval_examples</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_key</span> <span class=\"o\">=</span> <span class=\"n\">metric_key</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">verbose_step_count</span> <span class=\"o\">=</span> <span class=\"n\">verbose_step_count</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">eval_and_save_step_count</span> <span class=\"o\">=</span> <span class=\"n\">eval_and_save_step_count</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save_checkpoint</span> <span class=\"o\">=</span> <span class=\"n\">save_checkpoint</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">log_dir</span> <span class=\"o\">=</span> <span class=\"n\">log_dir</span>\n\n<div class=\"viewcode-block\" id=\"Trainer.set_model_base_properties\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.trainer.Trainer.set_model_base_properties\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">set_model_base_properties</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"n\">log_dir</span><span class=\"p\">):</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_multi_gpu</span><span class=\"p\">:</span>\n            <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">module</span>\n\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">config</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">log_dir</span> <span class=\"o\">=</span> <span class=\"n\">log_dir</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train_counter</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span>\n        <span class=\"k\">assert</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">is_ready</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"kc\">True</span></div>\n\n<div class=\"viewcode-block\" id=\"Trainer.train_and_evaluate\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.trainer.Trainer.train_and_evaluate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">train_and_evaluate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">train_loader</span><span class=\"p\">,</span> <span class=\"n\">valid_loader</span><span class=\"p\">,</span> <span class=\"n\">optimizer</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Train and Evaluate &quot;&quot;&quot;</span>\n        <span class=\"n\">start_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">epoch</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_epochs</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">epoch</span> <span class=\"o\">=</span> <span class=\"n\">epoch</span>\n\n            <span class=\"c1\"># Training with metrics</span>\n            <span class=\"n\">train_metrics</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_run_epoch</span><span class=\"p\">(</span>\n                <span class=\"n\">train_loader</span><span class=\"p\">,</span>\n                <span class=\"n\">valid_loader</span><span class=\"o\">=</span><span class=\"n\">valid_loader</span><span class=\"p\">,</span>\n                <span class=\"n\">is_training</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">optimizer</span><span class=\"o\">=</span><span class=\"n\">optimizer</span><span class=\"p\">,</span>\n                <span class=\"n\">verbose_step_count</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">verbose_step_count</span><span class=\"p\">,</span>\n                <span class=\"n\">eval_and_save_step_count</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">eval_and_save_step_count</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"n\">valid_metrics</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">eval_and_save_step_count</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;epoch&quot;</span><span class=\"p\">:</span>\n                <span class=\"n\">valid_metrics</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_run_epoch</span><span class=\"p\">(</span><span class=\"n\">valid_loader</span><span class=\"p\">,</span> <span class=\"n\">is_training</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_check_valid_results</span><span class=\"p\">(</span><span class=\"n\">valid_metrics</span><span class=\"p\">,</span> <span class=\"n\">report</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">optimizer</span><span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_report_metrics</span><span class=\"p\">(</span><span class=\"n\">train_metrics</span><span class=\"o\">=</span><span class=\"n\">train_metrics</span><span class=\"p\">,</span> <span class=\"n\">valid_metrics</span><span class=\"o\">=</span><span class=\"n\">valid_metrics</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_estimate_remainig_time</span><span class=\"p\">(</span><span class=\"n\">start_time</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">early_stopping</span><span class=\"p\">:</span>\n                <span class=\"k\">break</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_report_trainings</span><span class=\"p\">(</span><span class=\"n\">start_time</span><span class=\"p\">,</span> <span class=\"n\">train_loader</span><span class=\"o\">=</span><span class=\"n\">train_loader</span><span class=\"p\">,</span> <span class=\"n\">valid_loader</span><span class=\"o\">=</span><span class=\"n\">valid_loader</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"Trainer.train\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.trainer.Trainer.train\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">train</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_loader</span><span class=\"p\">,</span> <span class=\"n\">optimizer</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Train &quot;&quot;&quot;</span>\n        <span class=\"n\">start_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">epoch</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_epochs</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">epoch</span> <span class=\"o\">=</span> <span class=\"n\">epoch</span>\n\n            <span class=\"n\">metrics</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_run_epoch</span><span class=\"p\">(</span>\n                <span class=\"n\">data_loader</span><span class=\"p\">,</span>\n                <span class=\"n\">is_training</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">optimizer</span><span class=\"o\">=</span><span class=\"n\">optimizer</span><span class=\"p\">,</span>\n                <span class=\"n\">verbose_step_count</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">verbose_step_count</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_report_metrics</span><span class=\"p\">(</span><span class=\"n\">train_metrics</span><span class=\"o\">=</span><span class=\"n\">metrics</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_estimate_remainig_time</span><span class=\"p\">(</span><span class=\"n\">start_time</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">optimizer</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_report_trainings</span><span class=\"p\">(</span><span class=\"n\">start_time</span><span class=\"p\">,</span> <span class=\"n\">train_loader</span><span class=\"o\">=</span><span class=\"n\">data_loader</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"Trainer.evaluate\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.trainer.Trainer.evaluate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">evaluate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_loader</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Evaluate &quot;&quot;&quot;</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;evaluate:&quot;</span><span class=\"p\">,</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">data_loader</span><span class=\"p\">),</span> <span class=\"n\">data_loader</span><span class=\"p\">)</span>\n        <span class=\"n\">eval_metrics</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_run_epoch</span><span class=\"p\">(</span><span class=\"n\">data_loader</span><span class=\"p\">,</span> <span class=\"n\">is_training</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">disable_prograss_bar</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_report_metrics</span><span class=\"p\">(</span><span class=\"n\">tensorboard</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">valid_metrics</span><span class=\"o\">=</span><span class=\"n\">eval_metrics</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"Trainer.evaluate_inference_latency\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.trainer.Trainer.evaluate_inference_latency\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">evaluate_inference_latency</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">raw_examples</span><span class=\"p\">,</span> <span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">,</span> <span class=\"n\">token_key</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">max_latency</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Evaluate with focusing inferece latency</span>\n<span class=\"sd\">        (Note: must use sorted synthetic data)</span>\n\n<span class=\"sd\">        * inference_latency: raw_data -&gt; pre-processing -&gt; model -&gt; predict_value</span>\n<span class=\"sd\">                                (elapsed_time)               (elapsed_time)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\"># Evaluate Inference Latency Mode.&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">eval</span><span class=\"p\">()</span>\n\n        <span class=\"n\">total_raw_to_tensor_time</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">tensor_to_predicts</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"n\">raw_example_items</span> <span class=\"o\">=</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">raw_examples</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">())</span>\n        <span class=\"k\">for</span> <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">raw_example</span> <span class=\"ow\">in</span> <span class=\"n\">raw_example_items</span><span class=\"p\">:</span>\n            <span class=\"c1\"># raw_data -&gt; tensor</span>\n            <span class=\"n\">raw_to_tensor_start_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span>\n            <span class=\"n\">feature</span><span class=\"p\">,</span> <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">raw_example</span><span class=\"p\">)</span>\n            <span class=\"n\">raw_to_tensor_elapsted_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">raw_to_tensor_start_time</span>\n            <span class=\"n\">raw_to_tensor_elapsted_time</span> <span class=\"o\">*=</span> <span class=\"mi\">1000</span>  <span class=\"c1\"># unit: sec -&gt; ms</span>\n\n            <span class=\"n\">total_raw_to_tensor_time</span> <span class=\"o\">+=</span> <span class=\"n\">raw_to_tensor_elapsted_time</span>\n\n            <span class=\"c1\"># tensor to predict</span>\n            <span class=\"n\">tensor_to_predict_start_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span>\n            <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">(</span><span class=\"n\">feature</span><span class=\"p\">)</span>\n            <span class=\"n\">tensor_to_predict_elapsed_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">tensor_to_predict_start_time</span>\n\n            <span class=\"k\">if</span> <span class=\"s2\">&quot;token_key&quot;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">helper</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                    <span class=\"s2\">&quot;helper must have &#39;token_key&#39; data for 1-example inference latency.&quot;</span>\n                <span class=\"p\">)</span>\n\n            <span class=\"n\">tensor_to_predict_elapsed_time</span> <span class=\"o\">*=</span> <span class=\"mi\">1000</span>  <span class=\"c1\"># unit: sec -&gt; ms</span>\n            <span class=\"n\">tensor_to_predict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;elapsed_time&quot;</span><span class=\"p\">:</span> <span class=\"n\">tensor_to_predict_elapsed_time</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;token_count&quot;</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_key&quot;</span><span class=\"p\">]]),</span>\n            <span class=\"p\">}</span>\n            <span class=\"n\">tensor_to_predicts</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">tensor_to_predict</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">tensor_to_predict_elapsed_time</span> <span class=\"o\">&gt;</span> <span class=\"n\">max_latency</span><span class=\"p\">:</span>\n                <span class=\"n\">raw_example_items</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n                <span class=\"k\">break</span>\n\n        <span class=\"n\">total_tensor_to_predict</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span><span class=\"n\">tensor_to_predict</span><span class=\"p\">[</span><span class=\"s2\">&quot;elapsed_time&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">tensor_to_predict</span> <span class=\"ow\">in</span> <span class=\"n\">tensor_to_predicts</span><span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">max_token_count_per_times</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"n\">max_times</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">max_latency</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">100</span><span class=\"p\">))</span>\n        <span class=\"k\">for</span> <span class=\"n\">t2p</span> <span class=\"ow\">in</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">tensor_to_predicts</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_count&quot;</span><span class=\"p\">]):</span>\n            <span class=\"n\">elapsed_time</span> <span class=\"o\">=</span> <span class=\"n\">t2p</span><span class=\"p\">[</span><span class=\"s2\">&quot;elapsed_time&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">token_count</span> <span class=\"o\">=</span> <span class=\"n\">t2p</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_count&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"k\">for</span> <span class=\"n\">max_time</span> <span class=\"ow\">in</span> <span class=\"n\">max_times</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">elapsed_time</span> <span class=\"o\">&lt;</span> <span class=\"n\">max_time</span><span class=\"p\">:</span>\n                    <span class=\"n\">max_token_count_per_times</span><span class=\"p\">[</span><span class=\"n\">max_time</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">token_count</span>\n\n        <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;average_raw_to_tensor&quot;</span><span class=\"p\">:</span> <span class=\"n\">total_raw_to_tensor_time</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">raw_examples</span><span class=\"p\">),</span>\n            <span class=\"s2\">&quot;average_tensor_to_predict&quot;</span><span class=\"p\">:</span> <span class=\"n\">total_tensor_to_predict</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">raw_examples</span><span class=\"p\">),</span>\n            <span class=\"s2\">&quot;average_end_to_end&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"n\">total_raw_to_tensor_time</span> <span class=\"o\">+</span> <span class=\"n\">total_tensor_to_predict</span><span class=\"p\">)</span>\n            <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">raw_examples</span><span class=\"p\">),</span>\n            <span class=\"s2\">&quot;tensor_to_predicts&quot;</span><span class=\"p\">:</span> <span class=\"n\">tensor_to_predicts</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;max_token_count_per_time&quot;</span><span class=\"p\">:</span> <span class=\"n\">max_token_count_per_times</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"n\">env</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;gpu&quot;</span> <span class=\"k\">if</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">()</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;cpu&quot;</span>\n        <span class=\"n\">file_name</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{self.model_name}</span><span class=\"s2\">-</span><span class=\"si\">{env}</span><span class=\"s2\">.json&quot;</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">file_name</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n            <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dump</span><span class=\"p\">(</span><span class=\"n\">result</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;saved inference_latency results. </span><span class=\"si\">{file_name}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_is_early_stopping</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">metrics</span><span class=\"p\">):</span>\n        <span class=\"n\">score</span> <span class=\"o\">=</span> <span class=\"n\">metrics</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_key</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">score</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_score&quot;</span><span class=\"p\">]:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;early_stopping_count&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;early_stopping_count&quot;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;early_stopping_count&quot;</span><span class=\"p\">]</span> <span class=\"o\">&gt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">early_stopping_threshold</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;early_stopping&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"k\">return</span> <span class=\"kc\">True</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_report_metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tensorboard</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">train_metrics</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">valid_metrics</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n\n        <span class=\"n\">total_metrics</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">update_metrics</span><span class=\"p\">(</span><span class=\"n\">metrics</span><span class=\"p\">,</span> <span class=\"n\">category</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">metrics</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">metrics</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                    <span class=\"n\">total_metrics</span><span class=\"p\">[</span><span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{category}</span><span class=\"s2\">/</span><span class=\"si\">{k}</span><span class=\"s2\">&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">v</span>\n\n        <span class=\"n\">update_metrics</span><span class=\"p\">(</span><span class=\"n\">train_metrics</span><span class=\"p\">,</span> <span class=\"s2\">&quot;train&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">update_metrics</span><span class=\"p\">(</span><span class=\"n\">valid_metrics</span><span class=\"p\">,</span> <span class=\"s2\">&quot;valid&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># TensorBoard</span>\n        <span class=\"k\">if</span> <span class=\"n\">tensorboard</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tensorboard</span><span class=\"o\">.</span><span class=\"n\">scalar_summaries</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">get_display</span><span class=\"p\">(),</span> <span class=\"n\">total_metrics</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Console</span>\n        <span class=\"n\">metric_console</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">train_metrics</span><span class=\"p\">:</span>\n            <span class=\"n\">metric_console</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\"># Epoch: [</span><span class=\"si\">{self.train_counter.epoch}</span><span class=\"s2\">/</span><span class=\"si\">{self.num_epochs}</span><span class=\"s2\">]: Metrics </span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span>\n            <span class=\"p\">)</span>\n        <span class=\"n\">metric_console</span> <span class=\"o\">+=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">total_metrics</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">metric_console</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">valid_metrics</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_update_metric_logs</span><span class=\"p\">(</span><span class=\"n\">total_metrics</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_update_metric_logs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">total_metrics</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">total_metrics</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">v</span><span class=\"p\">]</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span>\n\n        <span class=\"n\">valid_score</span> <span class=\"o\">=</span> <span class=\"n\">total_metrics</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;valid/</span><span class=\"si\">{self.metric_key}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">valid_score</span> <span class=\"ow\">and</span> <span class=\"n\">valid_score</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_score&quot;</span><span class=\"p\">]:</span>\n            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot; * Best validation score so far. (</span><span class=\"si\">{self.metric_key}</span><span class=\"s2\">) : </span><span class=\"si\">{valid_score}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_score&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">valid_score</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;best&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">total_metrics</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_epoch&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">epoch</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_global_step&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">global_step</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span>\n                <span class=\"n\">f</span><span class=\"s2\">&quot; * Current best validation score. (</span><span class=\"si\">{self.metric_key}</span><span class=\"s2\">) : </span><span class=\"si\">{self.metric_logs[&#39;best_score&#39;]}</span><span class=\"s2\">&quot;</span>\n            <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_estimate_remainig_time</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">start_time</span><span class=\"p\">):</span>\n        <span class=\"n\">elapsed_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">start_time</span>\n        <span class=\"n\">estimated_time_remaining</span> <span class=\"o\">=</span> <span class=\"n\">elapsed_time</span> <span class=\"o\">*</span> <span class=\"p\">(</span>\n            <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_epochs</span> <span class=\"o\">-</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">epoch</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">epoch</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">formatted_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s2\">&quot;%H:%M:%S&quot;</span><span class=\"p\">,</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">gmtime</span><span class=\"p\">(</span><span class=\"n\">estimated_time_remaining</span><span class=\"p\">))</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Estimated training time remaining: </span><span class=\"si\">{formatted_time}</span><span class=\"s2\"> &quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_report_trainings</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">start_time</span><span class=\"p\">,</span> <span class=\"n\">train_loader</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">valid_loader</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">elapsed_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">start_time</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;elapsed_time&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s2\">&quot;%H:%M:%S&quot;</span><span class=\"p\">,</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">gmtime</span><span class=\"p\">(</span><span class=\"n\">elapsed_time</span><span class=\"p\">)),)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">train_loader</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;train_dataset&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">train_loader</span><span class=\"o\">.</span><span class=\"n\">dataset</span><span class=\"p\">))</span>\n        <span class=\"k\">if</span> <span class=\"n\">valid_loader</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training_logs</span><span class=\"p\">[</span><span class=\"s2\">&quot;valid_dataset&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">valid_loader</span><span class=\"o\">.</span><span class=\"n\">dataset</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_run_epoch</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">data_loader</span><span class=\"p\">,</span>\n        <span class=\"n\">valid_loader</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">is_training</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">optimizer</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">disable_prograss_bar</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_step_count</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n        <span class=\"n\">eval_and_save_step_count</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Run Epoch</span>\n\n<span class=\"sd\">        1. forward inputs to model</span>\n<span class=\"sd\">        2. (training) backpropagation</span>\n<span class=\"sd\">        3. update predictions</span>\n<span class=\"sd\">        4. make metrics</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">is_training</span><span class=\"p\">:</span>\n            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;# Train Mode.&quot;</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train</span><span class=\"p\">()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;# Evaluate Mode.&quot;</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">eval</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># set dataset (train/valid)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_set_dataset_to_model</span><span class=\"p\">(</span><span class=\"n\">data_loader</span><span class=\"o\">.</span><span class=\"n\">dataset</span><span class=\"p\">)</span>\n\n        <span class=\"n\">metrics</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"n\">predictions</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n        <span class=\"n\">epoch_loss</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">epoch_start_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span>\n        <span class=\"n\">step_start_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span>\n\n        <span class=\"n\">eval_example_count</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">step</span><span class=\"p\">,</span> <span class=\"n\">batch</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">data_loader</span><span class=\"p\">,</span> <span class=\"n\">disable</span><span class=\"o\">=</span><span class=\"n\">disable_prograss_bar</span><span class=\"p\">)):</span>\n            <span class=\"n\">inputs</span> <span class=\"o\">=</span> <span class=\"n\">batch</span><span class=\"o\">.</span><span class=\"n\">to_dict</span><span class=\"p\">()</span>  <span class=\"c1\"># for DataParallel</span>\n            <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">inputs</span><span class=\"p\">)</span>\n\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_multi_gpu</span><span class=\"p\">:</span>\n                <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">mean</span><span class=\"p\">()</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">gradient_accumulation_steps</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"n\">loss</span> <span class=\"o\">/</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">gradient_accumulation_steps</span>\n\n            <span class=\"n\">epoch_loss</span> <span class=\"o\">+=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">is_training</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Training Verbose</span>\n                <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">global_step</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                    <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;  Start - Batch Loss: {loss.item():.5f}&quot;</span><span class=\"p\">)</span>\n\n                <span class=\"k\">if</span> <span class=\"p\">(</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">global_step</span> <span class=\"o\">!=</span> <span class=\"mi\">0</span>\n                    <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">global_step</span> <span class=\"o\">%</span> <span class=\"n\">verbose_step_count</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n                <span class=\"p\">):</span>\n                    <span class=\"n\">step_elapsed_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">step_start_time</span>\n\n                    <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span>\n                        <span class=\"n\">f</span><span class=\"s2\">&quot;  Step: </span><span class=\"si\">{self.train_counter.global_step}</span><span class=\"s2\"> Batch Loss: {loss.item():.5f}  </span><span class=\"si\">{step_elapsed_time:.5f}</span><span class=\"s2\"> sec&quot;</span>\n                    <span class=\"p\">)</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tensorboard</span><span class=\"o\">.</span><span class=\"n\">scalar_summary</span><span class=\"p\">(</span>\n                        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">global_step</span><span class=\"p\">,</span> <span class=\"s2\">&quot;train/batch_loss&quot;</span><span class=\"p\">,</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n                    <span class=\"p\">)</span>\n\n                    <span class=\"n\">step_start_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span>\n\n                <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">backward</span><span class=\"p\">()</span>\n\n                <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">grad_max_norm</span><span class=\"p\">:</span>\n                    <span class=\"n\">clip_grad_norm_</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_model_parameters</span><span class=\"p\">(),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">grad_max_norm</span><span class=\"p\">)</span>\n\n                <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">step</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">gradient_accumulation_steps</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                    <span class=\"c1\"># Backpropagation</span>\n                    <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">learning_rate_scheduler</span><span class=\"p\">:</span>\n                        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">learning_rate_scheduler</span><span class=\"o\">.</span><span class=\"n\">step_batch</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">global_step</span><span class=\"p\">)</span>\n\n                    <span class=\"n\">optimizer</span><span class=\"o\">.</span><span class=\"n\">step</span><span class=\"p\">()</span>\n                    <span class=\"n\">optimizer</span><span class=\"o\">.</span><span class=\"n\">zero_grad</span><span class=\"p\">()</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">global_step</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n\n                    <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">exponential_moving_average</span><span class=\"p\">:</span>\n                        <span class=\"k\">for</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">param</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">named_parameters</span><span class=\"p\">():</span>\n                            <span class=\"k\">if</span> <span class=\"n\">param</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span><span class=\"p\">:</span>\n                                <span class=\"n\">param</span><span class=\"o\">.</span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">exponential_moving_average</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">param</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n                    <span class=\"c1\"># Evaluate then Save checkpoint</span>\n                    <span class=\"k\">if</span> <span class=\"p\">(</span>\n                        <span class=\"n\">valid_loader</span>\n                        <span class=\"ow\">and</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">eval_and_save_step_count</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">int</span>\n                        <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">global_step</span> <span class=\"o\">%</span> <span class=\"n\">eval_and_save_step_count</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n                    <span class=\"p\">):</span>\n                        <span class=\"k\">with</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">no_grad</span><span class=\"p\">():</span>\n                            <span class=\"n\">valid_metrics</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_run_epoch</span><span class=\"p\">(</span><span class=\"n\">valid_loader</span><span class=\"p\">,</span> <span class=\"n\">is_training</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n                        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_check_valid_results</span><span class=\"p\">(</span><span class=\"n\">valid_metrics</span><span class=\"p\">,</span> <span class=\"n\">report</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n                        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">optimizer</span><span class=\"p\">)</span>\n\n                        <span class=\"k\">if</span> <span class=\"n\">is_training</span><span class=\"p\">:</span>  <span class=\"c1\"># roll-back to train mode</span>\n                            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train</span><span class=\"p\">()</span>\n                            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_set_dataset_to_model</span><span class=\"p\">(</span><span class=\"n\">data_loader</span><span class=\"o\">.</span><span class=\"n\">dataset</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">eval_example_count</span> <span class=\"o\">&lt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_eval_examples</span><span class=\"p\">:</span>\n                    <span class=\"n\">total_step_count</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">data_loader</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"n\">data_loader</span><span class=\"o\">.</span><span class=\"n\">batch_size</span><span class=\"p\">)</span>\n                    <span class=\"n\">random_num</span> <span class=\"o\">=</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">randint</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">total_step_count</span><span class=\"p\">)</span>\n\n                    <span class=\"k\">if</span> <span class=\"n\">random_num</span> <span class=\"o\">&lt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_eval_examples</span><span class=\"p\">:</span>\n                        <span class=\"n\">eval_example_predictions</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n                        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_update_predictions</span><span class=\"p\">(</span><span class=\"n\">eval_example_predictions</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">)</span>\n\n                        <span class=\"n\">random_index</span> <span class=\"o\">=</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">randint</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">data_loader</span><span class=\"o\">.</span><span class=\"n\">batch_size</span><span class=\"p\">)</span>\n                        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_print_examples</span><span class=\"p\">(</span><span class=\"n\">random_index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">eval_example_predictions</span><span class=\"p\">)</span>\n                        <span class=\"n\">eval_example_count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_update_predictions</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">)</span>\n\n        <span class=\"n\">epoch_loss</span> <span class=\"o\">/=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">data_loader</span><span class=\"p\">)</span>\n        <span class=\"n\">epoch_elapsed_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">epoch_start_time</span>\n\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Epoch duration: &quot;</span> <span class=\"o\">+</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s2\">&quot;%H:%M:%S&quot;</span><span class=\"p\">,</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">gmtime</span><span class=\"p\">(</span><span class=\"n\">epoch_elapsed_time</span><span class=\"p\">)))</span>\n\n        <span class=\"c1\"># Updat metrics</span>\n        <span class=\"n\">metrics</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">epoch_loss</span>\n        <span class=\"n\">metrics</span><span class=\"p\">[</span><span class=\"s2\">&quot;epoch_time&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">epoch_elapsed_time</span>\n        <span class=\"n\">metrics</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_metrics</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">))</span>  <span class=\"c1\"># model metric</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">metrics</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_set_dataset_to_model</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">dataset</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_multi_gpu</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">module</span><span class=\"o\">.</span><span class=\"n\">dataset</span> <span class=\"o\">=</span> <span class=\"n\">dataset</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">dataset</span> <span class=\"o\">=</span> <span class=\"n\">dataset</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_model_parameters</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_multi_gpu</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">module</span><span class=\"o\">.</span><span class=\"n\">parameters</span><span class=\"p\">()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">parameters</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_check_valid_results</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">metrics</span><span class=\"p\">,</span> <span class=\"n\">report</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">learning_rate_scheduler</span><span class=\"p\">:</span>\n            <span class=\"c1\"># The LRScheduler API is agnostic to whether your schedule requires a validation metric -</span>\n            <span class=\"c1\"># if it doesn&#39;t, the validation metric passed here is ignored.</span>\n            <span class=\"n\">this_epoch_val_metric</span> <span class=\"o\">=</span> <span class=\"n\">metrics</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_key</span><span class=\"p\">]</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">learning_rate_scheduler</span><span class=\"o\">.</span><span class=\"n\">step</span><span class=\"p\">(</span><span class=\"n\">this_epoch_val_metric</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">global_step</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_is_early_stopping</span><span class=\"p\">(</span><span class=\"n\">metrics</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">early_stopping</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot; --- Early Stopping. --- &quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">report</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_report_metrics</span><span class=\"p\">(</span><span class=\"n\">valid_metrics</span><span class=\"o\">=</span><span class=\"n\">metrics</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_make_metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_multi_gpu</span><span class=\"p\">:</span>\n            <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">module</span>\n\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train_counter</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span>\n        <span class=\"k\">return</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">make_metrics</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_update_predictions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_multi_gpu</span><span class=\"p\">:</span>\n            <span class=\"n\">predictions</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">module</span><span class=\"o\">.</span><span class=\"n\">make_predictions</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">predictions</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">make_predictions</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_print_examples</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_multi_gpu</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">module</span><span class=\"o\">.</span><span class=\"n\">print_examples</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">print_examples</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">IndexError</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n\n<div class=\"viewcode-block\" id=\"Trainer.predict\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.trainer.Trainer.predict\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">raw_feature</span><span class=\"p\">,</span> <span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">,</span> <span class=\"n\">arguments</span><span class=\"p\">,</span> <span class=\"n\">interactive</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Inference / Predict &quot;&quot;&quot;</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">eval</span><span class=\"p\">()</span>\n        <span class=\"k\">with</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">no_grad</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"n\">interactive</span><span class=\"p\">:</span>  <span class=\"c1\"># pragma: no cover</span>\n                <span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n                    <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">raw_feature</span><span class=\"p\">:</span>\n                        <span class=\"n\">raw_feature</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">get_user_input</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">)</span>\n\n                    <span class=\"n\">tensor_feature</span><span class=\"p\">,</span> <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">raw_feature</span><span class=\"p\">)</span>\n                    <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">(</span><span class=\"n\">tensor_feature</span><span class=\"p\">)</span>\n\n                    <span class=\"n\">arguments</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">raw_feature</span><span class=\"p\">)</span>\n                    <span class=\"n\">predict</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">,</span> <span class=\"n\">arguments</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"p\">)</span>\n                    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Predict: {pretty_json_dumps(predict)} </span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">tensor_feature</span><span class=\"p\">,</span> <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"n\">raw_to_tensor_fn</span><span class=\"p\">(</span><span class=\"n\">raw_feature</span><span class=\"p\">)</span>\n                <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">(</span><span class=\"n\">tensor_feature</span><span class=\"p\">)</span>\n\n                <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">,</span> <span class=\"n\">arguments</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"Trainer.save\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.trainer.Trainer.save\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">optimizer</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save_checkpoint</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span>\n\n        <span class=\"c1\"># set all config to model</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_multi_gpu</span><span class=\"p\">:</span>\n            <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">module</span>\n\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train_counter</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">metrics</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">metric_logs</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span><span class=\"p\">:</span>\n            <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"o\">.</span><span class=\"n\">get_display</span><span class=\"p\">())</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">save_checkpoint</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">log_dir</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">optimizer</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/learn/utils.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.learn.utils &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.learn.utils</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.learn.utils</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"k\">import</span> <span class=\"n\">OrderedDict</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pathlib</span> <span class=\"k\">import</span> <span class=\"n\">Path</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">import</span> <span class=\"nn\">re</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">from</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">import</span> <span class=\"n\">DataParallel</span>\n<span class=\"kn\">import</span> <span class=\"nn\">requests</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf</span> <span class=\"k\">import</span> <span class=\"n\">nsml</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.vocabulary</span> <span class=\"k\">import</span> <span class=\"n\">Vocab</span>\n\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<span class=\"sd\">&quot;&quot;&quot; Train Counter &quot;&quot;&quot;</span>\n\n\n<div class=\"viewcode-block\" id=\"TrainCounter\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.utils.TrainCounter\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">TrainCounter</span><span class=\"p\">:</span>\n\n    <span class=\"n\">global_step</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"n\">epoch</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">display_unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;epoch&quot;</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">display_unit</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">int</span><span class=\"p\">:</span>\n            <span class=\"n\">display_unit</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;every_</span><span class=\"si\">{display_unit}</span><span class=\"s2\">_global_step&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">display_unit</span> <span class=\"o\">=</span> <span class=\"n\">display_unit</span>\n\n<div class=\"viewcode-block\" id=\"TrainCounter.get_display\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.utils.TrainCounter.get_display\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_display</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">display_unit</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;epoch&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">epoch</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">global_step</span></div></div>\n\n\n<span class=\"sd\">&quot;&quot;&quot; Save and Load checkpoint &quot;&quot;&quot;</span>\n\n\n<div class=\"viewcode-block\" id=\"load_model_checkpoint\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.utils.load_model_checkpoint\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">load_model_checkpoint</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">checkpoint</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">load_state_dict</span><span class=\"p\">(</span><span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;weights&quot;</span><span class=\"p\">])</span>\n    <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;config&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">metrics</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;metrics&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">init_params</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;init_params&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict_helper</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;predict_helper&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train_counter</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;train_counter&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">vocabs</span> <span class=\"o\">=</span> <span class=\"n\">load_vocabs</span><span class=\"p\">(</span><span class=\"n\">checkpoint</span><span class=\"p\">)</span>\n\n    <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Load model checkpoints...!&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">model</span></div>\n\n\n<div class=\"viewcode-block\" id=\"load_optimizer_checkpoint\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.utils.load_optimizer_checkpoint\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">load_optimizer_checkpoint</span><span class=\"p\">(</span><span class=\"n\">optimizer</span><span class=\"p\">,</span> <span class=\"n\">checkpoint</span><span class=\"p\">):</span>\n    <span class=\"n\">optimizer</span><span class=\"o\">.</span><span class=\"n\">load_state_dict</span><span class=\"p\">(</span><span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">])</span>\n\n    <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Load optimizer checkpoints...!&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">optimizer</span></div>\n\n\n<div class=\"viewcode-block\" id=\"load_vocabs\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.utils.load_vocabs\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">load_vocabs</span><span class=\"p\">(</span><span class=\"n\">model_checkpoint</span><span class=\"p\">):</span>\n    <span class=\"n\">vocabs</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"n\">token_config</span> <span class=\"o\">=</span> <span class=\"n\">model_checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;config&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;token&quot;</span><span class=\"p\">]</span>\n    <span class=\"k\">for</span> <span class=\"n\">token_name</span> <span class=\"ow\">in</span> <span class=\"n\">token_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;names&quot;</span><span class=\"p\">]:</span>\n        <span class=\"n\">token</span> <span class=\"o\">=</span> <span class=\"n\">token_config</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">]</span>\n        <span class=\"n\">vocab_config</span> <span class=\"o\">=</span> <span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;vocab&quot;</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n\n        <span class=\"n\">texts</span> <span class=\"o\">=</span> <span class=\"n\">model_checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;vocab_texts&quot;</span><span class=\"p\">][</span><span class=\"n\">token_name</span><span class=\"p\">]</span>\n        <span class=\"n\">vocabs</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Vocab</span><span class=\"p\">(</span><span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">vocab_config</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">from_texts</span><span class=\"p\">(</span><span class=\"n\">texts</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">vocabs</span></div>\n\n\n<div class=\"viewcode-block\" id=\"save_checkpoint\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.utils.save_checkpoint\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">save_checkpoint</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">optimizer</span><span class=\"p\">,</span> <span class=\"n\">max_to_keep</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">):</span>\n    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span>\n\n    <span class=\"n\">checkpoint_dir</span> <span class=\"o\">=</span> <span class=\"n\">path</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;checkpoint&quot;</span>\n    <span class=\"n\">checkpoint_dir</span><span class=\"o\">.</span><span class=\"n\">mkdir</span><span class=\"p\">(</span><span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Remove old checkpoints</span>\n    <span class=\"n\">sorted_path</span> <span class=\"o\">=</span> <span class=\"n\">get_sorted_path</span><span class=\"p\">(</span><span class=\"n\">checkpoint_dir</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">sorted_path</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"n\">max_to_keep</span><span class=\"p\">:</span>\n        <span class=\"n\">remove_train_counts</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">sorted_path</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())[:</span> <span class=\"o\">-</span><span class=\"p\">(</span><span class=\"n\">max_to_keep</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)]</span>\n        <span class=\"k\">for</span> <span class=\"n\">train_count</span> <span class=\"ow\">in</span> <span class=\"n\">remove_train_counts</span><span class=\"p\">:</span>\n            <span class=\"n\">optimizer_path</span> <span class=\"o\">=</span> <span class=\"n\">sorted_path</span><span class=\"p\">[</span><span class=\"n\">train_count</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">optimizer_path</span><span class=\"p\">:</span>\n                <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">optimizer_path</span><span class=\"p\">)</span>\n\n            <span class=\"n\">model_path</span> <span class=\"o\">=</span> <span class=\"n\">sorted_path</span><span class=\"p\">[</span><span class=\"n\">train_count</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">model_path</span><span class=\"p\">:</span>\n                <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">model_path</span><span class=\"p\">)</span>\n\n    <span class=\"n\">train_counter</span> <span class=\"o\">=</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train_counter</span>\n\n    <span class=\"n\">optimizer_path</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint_dir</span> <span class=\"o\">/</span> <span class=\"n\">f</span><span class=\"s2\">&quot;optimizer_{train_counter.get_display()}.pkl&quot;</span>\n    <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">({</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">:</span> <span class=\"n\">optimizer</span><span class=\"o\">.</span><span class=\"n\">state_dict</span><span class=\"p\">()},</span> <span class=\"n\">optimizer_path</span><span class=\"p\">)</span>\n\n    <span class=\"n\">model_path</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint_dir</span> <span class=\"o\">/</span> <span class=\"n\">f</span><span class=\"s2\">&quot;model_{train_counter.get_display()}.pkl&quot;</span>\n    <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span>\n        <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;config&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;init_params&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">init_params</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;predict_helper&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict_helper</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;metrics&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">metrics</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;train_counter&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;vocab_texts&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"n\">v</span><span class=\"o\">.</span><span class=\"n\">to_text</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">vocabs</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()},</span>\n            <span class=\"s2\">&quot;weights&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">state_dict</span><span class=\"p\">(),</span>\n        <span class=\"p\">},</span>\n        <span class=\"n\">model_path</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"c1\"># Write Vocab as text file (Only once)</span>\n    <span class=\"n\">vocab_dir</span> <span class=\"o\">=</span> <span class=\"n\">path</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;vocab&quot;</span>\n    <span class=\"n\">vocab_dir</span><span class=\"o\">.</span><span class=\"n\">mkdir</span><span class=\"p\">(</span><span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">vocab</span> <span class=\"ow\">in</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">vocabs</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n        <span class=\"n\">vocab_path</span> <span class=\"o\">=</span> <span class=\"n\">vocab_dir</span> <span class=\"o\">/</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{token_name}</span><span class=\"s2\">.txt&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">vocab_path</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n            <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">dump</span><span class=\"p\">(</span><span class=\"n\">vocab_path</span><span class=\"p\">)</span>\n\n    <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Save </span><span class=\"si\">{train_counter.global_step}</span><span class=\"s2\"> global_step checkpoints...!&quot;</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"get_sorted_path\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.utils.get_sorted_path\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_sorted_path</span><span class=\"p\">(</span><span class=\"n\">checkpoint_dir</span><span class=\"p\">,</span> <span class=\"n\">both_exist</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n    <span class=\"n\">paths</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">dirs</span><span class=\"p\">,</span> <span class=\"n\">files</span> <span class=\"ow\">in</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">walk</span><span class=\"p\">(</span><span class=\"n\">checkpoint_dir</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">f_name</span> <span class=\"ow\">in</span> <span class=\"n\">files</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"s2\">&quot;model&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">f_name</span> <span class=\"ow\">or</span> <span class=\"s2\">&quot;optimizer&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">f_name</span><span class=\"p\">:</span>\n                <span class=\"n\">paths</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"n\">root</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"n\">f_name</span><span class=\"p\">)</span>\n\n    <span class=\"n\">path_with_train_count</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"k\">for</span> <span class=\"n\">path</span> <span class=\"ow\">in</span> <span class=\"n\">paths</span><span class=\"p\">:</span>\n        <span class=\"n\">train_count</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">findall</span><span class=\"p\">(</span><span class=\"s2\">&quot;\\d+&quot;</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">train_count</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">train_count</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">train_count</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">path_with_train_count</span><span class=\"p\">:</span>\n            <span class=\"n\">path_with_train_count</span><span class=\"p\">[</span><span class=\"n\">train_count</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;model&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">:</span>\n            <span class=\"n\">path_with_train_count</span><span class=\"p\">[</span><span class=\"n\">train_count</span><span class=\"p\">][</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">path</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;optimizer&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">:</span>\n            <span class=\"n\">path_with_train_count</span><span class=\"p\">[</span><span class=\"n\">train_count</span><span class=\"p\">][</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">path</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">both_exist</span><span class=\"p\">:</span>\n        <span class=\"n\">remove_keys</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">checkpoint</span> <span class=\"ow\">in</span> <span class=\"n\">path_with_train_count</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"p\">(</span><span class=\"s2\">&quot;model&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">checkpoint</span> <span class=\"ow\">and</span> <span class=\"s2\">&quot;optimizer&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">checkpoint</span><span class=\"p\">):</span>\n                <span class=\"n\">remove_keys</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">key</span><span class=\"p\">)</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">remove_keys</span><span class=\"p\">:</span>\n            <span class=\"k\">del</span> <span class=\"n\">path_with_train_count</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">OrderedDict</span><span class=\"p\">(</span><span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">path_with_train_count</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()))</span></div>\n\n\n<span class=\"sd\">&quot;&quot;&quot; NSML &quot;&quot;&quot;</span>\n\n\n<div class=\"viewcode-block\" id=\"bind_nsml\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.utils.bind_nsml\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">bind_nsml</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">DataParallel</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">module</span>\n\n    <span class=\"n\">CHECKPOINT_FNAME</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;checkpoint.bin&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">infer</span><span class=\"p\">(</span><span class=\"n\">raw_data</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;raw_data:&quot;</span><span class=\"p\">,</span> <span class=\"n\">raw_data</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">load</span><span class=\"p\">(</span><span class=\"n\">dir_path</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">):</span>\n        <span class=\"n\">checkpoint_path</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">dir_path</span><span class=\"p\">,</span> <span class=\"n\">CHECKPOINT_FNAME</span><span class=\"p\">)</span>\n        <span class=\"n\">checkpoint</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">checkpoint_path</span><span class=\"p\">)</span>\n\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">load_state_dict</span><span class=\"p\">(</span><span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;weights&quot;</span><span class=\"p\">])</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;config&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">metrics</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;metrics&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">init_params</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;init_params&quot;</span><span class=\"p\">],</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict_helper</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;predict_helper&quot;</span><span class=\"p\">],</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train_counter</span> <span class=\"o\">=</span> <span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;train_counter&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">vocabs</span> <span class=\"o\">=</span> <span class=\"n\">load_vocabs</span><span class=\"p\">(</span><span class=\"n\">checkpoint</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;optimizer&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">load_state_dict</span><span class=\"p\">(</span><span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">])</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Load checkpoints...! </span><span class=\"si\">{checkpoint_path}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"n\">dir_path</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">):</span>\n        <span class=\"c1\"># save the model with &#39;checkpoint&#39; dictionary.</span>\n        <span class=\"n\">checkpoint_path</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">dir_path</span><span class=\"p\">,</span> <span class=\"n\">CHECKPOINT_FNAME</span><span class=\"p\">)</span>\n        <span class=\"n\">checkpoint</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;config&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;init_params&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">init_params</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;predict_helper&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict_helper</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;metrics&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">metrics</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;train_counter&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train_counter</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;vocab_texts&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"n\">v</span><span class=\"o\">.</span><span class=\"n\">to_text</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">vocabs</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()},</span>\n            <span class=\"s2\">&quot;weights&quot;</span><span class=\"p\">:</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">state_dict</span><span class=\"p\">(),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;optimizer&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">checkpoint</span><span class=\"p\">[</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;optimizer&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">state_dict</span><span class=\"p\">()</span>\n\n        <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">checkpoint</span><span class=\"p\">,</span> <span class=\"n\">checkpoint_path</span><span class=\"p\">)</span>\n\n        <span class=\"n\">train_counter</span> <span class=\"o\">=</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">train_counter</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Save </span><span class=\"si\">{train_counter.global_step}</span><span class=\"s2\"> global_step checkpoints...! </span><span class=\"si\">{checkpoint_path}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># function in function is just used to divide the namespace.</span>\n    <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">bind</span><span class=\"p\">(</span><span class=\"n\">save</span><span class=\"p\">,</span> <span class=\"n\">load</span><span class=\"p\">,</span> <span class=\"n\">infer</span><span class=\"p\">)</span></div>\n\n\n<span class=\"sd\">&quot;&quot;&quot; Notification &quot;&quot;&quot;</span>\n\n\n<div class=\"viewcode-block\" id=\"get_session_name\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.utils.get_session_name\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_session_name</span><span class=\"p\">():</span>\n    <span class=\"n\">session_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;local&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">IS_ON_NSML</span><span class=\"p\">:</span>\n        <span class=\"n\">session_name</span> <span class=\"o\">=</span> <span class=\"n\">nsml</span><span class=\"o\">.</span><span class=\"n\">SESSION_NAME</span>\n    <span class=\"k\">return</span> <span class=\"n\">session_name</span></div>\n\n\n<div class=\"viewcode-block\" id=\"send_message_to_slack\"><a class=\"viewcode-back\" href=\"../../../claf.learn.html#claf.learn.utils.send_message_to_slack\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">send_message_to_slack</span><span class=\"p\">(</span><span class=\"n\">webhook_url</span><span class=\"p\">,</span> <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">if</span> <span class=\"n\">message</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">:</span> <span class=\"n\">f</span><span class=\"s2\">&quot;{get_session_name()} session is exited.&quot;</span><span class=\"p\">}</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;attachments&quot;</span><span class=\"p\">:</span> <span class=\"p\">[{</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"n\">title</span><span class=\"p\">,</span> <span class=\"s2\">&quot;text&quot;</span><span class=\"p\">:</span> <span class=\"n\">message</span><span class=\"p\">,</span> <span class=\"s2\">&quot;color&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;#438C56&quot;</span><span class=\"p\">}]}</span>\n\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">webhook_url</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">:</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">])</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">webhook_url</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">))</span>\n    <span class=\"k\">except</span> <span class=\"ne\">Exception</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"p\">))</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/machine/base.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.machine.base &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.machine.base</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.machine.base</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">argparse</span> <span class=\"k\">import</span> <span class=\"n\">Namespace</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.namespace</span> <span class=\"k\">import</span> <span class=\"n\">NestedNamespace</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.registry</span> <span class=\"k\">import</span> <span class=\"n\">Registry</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn.experiment</span> <span class=\"k\">import</span> <span class=\"n\">Experiment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn.mode</span> <span class=\"k\">import</span> <span class=\"n\">Mode</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.machine.module</span> <span class=\"k\">import</span> <span class=\"n\">Module</span>\n\n\n<div class=\"viewcode-block\" id=\"Machine\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.base.Machine\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Machine</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Machine: Combine modules then make a NLP Machine</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        config: machine_config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">config</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">registry</span> <span class=\"o\">=</span> <span class=\"n\">Registry</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"Machine.load\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.base.Machine.load\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">load</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"Machine.load_from_config\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.base.Machine.load_from_config\">[docs]</a>    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span> <span class=\"nf\">load_from_config</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">config_path</span><span class=\"p\">):</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">config_path</span><span class=\"p\">,</span> <span class=\"s2\">&quot;r&quot;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s2\">&quot;utf-8&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">in_file</span><span class=\"p\">:</span>\n            <span class=\"n\">machine_config</span> <span class=\"o\">=</span> <span class=\"n\">NestedNamespace</span><span class=\"p\">()</span>\n            <span class=\"n\">machine_config</span><span class=\"o\">.</span><span class=\"n\">load_from_json</span><span class=\"p\">(</span><span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">in_file</span><span class=\"p\">))</span>\n\n        <span class=\"n\">machine_name</span> <span class=\"o\">=</span> <span class=\"n\">machine_config</span><span class=\"o\">.</span><span class=\"n\">name</span>\n        <span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">machine_config</span><span class=\"p\">,</span> <span class=\"n\">machine_name</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n        <span class=\"k\">return</span> <span class=\"bp\">cls</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__call__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Machine.make_module\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.base.Machine.make_module\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_module</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Make component or experiment for claf Machine&#39;s module</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            - config: module&#39;s config (claf.config.namespace.NestedNamespace)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">module_type</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">type</span>\n        <span class=\"k\">if</span> <span class=\"n\">module_type</span> <span class=\"o\">==</span> <span class=\"n\">Module</span><span class=\"o\">.</span><span class=\"n\">COMPONENT</span><span class=\"p\">:</span>\n            <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">name</span>\n            <span class=\"n\">module_config</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">module_config</span><span class=\"p\">,</span> <span class=\"n\">Namespace</span><span class=\"p\">):</span>\n                <span class=\"n\">module_config</span> <span class=\"o\">=</span> <span class=\"nb\">vars</span><span class=\"p\">(</span><span class=\"n\">module_config</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;params&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n                <span class=\"n\">module_config</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">params</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">registry</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;component:</span><span class=\"si\">{name}</span><span class=\"s2\">&quot;</span><span class=\"p\">)(</span><span class=\"o\">**</span><span class=\"n\">module_config</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">module_type</span> <span class=\"o\">==</span> <span class=\"n\">Module</span><span class=\"o\">.</span><span class=\"n\">EXPERIMENT</span><span class=\"p\">:</span>\n            <span class=\"n\">experiment_config</span> <span class=\"o\">=</span> <span class=\"n\">Namespace</span><span class=\"p\">()</span>\n            <span class=\"n\">experiment_config</span><span class=\"o\">.</span><span class=\"n\">checkpoint_path</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">checkpoint_path</span>\n            <span class=\"n\">experiment_config</span><span class=\"o\">.</span><span class=\"n\">cuda_devices</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"s2\">&quot;cuda_devices&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n            <span class=\"n\">experiment_config</span><span class=\"o\">.</span><span class=\"n\">interactive</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n            <span class=\"n\">experiment</span> <span class=\"o\">=</span> <span class=\"n\">Experiment</span><span class=\"p\">(</span><span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">PREDICT</span><span class=\"p\">,</span> <span class=\"n\">experiment_config</span><span class=\"p\">)</span>\n            <span class=\"n\">experiment</span><span class=\"o\">.</span><span class=\"n\">set_predict_mode</span><span class=\"p\">(</span><span class=\"n\">preload</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">experiment</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                <span class=\"n\">f</span><span class=\"s2\">&quot;module_type is available only [component|experiment]. not &#39;</span><span class=\"si\">{module_type}</span><span class=\"s2\">&#39;&quot;</span>\n            <span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/machine/components/retrieval/tfidf.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.machine.components.retrieval.tfidf &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../../\" src=\"../../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.machine.components.retrieval.tfidf</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.machine.components.retrieval.tfidf</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">pathlib</span> <span class=\"k\">import</span> <span class=\"n\">Path</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">gensim.corpora</span> <span class=\"k\">import</span> <span class=\"n\">Dictionary</span>\n<span class=\"kn\">from</span> <span class=\"nn\">gensim.models</span> <span class=\"k\">import</span> <span class=\"n\">TfidfModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">gensim.similarities</span> <span class=\"k\">import</span> <span class=\"n\">MatrixSimilarity</span><span class=\"p\">,</span> <span class=\"n\">SparseMatrixSimilarity</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n\n<div class=\"viewcode-block\" id=\"TFIDF\"><a class=\"viewcode-back\" href=\"../../../../../claf.machine.components.retrieval.html#claf.machine.components.TFIDF\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;component:tfidf&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">TFIDF</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    TF-IDF document retrieval model</span>\n\n<span class=\"sd\">    - Term Frequency</span>\n<span class=\"sd\">    - Inverse Document Frequency</span>\n<span class=\"sd\">    - log(tf + 1) * log((N - Nt + 0.5) / (Nt + 0.5))</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        k: the number of top k results</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">VOCAB_FNAME</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;vocab.txt&quot;</span>\n    <span class=\"n\">TFIDF_FNAME</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;tfidf.model&quot;</span>\n    <span class=\"n\">INDEX_FNAME</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;similarities.index&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">texts</span><span class=\"p\">,</span> <span class=\"n\">word_tokenizer</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">TFIDF</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">k</span> <span class=\"o\">=</span> <span class=\"n\">k</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">texts</span> <span class=\"o\">=</span> <span class=\"n\">texts</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">word_tokenizer</span>\n\n<div class=\"viewcode-block\" id=\"TFIDF.init\"><a class=\"viewcode-back\" href=\"../../../../../claf.machine.components.retrieval.html#claf.machine.components.TFIDF.init\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">init</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">corpus</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">text</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">texts</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"s2\">&quot;make corpus (Tokenize)&quot;</span><span class=\"p\">)</span>\n        <span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">Dictionary</span><span class=\"p\">(</span><span class=\"n\">corpus</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">init_model</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"TFIDF.init_model\"><a class=\"viewcode-back\" href=\"../../../../../claf.machine.components.retrieval.html#claf.machine.components.TFIDF.init_model\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">init_model</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">corpus</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">text</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">texts</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"s2\">&quot;make corpus (BoW)&quot;</span><span class=\"p\">):</span>\n            <span class=\"n\">corpus</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">parse</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">))</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">TfidfModel</span><span class=\"p\">(</span><span class=\"n\">corpus</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index</span> <span class=\"o\">=</span> <span class=\"n\">SparseMatrixSimilarity</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">[</span><span class=\"n\">corpus</span><span class=\"p\">],</span> <span class=\"n\">num_features</span><span class=\"o\">=</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"p\">))</span></div>\n\n<div class=\"viewcode-block\" id=\"TFIDF.get_closest\"><a class=\"viewcode-back\" href=\"../../../../../claf.machine.components.retrieval.html#claf.machine.components.TFIDF.get_closest\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_closest</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">query</span><span class=\"p\">):</span>\n        <span class=\"n\">query_tfidf</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">text_to_tfidf</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"o\">.</span><span class=\"n\">num_best</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">k</span>\n        <span class=\"n\">results</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">[</span><span class=\"n\">query_tfidf</span><span class=\"p\">]</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">[</span>\n            <span class=\"p\">(</span><span class=\"n\">text_index</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">texts</span><span class=\"p\">[</span><span class=\"n\">text_index</span><span class=\"p\">],</span> <span class=\"n\">score</span><span class=\"p\">)</span>  <span class=\"c1\"># return (index, text, score)</span>\n            <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">text_index</span><span class=\"p\">,</span> <span class=\"n\">score</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"n\">results</span>\n        <span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"TFIDF.parse\"><a class=\"viewcode-back\" href=\"../../../../../claf.machine.components.retrieval.html#claf.machine.components.TFIDF.parse\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">parse</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">query</span><span class=\"p\">,</span> <span class=\"n\">ngram</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">):</span>\n        <span class=\"n\">query_tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">doc2bow</span><span class=\"p\">(</span><span class=\"n\">query_tokens</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"TFIDF.text_to_tfidf\"><a class=\"viewcode-back\" href=\"../../../../../claf.machine.components.retrieval.html#claf.machine.components.TFIDF.text_to_tfidf\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">text_to_tfidf</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">query</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Create a tfidf-weighted word vector from query.</span>\n\n<span class=\"sd\">        tfidf = log(tf + 1) * log((N - Nt + 0.5) / (Nt + 0.5))</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">query_bow</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">parse</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">[</span><span class=\"n\">query_bow</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"TFIDF.save\"><a class=\"viewcode-back\" href=\"../../../../../claf.machine.components.retrieval.html#claf.machine.components.TFIDF.save\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">dir_path</span><span class=\"p\">):</span>\n        <span class=\"n\">dir_path</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"n\">dir_path</span><span class=\"p\">)</span>\n        <span class=\"n\">dir_path</span><span class=\"o\">.</span><span class=\"n\">mkdir</span><span class=\"p\">(</span><span class=\"n\">parents</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"n\">vocab_path</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">dir_path</span> <span class=\"o\">/</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">VOCAB_FNAME</span><span class=\"p\">)</span>\n        <span class=\"n\">model_path</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">dir_path</span> <span class=\"o\">/</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">TFIDF_FNAME</span><span class=\"p\">)</span>\n        <span class=\"n\">index_path</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">dir_path</span> <span class=\"o\">/</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">INDEX_FNAME</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">vocab_path</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">model_path</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">index_path</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"TFIDF.load\"><a class=\"viewcode-back\" href=\"../../../../../claf.machine.components.retrieval.html#claf.machine.components.TFIDF.load\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">load</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">dir_path</span><span class=\"p\">):</span>\n        <span class=\"n\">dir_path</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"n\">dir_path</span><span class=\"p\">)</span>\n\n        <span class=\"n\">vocab_path</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">dir_path</span> <span class=\"o\">/</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">VOCAB_FNAME</span><span class=\"p\">)</span>\n        <span class=\"n\">model_path</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">dir_path</span> <span class=\"o\">/</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">TFIDF_FNAME</span><span class=\"p\">)</span>\n        <span class=\"n\">index_path</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">dir_path</span> <span class=\"o\">/</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">INDEX_FNAME</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">Dictionary</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">vocab_path</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">TfidfModel</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">model_path</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index</span> <span class=\"o\">=</span> <span class=\"n\">SparseMatrixSimilarity</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">index_path</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/machine/module.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.machine.module &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.machine.module</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.machine.module</h1><div class=\"highlight\"><pre>\n<div class=\"viewcode-block\" id=\"Module\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.module.Module\">[docs]</a><span></span><span class=\"k\">class</span> <span class=\"nc\">Module</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot; Machine Flag class &quot;&quot;&quot;</span>\n\n    <span class=\"n\">KNOWLEDGE_BASE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;knowledge_base&quot;</span>\n    <span class=\"n\">COMPONENT</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;component&quot;</span>\n    <span class=\"n\">EXPERIMENT</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;experiment&quot;</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/machine/nlu.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.machine.nlu &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.machine.nlu</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.machine.nlu</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span><span class=\"p\">,</span> <span class=\"n\">DataHandler</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.machine.base</span> <span class=\"k\">import</span> <span class=\"n\">Machine</span>\n\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"NLU\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.nlu.NLU\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;machine:nlu&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">NLU</span><span class=\"p\">(</span><span class=\"n\">Machine</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Natural Language Understanding Machine</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        config: machine_config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">NLU</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span> <span class=\"o\">=</span> <span class=\"n\">DataHandler</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">MACHINE</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;nlu&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"NLU.load\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.nlu.NLU.load\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">load</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># NLU</span>\n        <span class=\"c1\"># - Intent Classification Experiment</span>\n        <span class=\"c1\"># - Slot Filling Experiment</span>\n\n        <span class=\"n\">nlu_config</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">nlu</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ic_experiment</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">make_module</span><span class=\"p\">(</span><span class=\"n\">nlu_config</span><span class=\"o\">.</span><span class=\"n\">intent</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sf_experiment</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">make_module</span><span class=\"p\">(</span><span class=\"n\">nlu_config</span><span class=\"o\">.</span><span class=\"n\">slots</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Ready ..! </span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__call__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">utterance</span><span class=\"p\">):</span>\n\n        <span class=\"n\">nlu_result</span> <span class=\"o\">=</span> <span class=\"nb\">dict</span><span class=\"p\">()</span>\n\n        <span class=\"n\">intent_info</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">intent_classification</span><span class=\"p\">(</span><span class=\"n\">utterance</span><span class=\"p\">)</span>\n        <span class=\"n\">nlu_result</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span><span class=\"s2\">&quot;intent&quot;</span><span class=\"p\">:</span> <span class=\"n\">intent_info</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">]})</span>\n\n        <span class=\"n\">slots_info</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">slot_filling</span><span class=\"p\">(</span><span class=\"n\">utterance</span><span class=\"p\">)</span>\n        <span class=\"n\">nlu_result</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span><span class=\"s2\">&quot;slots&quot;</span><span class=\"p\">:</span> <span class=\"n\">slots_info</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_dict&quot;</span><span class=\"p\">]})</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">nlu_result</span>\n\n<div class=\"viewcode-block\" id=\"NLU.intent_classification\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.nlu.NLU.intent_classification\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">intent_classification</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">utterance</span><span class=\"p\">):</span>\n        <span class=\"n\">raw_feature</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">:</span> <span class=\"n\">utterance</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ic_experiment</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">raw_feature</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"NLU.slot_filling\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.nlu.NLU.slot_filling\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">slot_filling</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">utterance</span><span class=\"p\">):</span>\n        <span class=\"n\">raw_feature</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">:</span> <span class=\"n\">utterance</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sf_experiment</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">raw_feature</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/machine/open_qa.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.machine.open_qa &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.machine.open_qa</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.machine.open_qa</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.factory.tokens</span> <span class=\"k\">import</span> <span class=\"n\">make_all_tokenizers</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.config.utils</span> <span class=\"k\">import</span> <span class=\"n\">convert_config2dict</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span><span class=\"p\">,</span> <span class=\"n\">DataHandler</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.machine.base</span> <span class=\"k\">import</span> <span class=\"n\">Machine</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.machine.knowlege_base.docs</span> <span class=\"k\">import</span> <span class=\"n\">read_wiki_articles</span>\n\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"OpenQA\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.open_qa.OpenQA\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;machine:open_qa&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">OpenQA</span><span class=\"p\">(</span><span class=\"n\">Machine</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Open-Domain Question Answer Machine (DrQA)</span>\n\n<span class=\"sd\">    DrQA is a system for reading comprehension applied to open-domain question answering.</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        config: machine_config</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">OpenQA</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span> <span class=\"o\">=</span> <span class=\"n\">DataHandler</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">MACHINE</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;open_qa&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"OpenQA.load\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.open_qa.OpenQA.load\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">load</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Tokenizers</span>\n        <span class=\"n\">tokenizers_config</span> <span class=\"o\">=</span> <span class=\"n\">convert_config2dict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">tokenizers</span><span class=\"p\">)</span>\n        <span class=\"n\">tokenizers</span> <span class=\"o\">=</span> <span class=\"n\">make_all_tokenizers</span><span class=\"p\">(</span><span class=\"n\">tokenizers_config</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Knowledge Base</span>\n        <span class=\"c1\"># - Wiki</span>\n        <span class=\"n\">knowledge_base_config</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">knowledge_base</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">docs</span><span class=\"p\">,</span> <span class=\"n\">doc_name</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_load_knowledge_base</span><span class=\"p\">(</span><span class=\"n\">knowledge_base_config</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Reasoning</span>\n        <span class=\"c1\"># - Document Retrieval</span>\n        <span class=\"c1\"># - Reading Comprehension Experiment</span>\n        <span class=\"n\">reasoning_config</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">reasoning</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">document_retrieval</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_load_document_retrieval</span><span class=\"p\">(</span>\n            <span class=\"n\">reasoning_config</span><span class=\"o\">.</span><span class=\"n\">document_retrieval</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span> <span class=\"n\">basename</span><span class=\"o\">=</span><span class=\"n\">doc_name</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">rc_experiment</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">make_module</span><span class=\"p\">(</span><span class=\"n\">reasoning_config</span><span class=\"o\">.</span><span class=\"n\">reading_comprehension</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Ready ..! </span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_load_knowledge_base</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"n\">docs</span> <span class=\"o\">=</span> <span class=\"n\">read_wiki_articles</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">wiki</span><span class=\"p\">)</span>  <span class=\"c1\"># TODO: fix read whole wiki</span>\n        <span class=\"n\">doc_name</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;{os.path.basename(config.wiki)}-{len(docs)}-articles&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">docs</span><span class=\"p\">,</span> <span class=\"n\">doc_name</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_load_document_retrieval</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"n\">word_tokenizer</span><span class=\"p\">,</span> <span class=\"n\">basename</span><span class=\"o\">=</span><span class=\"s2\">&quot;docs&quot;</span><span class=\"p\">):</span>\n        <span class=\"n\">dir_path</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;doc-</span><span class=\"si\">{config.type}</span><span class=\"s2\">-</span><span class=\"si\">{config.name}</span><span class=\"s2\">-</span><span class=\"si\">{word_tokenizer.cache_name}</span><span class=\"s2\">&quot;</span>\n        <span class=\"n\">doc_retrieval_path</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">dir_path</span><span class=\"p\">,</span> <span class=\"n\">basename</span><span class=\"p\">)</span>\n\n        <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;texts&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"n\">doc</span><span class=\"o\">.</span><span class=\"n\">title</span> <span class=\"k\">for</span> <span class=\"n\">doc</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">docs</span><span class=\"p\">],</span>\n            <span class=\"s2\">&quot;word_tokenizer&quot;</span><span class=\"p\">:</span> <span class=\"n\">word_tokenizer</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">document_retrieval</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">make_module</span><span class=\"p\">(</span><span class=\"n\">config</span><span class=\"p\">)</span>\n\n        <span class=\"n\">doc_retrieval_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">convert_cache_path</span><span class=\"p\">(</span><span class=\"n\">doc_retrieval_path</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">doc_retrieval_path</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n            <span class=\"n\">document_retrieval</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">doc_retrieval_path</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Start Document Retrieval Indexing ...&quot;</span><span class=\"p\">)</span>\n            <span class=\"n\">document_retrieval</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"p\">()</span>\n            <span class=\"n\">document_retrieval</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">doc_retrieval_path</span><span class=\"p\">)</span>  <span class=\"c1\"># Save Cache</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Completed!&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">document_retrieval</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__call__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">):</span>\n        <span class=\"n\">result_docs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">search_documents</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;-&quot;</span> <span class=\"o\">*</span> <span class=\"mi\">50</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;Doc Scores:&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">doc</span> <span class=\"ow\">in</span> <span class=\"n\">result_docs</span><span class=\"p\">:</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot; - </span><span class=\"si\">{doc[1]}</span><span class=\"s2\"> : </span><span class=\"si\">{doc[2]}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;-&quot;</span> <span class=\"o\">*</span> <span class=\"mi\">50</span><span class=\"p\">)</span>\n\n        <span class=\"n\">passages</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">result_doc</span> <span class=\"ow\">in</span> <span class=\"n\">result_docs</span><span class=\"p\">:</span>\n            <span class=\"n\">doc_index</span> <span class=\"o\">=</span> <span class=\"n\">result_doc</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n            <span class=\"n\">doc</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">docs</span><span class=\"p\">[</span><span class=\"n\">doc_index</span><span class=\"p\">]</span>\n            <span class=\"n\">passages</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">doc</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>\n\n        <span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">passage</span> <span class=\"ow\">in</span> <span class=\"n\">passages</span><span class=\"p\">:</span>\n            <span class=\"n\">answer_text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">machine_reading</span><span class=\"p\">(</span><span class=\"n\">passage</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">)</span>\n            <span class=\"n\">answers</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">answer_text</span><span class=\"p\">)</span>\n\n        <span class=\"n\">ranked_answers</span> <span class=\"o\">=</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">answers</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;score&quot;</span><span class=\"p\">],</span> <span class=\"n\">reverse</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">ranked_answers</span>\n\n<div class=\"viewcode-block\" id=\"OpenQA.search_documents\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.open_qa.OpenQA.search_documents\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">search_documents</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">document_retrieval</span><span class=\"o\">.</span><span class=\"n\">get_closest</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"OpenQA.machine_reading\"><a class=\"viewcode-back\" href=\"../../../claf.machine.html#claf.machine.open_qa.OpenQA.machine_reading\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">machine_reading</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">):</span>\n        <span class=\"n\">raw_feature</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">:</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">:</span> <span class=\"n\">question</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">rc_experiment</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">raw_feature</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/metric/classification.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.metric.classification &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.metric.classification</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.metric.classification</h1><div class=\"highlight\"><pre>\n<span></span>\n<div class=\"viewcode-block\" id=\"recall\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.classification.recall\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">recall</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"n\">key</span><span class=\"p\">:</span> <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">TPR</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"k\">if</span> <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">TPR</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;None&quot;</span> <span class=\"k\">else</span> <span class=\"mf\">0.</span> <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">TPR</span><span class=\"p\">}</span></div>\n\n\n<div class=\"viewcode-block\" id=\"precision\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.classification.precision\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">precision</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"n\">key</span><span class=\"p\">:</span> <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">PPV</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"k\">if</span> <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">PPV</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;None&quot;</span> <span class=\"k\">else</span> <span class=\"mf\">0.</span> <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">PPV</span><span class=\"p\">}</span></div>\n\n\n<div class=\"viewcode-block\" id=\"f1\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.classification.f1\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">f1</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"n\">key</span><span class=\"p\">:</span> <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">F1</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"k\">if</span> <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">F1</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;None&quot;</span> <span class=\"k\">else</span> <span class=\"mf\">0.</span> <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">F1</span><span class=\"p\">}</span></div>\n\n\n<div class=\"viewcode-block\" id=\"macro_recall\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.classification.macro_recall\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">macro_recall</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">recall</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">())</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">classes</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"macro_precision\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.classification.macro_precision\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">macro_precision</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">precision</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">())</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">classes</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"macro_f1\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.classification.macro_f1\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">macro_f1</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">f1</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">())</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">classes</span><span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/metric/squad_v1_official.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.metric.squad_v1_official &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.metric.squad_v1_official</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.metric.squad_v1_official</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"sd\">&quot;&quot;&quot; Official evaluation script for v1.1 of the SQuAD dataset. &quot;&quot;&quot;</span>\n<span class=\"kn\">from</span> <span class=\"nn\">__future__</span> <span class=\"k\">import</span> <span class=\"n\">print_function</span>\n<span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"k\">import</span> <span class=\"n\">Counter</span>\n<span class=\"kn\">import</span> <span class=\"nn\">string</span>\n<span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"kn\">import</span> <span class=\"nn\">argparse</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">sys</span>\n\n\n<div class=\"viewcode-block\" id=\"normalize_answer\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v1_official.normalize_answer\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;Lower text and remove punctuation, articles and extra whitespace.&quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">remove_articles</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">sub</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;\\b(a|an|the)\\b&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot; &quot;</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">white_space_fix</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot; &quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">())</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">remove_punc</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"n\">exclude</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">punctuation</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">ch</span> <span class=\"k\">for</span> <span class=\"n\">ch</span> <span class=\"ow\">in</span> <span class=\"n\">text</span> <span class=\"k\">if</span> <span class=\"n\">ch</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">exclude</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">lower</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">text</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">white_space_fix</span><span class=\"p\">(</span><span class=\"n\">remove_articles</span><span class=\"p\">(</span><span class=\"n\">remove_punc</span><span class=\"p\">(</span><span class=\"n\">lower</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">))))</span></div>\n\n\n<div class=\"viewcode-block\" id=\"f1_score\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v1_official.f1_score\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">f1_score</span><span class=\"p\">(</span><span class=\"n\">prediction</span><span class=\"p\">,</span> <span class=\"n\">ground_truth</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">prediction_tokens</span> <span class=\"o\">=</span> <span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">prediction</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()</span>\n    <span class=\"n\">ground_truth_tokens</span> <span class=\"o\">=</span> <span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">ground_truth</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()</span>\n    <span class=\"n\">common</span> <span class=\"o\">=</span> <span class=\"n\">Counter</span><span class=\"p\">(</span><span class=\"n\">prediction_tokens</span><span class=\"p\">)</span> <span class=\"o\">&amp;</span> <span class=\"n\">Counter</span><span class=\"p\">(</span><span class=\"n\">ground_truth_tokens</span><span class=\"p\">)</span>\n    <span class=\"n\">num_same</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">common</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">())</span>\n    <span class=\"k\">if</span> <span class=\"n\">num_same</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n    <span class=\"n\">precision</span> <span class=\"o\">=</span> <span class=\"mf\">1.0</span> <span class=\"o\">*</span> <span class=\"n\">num_same</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">prediction_tokens</span><span class=\"p\">)</span>\n    <span class=\"n\">recall</span> <span class=\"o\">=</span> <span class=\"mf\">1.0</span> <span class=\"o\">*</span> <span class=\"n\">num_same</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">ground_truth_tokens</span><span class=\"p\">)</span>\n    <span class=\"n\">f1</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">precision</span> <span class=\"o\">*</span> <span class=\"n\">recall</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"n\">precision</span> <span class=\"o\">+</span> <span class=\"n\">recall</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">f1</span></div>\n\n\n<div class=\"viewcode-block\" id=\"exact_match_score\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v1_official.exact_match_score\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">exact_match_score</span><span class=\"p\">(</span><span class=\"n\">prediction</span><span class=\"p\">,</span> <span class=\"n\">ground_truth</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">return</span> <span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">prediction</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">ground_truth</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"metric_max_over_ground_truths\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v1_official.metric_max_over_ground_truths\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">metric_max_over_ground_truths</span><span class=\"p\">(</span><span class=\"n\">metric_fn</span><span class=\"p\">,</span> <span class=\"n\">prediction</span><span class=\"p\">,</span> <span class=\"n\">ground_truths</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">scores_for_ground_truths</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">ground_truth</span> <span class=\"ow\">in</span> <span class=\"n\">ground_truths</span><span class=\"p\">:</span>\n        <span class=\"n\">score</span> <span class=\"o\">=</span> <span class=\"n\">metric_fn</span><span class=\"p\">(</span><span class=\"n\">prediction</span><span class=\"p\">,</span> <span class=\"n\">ground_truth</span><span class=\"p\">)</span>\n        <span class=\"n\">scores_for_ground_truths</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">score</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"n\">scores_for_ground_truths</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"evaluate\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v1_official.evaluate\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">evaluate</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n    <span class=\"n\">f1</span> <span class=\"o\">=</span> <span class=\"n\">exact_match</span> <span class=\"o\">=</span> <span class=\"n\">total</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">for</span> <span class=\"n\">article</span> <span class=\"ow\">in</span> <span class=\"n\">dataset</span><span class=\"p\">:</span>\n        <span class=\"k\">for</span> <span class=\"n\">paragraph</span> <span class=\"ow\">in</span> <span class=\"n\">article</span><span class=\"p\">[</span><span class=\"s2\">&quot;paragraphs&quot;</span><span class=\"p\">]:</span>\n            <span class=\"k\">for</span> <span class=\"n\">qa</span> <span class=\"ow\">in</span> <span class=\"n\">paragraph</span><span class=\"p\">[</span><span class=\"s2\">&quot;qas&quot;</span><span class=\"p\">]:</span>\n                <span class=\"n\">total</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n                <span class=\"k\">if</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">predictions</span><span class=\"p\">:</span>\n                    <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Unanswered question &quot;</span> <span class=\"o\">+</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; will receive score 0.&quot;</span>\n                    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">message</span><span class=\"p\">,</span> <span class=\"n\">file</span><span class=\"o\">=</span><span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span><span class=\"p\">)</span>\n                    <span class=\"k\">continue</span>\n                <span class=\"n\">ground_truths</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">],</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">]))</span>\n                <span class=\"n\">prediction</span> <span class=\"o\">=</span> <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]]</span>\n                <span class=\"n\">exact_match</span> <span class=\"o\">+=</span> <span class=\"n\">metric_max_over_ground_truths</span><span class=\"p\">(</span>\n                    <span class=\"n\">exact_match_score</span><span class=\"p\">,</span> <span class=\"n\">prediction</span><span class=\"p\">,</span> <span class=\"n\">ground_truths</span>\n                <span class=\"p\">)</span>\n                <span class=\"n\">f1</span> <span class=\"o\">+=</span> <span class=\"n\">metric_max_over_ground_truths</span><span class=\"p\">(</span><span class=\"n\">f1_score</span><span class=\"p\">,</span> <span class=\"n\">prediction</span><span class=\"p\">,</span> <span class=\"n\">ground_truths</span><span class=\"p\">)</span>\n\n    <span class=\"n\">exact_match</span> <span class=\"o\">=</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"n\">exact_match</span> <span class=\"o\">/</span> <span class=\"n\">total</span>\n    <span class=\"n\">f1</span> <span class=\"o\">=</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"n\">f1</span> <span class=\"o\">/</span> <span class=\"n\">total</span>\n\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;em&quot;</span><span class=\"p\">:</span> <span class=\"n\">exact_match</span><span class=\"p\">,</span> <span class=\"s2\">&quot;f1&quot;</span><span class=\"p\">:</span> <span class=\"n\">f1</span><span class=\"p\">}</span></div>\n\n\n<span class=\"k\">if</span> <span class=\"vm\">__name__</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;__main__&quot;</span><span class=\"p\">:</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">expected_version</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;1.1&quot;</span>\n    <span class=\"n\">parser</span> <span class=\"o\">=</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">ArgumentParser</span><span class=\"p\">(</span><span class=\"n\">description</span><span class=\"o\">=</span><span class=\"s2\">&quot;Evaluation for SQuAD &quot;</span> <span class=\"o\">+</span> <span class=\"n\">expected_version</span><span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;dataset_file&quot;</span><span class=\"p\">,</span> <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;Dataset file&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;prediction_file&quot;</span><span class=\"p\">,</span> <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;Prediction File&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">args</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">parse_args</span><span class=\"p\">()</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"o\">.</span><span class=\"n\">dataset_file</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">dataset_file</span><span class=\"p\">:</span>\n        <span class=\"n\">dataset_json</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">dataset_file</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">dataset_json</span><span class=\"p\">[</span><span class=\"s2\">&quot;version&quot;</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"n\">expected_version</span><span class=\"p\">:</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;Evaluation expects v-&quot;</span>\n                <span class=\"o\">+</span> <span class=\"n\">expected_version</span>\n                <span class=\"o\">+</span> <span class=\"s2\">&quot;, but got dataset with v-&quot;</span>\n                <span class=\"o\">+</span> <span class=\"n\">dataset_json</span><span class=\"p\">[</span><span class=\"s2\">&quot;version&quot;</span><span class=\"p\">],</span>\n                <span class=\"n\">file</span><span class=\"o\">=</span><span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"n\">dataset</span> <span class=\"o\">=</span> <span class=\"n\">dataset_json</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"o\">.</span><span class=\"n\">prediction_file</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">prediction_file</span><span class=\"p\">:</span>\n        <span class=\"n\">predictions</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">prediction_file</span><span class=\"p\">)</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">evaluate</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">)))</span>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/metric/squad_v2_official.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.metric.squad_v2_official &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.metric.squad_v2_official</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.metric.squad_v2_official</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"sd\">&quot;&quot;&quot;Official evaluation script for SQuAD version 2.0.</span>\n\n<span class=\"sd\">In addition to basic functionality, we also compute additional statistics and</span>\n<span class=\"sd\">plot precision-recall curves if an additional na_prob.json file is provided.</span>\n<span class=\"sd\">This file is expected to map question ID&#39;s to the model&#39;s predicted probability</span>\n<span class=\"sd\">that a question is unanswerable.</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">argparse</span>\n<span class=\"kn\">import</span> <span class=\"nn\">collections</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"kn\">import</span> <span class=\"nn\">string</span>\n<span class=\"kn\">import</span> <span class=\"nn\">sys</span>\n\n<span class=\"n\">OPTS</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n\n<div class=\"viewcode-block\" id=\"parse_args\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.parse_args\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">parse_args</span><span class=\"p\">():</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">parser</span> <span class=\"o\">=</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">ArgumentParser</span><span class=\"p\">(</span><span class=\"s2\">&quot;Official evaluation script for SQuAD version 2.0.&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;data_file&quot;</span><span class=\"p\">,</span> <span class=\"n\">metavar</span><span class=\"o\">=</span><span class=\"s2\">&quot;data.json&quot;</span><span class=\"p\">,</span> <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;Input data JSON file.&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;pred_file&quot;</span><span class=\"p\">,</span> <span class=\"n\">metavar</span><span class=\"o\">=</span><span class=\"s2\">&quot;pred.json&quot;</span><span class=\"p\">,</span> <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;Model predictions.&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--out-file&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;-o&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">metavar</span><span class=\"o\">=</span><span class=\"s2\">&quot;eval.json&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;Write accuracy metrics to file (default is stdout).&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--na-prob-file&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;-n&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">metavar</span><span class=\"o\">=</span><span class=\"s2\">&quot;na_prob.json&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;Model estimates of probability of no answer.&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--na-prob-thresh&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;-t&quot;</span><span class=\"p\">,</span>\n        <span class=\"nb\">type</span><span class=\"o\">=</span><span class=\"nb\">float</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mf\">1.0</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s1\">&#39;Predict &quot;&quot; if no-answer probability exceeds this (default = 1.0).&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--out-image-dir&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;-p&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">metavar</span><span class=\"o\">=</span><span class=\"s2\">&quot;out_images&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;Save precision-recall curves to directory.&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;--verbose&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;-v&quot;</span><span class=\"p\">,</span> <span class=\"n\">action</span><span class=\"o\">=</span><span class=\"s2\">&quot;store_true&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n        <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">print_help</span><span class=\"p\">()</span>\n        <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">exit</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">parse_args</span><span class=\"p\">()</span></div>\n\n\n<div class=\"viewcode-block\" id=\"make_qid_to_has_ans\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.make_qid_to_has_ans\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">make_qid_to_has_ans</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">qid_to_has_ans</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"k\">for</span> <span class=\"n\">article</span> <span class=\"ow\">in</span> <span class=\"n\">dataset</span><span class=\"p\">:</span>\n        <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">article</span><span class=\"p\">[</span><span class=\"s2\">&quot;paragraphs&quot;</span><span class=\"p\">]:</span>\n            <span class=\"k\">for</span> <span class=\"n\">qa</span> <span class=\"ow\">in</span> <span class=\"n\">p</span><span class=\"p\">[</span><span class=\"s2\">&quot;qas&quot;</span><span class=\"p\">]:</span>\n                <span class=\"n\">qid_to_has_ans</span><span class=\"p\">[</span><span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]]</span> <span class=\"o\">=</span> <span class=\"nb\">bool</span><span class=\"p\">(</span><span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">])</span>\n    <span class=\"k\">return</span> <span class=\"n\">qid_to_has_ans</span></div>\n\n\n<div class=\"viewcode-block\" id=\"normalize_answer\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.normalize_answer\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;Lower text and remove punctuation, articles and extra whitespace.&quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">remove_articles</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"n\">regex</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">compile</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;\\b(a|an|the)\\b&quot;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">UNICODE</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">sub</span><span class=\"p\">(</span><span class=\"n\">regex</span><span class=\"p\">,</span> <span class=\"s2\">&quot; &quot;</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">white_space_fix</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot; &quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">())</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">remove_punc</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"n\">exclude</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">punctuation</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">ch</span> <span class=\"k\">for</span> <span class=\"n\">ch</span> <span class=\"ow\">in</span> <span class=\"n\">text</span> <span class=\"k\">if</span> <span class=\"n\">ch</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">exclude</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">lower</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">text</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">white_space_fix</span><span class=\"p\">(</span><span class=\"n\">remove_articles</span><span class=\"p\">(</span><span class=\"n\">remove_punc</span><span class=\"p\">(</span><span class=\"n\">lower</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">))))</span></div>\n\n\n<div class=\"viewcode-block\" id=\"get_tokens\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.get_tokens\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_tokens</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">s</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"p\">[]</span>\n    <span class=\"k\">return</span> <span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()</span></div>\n\n\n<div class=\"viewcode-block\" id=\"compute_exact\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.compute_exact\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">compute_exact</span><span class=\"p\">(</span><span class=\"n\">a_gold</span><span class=\"p\">,</span> <span class=\"n\">a_pred</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">return</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">a_gold</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">a_pred</span><span class=\"p\">))</span></div>\n\n\n<div class=\"viewcode-block\" id=\"compute_f1\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.compute_f1\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">compute_f1</span><span class=\"p\">(</span><span class=\"n\">a_gold</span><span class=\"p\">,</span> <span class=\"n\">a_pred</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">gold_toks</span> <span class=\"o\">=</span> <span class=\"n\">get_tokens</span><span class=\"p\">(</span><span class=\"n\">a_gold</span><span class=\"p\">)</span>\n    <span class=\"n\">pred_toks</span> <span class=\"o\">=</span> <span class=\"n\">get_tokens</span><span class=\"p\">(</span><span class=\"n\">a_pred</span><span class=\"p\">)</span>\n    <span class=\"n\">common</span> <span class=\"o\">=</span> <span class=\"n\">collections</span><span class=\"o\">.</span><span class=\"n\">Counter</span><span class=\"p\">(</span><span class=\"n\">gold_toks</span><span class=\"p\">)</span> <span class=\"o\">&amp;</span> <span class=\"n\">collections</span><span class=\"o\">.</span><span class=\"n\">Counter</span><span class=\"p\">(</span><span class=\"n\">pred_toks</span><span class=\"p\">)</span>\n    <span class=\"n\">num_same</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">common</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">())</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">gold_toks</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span> <span class=\"ow\">or</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pred_toks</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"c1\"># If either is no-answer, then F1 is 1 if they agree, 0 otherwise</span>\n        <span class=\"k\">return</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">gold_toks</span> <span class=\"o\">==</span> <span class=\"n\">pred_toks</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">num_same</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n    <span class=\"n\">precision</span> <span class=\"o\">=</span> <span class=\"mf\">1.0</span> <span class=\"o\">*</span> <span class=\"n\">num_same</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pred_toks</span><span class=\"p\">)</span>\n    <span class=\"n\">recall</span> <span class=\"o\">=</span> <span class=\"mf\">1.0</span> <span class=\"o\">*</span> <span class=\"n\">num_same</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">gold_toks</span><span class=\"p\">)</span>\n    <span class=\"n\">f1</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">precision</span> <span class=\"o\">*</span> <span class=\"n\">recall</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"n\">precision</span> <span class=\"o\">+</span> <span class=\"n\">recall</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">f1</span></div>\n\n\n<div class=\"viewcode-block\" id=\"get_raw_scores\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.get_raw_scores\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_raw_scores</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">exact_scores</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"n\">f1_scores</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"k\">for</span> <span class=\"n\">article</span> <span class=\"ow\">in</span> <span class=\"n\">dataset</span><span class=\"p\">:</span>\n        <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">article</span><span class=\"p\">[</span><span class=\"s2\">&quot;paragraphs&quot;</span><span class=\"p\">]:</span>\n            <span class=\"k\">for</span> <span class=\"n\">qa</span> <span class=\"ow\">in</span> <span class=\"n\">p</span><span class=\"p\">[</span><span class=\"s2\">&quot;qas&quot;</span><span class=\"p\">]:</span>\n                <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">]</span>\n                <span class=\"n\">gold_answers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">a</span> <span class=\"ow\">in</span> <span class=\"n\">qa</span><span class=\"p\">[</span><span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">]</span> <span class=\"k\">if</span> <span class=\"n\">normalize_answer</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">])]</span>\n                <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">gold_answers</span><span class=\"p\">:</span>\n                    <span class=\"c1\"># For unanswerable questions, only correct answer is empty</span>\n                    <span class=\"c1\"># string</span>\n                    <span class=\"n\">gold_answers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">]</span>\n                <span class=\"k\">if</span> <span class=\"n\">qid</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">preds</span><span class=\"p\">:</span>\n                    <span class=\"c1\"># print(&#39;Missing prediction for %s&#39; % qid)</span>\n                    <span class=\"k\">continue</span>\n                <span class=\"n\">a_pred</span> <span class=\"o\">=</span> <span class=\"n\">preds</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span>\n                <span class=\"c1\"># Take max over all gold answers</span>\n                <span class=\"n\">exact_scores</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"n\">compute_exact</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">a_pred</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">a</span> <span class=\"ow\">in</span> <span class=\"n\">gold_answers</span><span class=\"p\">)</span>\n                <span class=\"n\">f1_scores</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"n\">compute_f1</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">a_pred</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">a</span> <span class=\"ow\">in</span> <span class=\"n\">gold_answers</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">exact_scores</span><span class=\"p\">,</span> <span class=\"n\">f1_scores</span></div>\n\n\n<div class=\"viewcode-block\" id=\"apply_no_ans_threshold\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.apply_no_ans_threshold\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">apply_no_ans_threshold</span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">,</span> <span class=\"n\">na_prob_thresh</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">new_scores</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"k\">for</span> <span class=\"n\">qid</span><span class=\"p\">,</span> <span class=\"n\">s</span> <span class=\"ow\">in</span> <span class=\"n\">scores</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n        <span class=\"n\">pred_na</span> <span class=\"o\">=</span> <span class=\"n\">na_probs</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">&gt;</span> <span class=\"n\">na_prob_thresh</span>\n        <span class=\"k\">if</span> <span class=\"n\">pred_na</span><span class=\"p\">:</span>\n            <span class=\"n\">new_scores</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"ow\">not</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">])</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">new_scores</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">s</span>\n    <span class=\"k\">return</span> <span class=\"n\">new_scores</span></div>\n\n\n<div class=\"viewcode-block\" id=\"make_eval_dict\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.make_eval_dict\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">make_eval_dict</span><span class=\"p\">(</span><span class=\"n\">exact_scores</span><span class=\"p\">,</span> <span class=\"n\">f1_scores</span><span class=\"p\">,</span> <span class=\"n\">qid_list</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">qid_list</span><span class=\"p\">:</span>\n        <span class=\"n\">total</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">exact_scores</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">collections</span><span class=\"o\">.</span><span class=\"n\">OrderedDict</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span>\n                <span class=\"p\">(</span><span class=\"s2\">&quot;exact&quot;</span><span class=\"p\">,</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">exact_scores</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">())</span> <span class=\"o\">/</span> <span class=\"n\">total</span><span class=\"p\">),</span>\n                <span class=\"p\">(</span><span class=\"s2\">&quot;f1&quot;</span><span class=\"p\">,</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">f1_scores</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">())</span> <span class=\"o\">/</span> <span class=\"n\">total</span><span class=\"p\">),</span>\n                <span class=\"p\">(</span><span class=\"s2\">&quot;total&quot;</span><span class=\"p\">,</span> <span class=\"n\">total</span><span class=\"p\">),</span>\n            <span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">total</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">qid_list</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">collections</span><span class=\"o\">.</span><span class=\"n\">OrderedDict</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span>\n                <span class=\"p\">(</span><span class=\"s2\">&quot;exact&quot;</span><span class=\"p\">,</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">exact_scores</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">qid_list</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"n\">total</span><span class=\"p\">),</span>\n                <span class=\"p\">(</span><span class=\"s2\">&quot;f1&quot;</span><span class=\"p\">,</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">f1_scores</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">qid_list</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"n\">total</span><span class=\"p\">),</span>\n                <span class=\"p\">(</span><span class=\"s2\">&quot;total&quot;</span><span class=\"p\">,</span> <span class=\"n\">total</span><span class=\"p\">),</span>\n            <span class=\"p\">]</span>\n        <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"merge_eval\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.merge_eval\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">merge_eval</span><span class=\"p\">(</span><span class=\"n\">main_eval</span><span class=\"p\">,</span> <span class=\"n\">new_eval</span><span class=\"p\">,</span> <span class=\"n\">prefix</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">new_eval</span><span class=\"p\">:</span>\n        <span class=\"n\">main_eval</span><span class=\"p\">[</span><span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\">_</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">prefix</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"n\">new_eval</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span></div>\n\n\n<div class=\"viewcode-block\" id=\"plot_pr_curve\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.plot_pr_curve\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">plot_pr_curve</span><span class=\"p\">(</span><span class=\"n\">precisions</span><span class=\"p\">,</span> <span class=\"n\">recalls</span><span class=\"p\">,</span> <span class=\"n\">out_image</span><span class=\"p\">,</span> <span class=\"n\">title</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">step</span><span class=\"p\">(</span><span class=\"n\">recalls</span><span class=\"p\">,</span> <span class=\"n\">precisions</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s2\">&quot;b&quot;</span><span class=\"p\">,</span> <span class=\"n\">alpha</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">where</span><span class=\"o\">=</span><span class=\"s2\">&quot;post&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">fill_between</span><span class=\"p\">(</span><span class=\"n\">recalls</span><span class=\"p\">,</span> <span class=\"n\">precisions</span><span class=\"p\">,</span> <span class=\"n\">step</span><span class=\"o\">=</span><span class=\"s2\">&quot;post&quot;</span><span class=\"p\">,</span> <span class=\"n\">alpha</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s2\">&quot;b&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">xlabel</span><span class=\"p\">(</span><span class=\"s2\">&quot;Recall&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">ylabel</span><span class=\"p\">(</span><span class=\"s2\">&quot;Precision&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">xlim</span><span class=\"p\">([</span><span class=\"mf\">0.0</span><span class=\"p\">,</span> <span class=\"mf\">1.05</span><span class=\"p\">])</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">ylim</span><span class=\"p\">([</span><span class=\"mf\">0.0</span><span class=\"p\">,</span> <span class=\"mf\">1.05</span><span class=\"p\">])</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">savefig</span><span class=\"p\">(</span><span class=\"n\">out_image</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">clf</span><span class=\"p\">()</span></div>\n\n\n<div class=\"viewcode-block\" id=\"make_precision_recall_eval\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.make_precision_recall_eval\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">make_precision_recall_eval</span><span class=\"p\">(</span>\n    <span class=\"n\">scores</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">num_true_pos</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">,</span> <span class=\"n\">out_image</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"kc\">None</span>\n<span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">qid_list</span> <span class=\"o\">=</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"n\">na_probs</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">])</span>\n    <span class=\"n\">true_pos</span> <span class=\"o\">=</span> <span class=\"mf\">0.0</span>\n    <span class=\"n\">cur_p</span> <span class=\"o\">=</span> <span class=\"mf\">1.0</span>\n    <span class=\"n\">cur_r</span> <span class=\"o\">=</span> <span class=\"mf\">0.0</span>\n    <span class=\"n\">precisions</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mf\">1.0</span><span class=\"p\">]</span>\n    <span class=\"n\">recalls</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mf\">0.0</span><span class=\"p\">]</span>\n    <span class=\"n\">avg_prec</span> <span class=\"o\">=</span> <span class=\"mf\">0.0</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">qid</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">qid_list</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]:</span>\n            <span class=\"n\">true_pos</span> <span class=\"o\">+=</span> <span class=\"n\">scores</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span>\n        <span class=\"n\">cur_p</span> <span class=\"o\">=</span> <span class=\"n\">true_pos</span> <span class=\"o\">/</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">i</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">cur_r</span> <span class=\"o\">=</span> <span class=\"n\">true_pos</span> <span class=\"o\">/</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">num_true_pos</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">qid_list</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span> <span class=\"ow\">or</span> <span class=\"n\">na_probs</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"n\">na_probs</span><span class=\"p\">[</span><span class=\"n\">qid_list</span><span class=\"p\">[</span><span class=\"n\">i</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]]:</span>\n            <span class=\"c1\"># i.e., if we can put a threshold after this point</span>\n            <span class=\"n\">avg_prec</span> <span class=\"o\">+=</span> <span class=\"n\">cur_p</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">cur_r</span> <span class=\"o\">-</span> <span class=\"n\">recalls</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n            <span class=\"n\">precisions</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">cur_p</span><span class=\"p\">)</span>\n            <span class=\"n\">recalls</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">cur_r</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">out_image</span><span class=\"p\">:</span>\n        <span class=\"n\">plot_pr_curve</span><span class=\"p\">(</span><span class=\"n\">precisions</span><span class=\"p\">,</span> <span class=\"n\">recalls</span><span class=\"p\">,</span> <span class=\"n\">out_image</span><span class=\"p\">,</span> <span class=\"n\">title</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;ap&quot;</span><span class=\"p\">:</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"n\">avg_prec</span><span class=\"p\">}</span></div>\n\n\n<div class=\"viewcode-block\" id=\"run_precision_recall_analysis\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.run_precision_recall_analysis\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">run_precision_recall_analysis</span><span class=\"p\">(</span>\n    <span class=\"n\">main_eval</span><span class=\"p\">,</span> <span class=\"n\">exact_raw</span><span class=\"p\">,</span> <span class=\"n\">f1_raw</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">,</span> <span class=\"n\">out_image_dir</span>\n<span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">if</span> <span class=\"n\">out_image_dir</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">(</span><span class=\"n\">out_image_dir</span><span class=\"p\">):</span>\n        <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">makedirs</span><span class=\"p\">(</span><span class=\"n\">out_image_dir</span><span class=\"p\">)</span>\n    <span class=\"n\">num_true_pos</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"k\">for</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">qid_to_has_ans</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">v</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">num_true_pos</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span>\n    <span class=\"n\">pr_exact</span> <span class=\"o\">=</span> <span class=\"n\">make_precision_recall_eval</span><span class=\"p\">(</span>\n        <span class=\"n\">exact_raw</span><span class=\"p\">,</span>\n        <span class=\"n\">na_probs</span><span class=\"p\">,</span>\n        <span class=\"n\">num_true_pos</span><span class=\"p\">,</span>\n        <span class=\"n\">qid_to_has_ans</span><span class=\"p\">,</span>\n        <span class=\"n\">out_image</span><span class=\"o\">=</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">out_image_dir</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pr_exact.png&quot;</span><span class=\"p\">),</span>\n        <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Precision-Recall curve for Exact Match score&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">pr_f1</span> <span class=\"o\">=</span> <span class=\"n\">make_precision_recall_eval</span><span class=\"p\">(</span>\n        <span class=\"n\">f1_raw</span><span class=\"p\">,</span>\n        <span class=\"n\">na_probs</span><span class=\"p\">,</span>\n        <span class=\"n\">num_true_pos</span><span class=\"p\">,</span>\n        <span class=\"n\">qid_to_has_ans</span><span class=\"p\">,</span>\n        <span class=\"n\">out_image</span><span class=\"o\">=</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">out_image_dir</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pr_f1.png&quot;</span><span class=\"p\">),</span>\n        <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Precision-Recall curve for F1 score&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">oracle_scores</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">qid_to_has_ans</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()}</span>\n    <span class=\"n\">pr_oracle</span> <span class=\"o\">=</span> <span class=\"n\">make_precision_recall_eval</span><span class=\"p\">(</span>\n        <span class=\"n\">oracle_scores</span><span class=\"p\">,</span>\n        <span class=\"n\">na_probs</span><span class=\"p\">,</span>\n        <span class=\"n\">num_true_pos</span><span class=\"p\">,</span>\n        <span class=\"n\">qid_to_has_ans</span><span class=\"p\">,</span>\n        <span class=\"n\">out_image</span><span class=\"o\">=</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">out_image_dir</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pr_oracle.png&quot;</span><span class=\"p\">),</span>\n        <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s2\">&quot;Oracle Precision-Recall curve (binary task of HasAns vs. NoAns)&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">merge_eval</span><span class=\"p\">(</span><span class=\"n\">main_eval</span><span class=\"p\">,</span> <span class=\"n\">pr_exact</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pr_exact&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">merge_eval</span><span class=\"p\">(</span><span class=\"n\">main_eval</span><span class=\"p\">,</span> <span class=\"n\">pr_f1</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pr_f1&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">merge_eval</span><span class=\"p\">(</span><span class=\"n\">main_eval</span><span class=\"p\">,</span> <span class=\"n\">pr_oracle</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pr_oracle&quot;</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"histogram_na_prob\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.histogram_na_prob\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">histogram_na_prob</span><span class=\"p\">(</span><span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_list</span><span class=\"p\">,</span> <span class=\"n\">image_dir</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">qid_list</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span>\n    <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">na_probs</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">qid_list</span><span class=\"p\">]</span>\n    <span class=\"n\">weights</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">ones_like</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">))</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">hist</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">weights</span><span class=\"o\">=</span><span class=\"n\">weights</span><span class=\"p\">,</span> <span class=\"n\">bins</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"nb\">range</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"mf\">0.0</span><span class=\"p\">,</span> <span class=\"mf\">1.0</span><span class=\"p\">))</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">xlabel</span><span class=\"p\">(</span><span class=\"s2\">&quot;Model probability of no-answer&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">ylabel</span><span class=\"p\">(</span><span class=\"s2\">&quot;Proportion of dataset&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">(</span><span class=\"s2\">&quot;Histogram of no-answer probability: </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">name</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">savefig</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">image_dir</span><span class=\"p\">,</span> <span class=\"s2\">&quot;na_prob_hist_</span><span class=\"si\">%s</span><span class=\"s2\">.png&quot;</span> <span class=\"o\">%</span> <span class=\"n\">name</span><span class=\"p\">))</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">clf</span><span class=\"p\">()</span></div>\n\n\n<div class=\"viewcode-block\" id=\"find_best_thresh\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.find_best_thresh\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">find_best_thresh</span><span class=\"p\">(</span><span class=\"n\">preds</span><span class=\"p\">,</span> <span class=\"n\">scores</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">num_no_ans</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">qid_to_has_ans</span> <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">])</span>\n    <span class=\"n\">cur_score</span> <span class=\"o\">=</span> <span class=\"n\">num_no_ans</span>\n    <span class=\"n\">best_score</span> <span class=\"o\">=</span> <span class=\"n\">cur_score</span>\n    <span class=\"n\">best_thresh</span> <span class=\"o\">=</span> <span class=\"mf\">0.0</span>\n    <span class=\"n\">qid_list</span> <span class=\"o\">=</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"n\">na_probs</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">])</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">qid</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">qid_list</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">qid</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">scores</span><span class=\"p\">:</span>\n            <span class=\"k\">continue</span>\n        <span class=\"k\">if</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]:</span>\n            <span class=\"n\">diff</span> <span class=\"o\">=</span> <span class=\"n\">scores</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">preds</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]:</span>\n                <span class=\"n\">diff</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">diff</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">cur_score</span> <span class=\"o\">+=</span> <span class=\"n\">diff</span>\n        <span class=\"k\">if</span> <span class=\"n\">cur_score</span> <span class=\"o\">&gt;</span> <span class=\"n\">best_score</span><span class=\"p\">:</span>\n            <span class=\"n\">best_score</span> <span class=\"o\">=</span> <span class=\"n\">cur_score</span>\n            <span class=\"n\">best_thresh</span> <span class=\"o\">=</span> <span class=\"n\">na_probs</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"n\">best_score</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"p\">),</span> <span class=\"n\">best_thresh</span></div>\n\n\n<div class=\"viewcode-block\" id=\"find_all_best_thresh\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.find_all_best_thresh\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">find_all_best_thresh</span><span class=\"p\">(</span>\n    <span class=\"n\">main_eval</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">,</span> <span class=\"n\">exact_raw</span><span class=\"p\">,</span> <span class=\"n\">f1_raw</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span>\n<span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">best_exact</span><span class=\"p\">,</span> <span class=\"n\">exact_thresh</span> <span class=\"o\">=</span> <span class=\"n\">find_best_thresh</span><span class=\"p\">(</span><span class=\"n\">preds</span><span class=\"p\">,</span> <span class=\"n\">exact_raw</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">)</span>\n    <span class=\"n\">best_f1</span><span class=\"p\">,</span> <span class=\"n\">f1_thresh</span> <span class=\"o\">=</span> <span class=\"n\">find_best_thresh</span><span class=\"p\">(</span><span class=\"n\">preds</span><span class=\"p\">,</span> <span class=\"n\">f1_raw</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">)</span>\n    <span class=\"n\">main_eval</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_exact&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">best_exact</span>\n    <span class=\"n\">main_eval</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_exact_thresh&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">exact_thresh</span>\n    <span class=\"n\">main_eval</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_f1&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">best_f1</span>\n    <span class=\"n\">main_eval</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_f1_thresh&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">f1_thresh</span></div>\n\n\n<div class=\"viewcode-block\" id=\"evaluate\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.evaluate\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">evaluate</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">,</span> <span class=\"n\">na_prob_thresh</span><span class=\"o\">=</span><span class=\"mf\">1.0</span><span class=\"p\">):</span>\n    <span class=\"n\">qid_to_has_ans</span> <span class=\"o\">=</span> <span class=\"n\">make_qid_to_has_ans</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">)</span>  <span class=\"c1\"># maps qid to True/False</span>\n    <span class=\"n\">has_ans_qids</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">k</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">qid_to_has_ans</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">v</span><span class=\"p\">]</span>\n    <span class=\"n\">no_ans_qids</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">k</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">qid_to_has_ans</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">v</span><span class=\"p\">]</span>\n\n    <span class=\"n\">exact_raw</span><span class=\"p\">,</span> <span class=\"n\">f1_raw</span> <span class=\"o\">=</span> <span class=\"n\">get_raw_scores</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">)</span>\n\n    <span class=\"n\">exact_thresh</span> <span class=\"o\">=</span> <span class=\"n\">apply_no_ans_threshold</span><span class=\"p\">(</span><span class=\"n\">exact_raw</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">,</span> <span class=\"n\">na_prob_thresh</span><span class=\"p\">)</span>\n    <span class=\"n\">f1_thresh</span> <span class=\"o\">=</span> <span class=\"n\">apply_no_ans_threshold</span><span class=\"p\">(</span><span class=\"n\">f1_raw</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">,</span> <span class=\"n\">na_prob_thresh</span><span class=\"p\">)</span>\n\n    <span class=\"n\">out_eval</span> <span class=\"o\">=</span> <span class=\"n\">make_eval_dict</span><span class=\"p\">(</span><span class=\"n\">exact_thresh</span><span class=\"p\">,</span> <span class=\"n\">f1_thresh</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">has_ans_qids</span><span class=\"p\">:</span>\n        <span class=\"n\">has_ans_eval</span> <span class=\"o\">=</span> <span class=\"n\">make_eval_dict</span><span class=\"p\">(</span><span class=\"n\">exact_thresh</span><span class=\"p\">,</span> <span class=\"n\">f1_thresh</span><span class=\"p\">,</span> <span class=\"n\">qid_list</span><span class=\"o\">=</span><span class=\"n\">has_ans_qids</span><span class=\"p\">)</span>\n        <span class=\"n\">merge_eval</span><span class=\"p\">(</span><span class=\"n\">out_eval</span><span class=\"p\">,</span> <span class=\"n\">has_ans_eval</span><span class=\"p\">,</span> <span class=\"s2\">&quot;HasAns&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">no_ans_qids</span><span class=\"p\">:</span>\n        <span class=\"n\">no_ans_eval</span> <span class=\"o\">=</span> <span class=\"n\">make_eval_dict</span><span class=\"p\">(</span><span class=\"n\">exact_thresh</span><span class=\"p\">,</span> <span class=\"n\">f1_thresh</span><span class=\"p\">,</span> <span class=\"n\">qid_list</span><span class=\"o\">=</span><span class=\"n\">no_ans_qids</span><span class=\"p\">)</span>\n        <span class=\"n\">merge_eval</span><span class=\"p\">(</span><span class=\"n\">out_eval</span><span class=\"p\">,</span> <span class=\"n\">no_ans_eval</span><span class=\"p\">,</span> <span class=\"s2\">&quot;NoAns&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">find_all_best_thresh</span><span class=\"p\">(</span><span class=\"n\">out_eval</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">,</span> <span class=\"n\">exact_raw</span><span class=\"p\">,</span> <span class=\"n\">f1_raw</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">out_eval</span></div>\n\n\n<div class=\"viewcode-block\" id=\"main\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.squad_v2_official.main\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">main</span><span class=\"p\">():</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">data_file</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">dataset_json</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n        <span class=\"n\">dataset</span> <span class=\"o\">=</span> <span class=\"n\">dataset_json</span><span class=\"p\">[</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">]</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">pred_file</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">preds</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">na_prob_file</span><span class=\"p\">:</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">na_prob_file</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n            <span class=\"n\">na_probs</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">na_probs</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"mf\">0.0</span> <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">preds</span><span class=\"p\">}</span>\n    <span class=\"n\">qid_to_has_ans</span> <span class=\"o\">=</span> <span class=\"n\">make_qid_to_has_ans</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">)</span>  <span class=\"c1\"># maps qid to True/False</span>\n    <span class=\"n\">has_ans_qids</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">k</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">qid_to_has_ans</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">v</span><span class=\"p\">]</span>\n    <span class=\"n\">no_ans_qids</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">k</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">qid_to_has_ans</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">v</span><span class=\"p\">]</span>\n    <span class=\"n\">exact_raw</span><span class=\"p\">,</span> <span class=\"n\">f1_raw</span> <span class=\"o\">=</span> <span class=\"n\">get_raw_scores</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">)</span>\n    <span class=\"n\">exact_thresh</span> <span class=\"o\">=</span> <span class=\"n\">apply_no_ans_threshold</span><span class=\"p\">(</span><span class=\"n\">exact_raw</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">,</span> <span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">na_prob_thresh</span><span class=\"p\">)</span>\n    <span class=\"n\">f1_thresh</span> <span class=\"o\">=</span> <span class=\"n\">apply_no_ans_threshold</span><span class=\"p\">(</span><span class=\"n\">f1_raw</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">,</span> <span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">na_prob_thresh</span><span class=\"p\">)</span>\n    <span class=\"n\">out_eval</span> <span class=\"o\">=</span> <span class=\"n\">make_eval_dict</span><span class=\"p\">(</span><span class=\"n\">exact_thresh</span><span class=\"p\">,</span> <span class=\"n\">f1_thresh</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">has_ans_qids</span><span class=\"p\">:</span>\n        <span class=\"n\">has_ans_eval</span> <span class=\"o\">=</span> <span class=\"n\">make_eval_dict</span><span class=\"p\">(</span><span class=\"n\">exact_thresh</span><span class=\"p\">,</span> <span class=\"n\">f1_thresh</span><span class=\"p\">,</span> <span class=\"n\">qid_list</span><span class=\"o\">=</span><span class=\"n\">has_ans_qids</span><span class=\"p\">)</span>\n        <span class=\"n\">merge_eval</span><span class=\"p\">(</span><span class=\"n\">out_eval</span><span class=\"p\">,</span> <span class=\"n\">has_ans_eval</span><span class=\"p\">,</span> <span class=\"s2\">&quot;HasAns&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">no_ans_qids</span><span class=\"p\">:</span>\n        <span class=\"n\">no_ans_eval</span> <span class=\"o\">=</span> <span class=\"n\">make_eval_dict</span><span class=\"p\">(</span><span class=\"n\">exact_thresh</span><span class=\"p\">,</span> <span class=\"n\">f1_thresh</span><span class=\"p\">,</span> <span class=\"n\">qid_list</span><span class=\"o\">=</span><span class=\"n\">no_ans_qids</span><span class=\"p\">)</span>\n        <span class=\"n\">merge_eval</span><span class=\"p\">(</span><span class=\"n\">out_eval</span><span class=\"p\">,</span> <span class=\"n\">no_ans_eval</span><span class=\"p\">,</span> <span class=\"s2\">&quot;NoAns&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">na_prob_file</span><span class=\"p\">:</span>\n        <span class=\"n\">find_all_best_thresh</span><span class=\"p\">(</span><span class=\"n\">out_eval</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">,</span> <span class=\"n\">exact_raw</span><span class=\"p\">,</span> <span class=\"n\">f1_raw</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">na_prob_file</span> <span class=\"ow\">and</span> <span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">out_image_dir</span><span class=\"p\">:</span>\n        <span class=\"n\">run_precision_recall_analysis</span><span class=\"p\">(</span>\n            <span class=\"n\">out_eval</span><span class=\"p\">,</span> <span class=\"n\">exact_raw</span><span class=\"p\">,</span> <span class=\"n\">f1_raw</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">qid_to_has_ans</span><span class=\"p\">,</span> <span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">out_image_dir</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">histogram_na_prob</span><span class=\"p\">(</span><span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">has_ans_qids</span><span class=\"p\">,</span> <span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">out_image_dir</span><span class=\"p\">,</span> <span class=\"s2\">&quot;hasAns&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">histogram_na_prob</span><span class=\"p\">(</span><span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">no_ans_qids</span><span class=\"p\">,</span> <span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">out_image_dir</span><span class=\"p\">,</span> <span class=\"s2\">&quot;noAns&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">out_file</span><span class=\"p\">:</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">out_file</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n            <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dump</span><span class=\"p\">(</span><span class=\"n\">out_eval</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">out_eval</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">))</span></div>\n\n\n<span class=\"k\">if</span> <span class=\"vm\">__name__</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;__main__&quot;</span><span class=\"p\">:</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">OPTS</span> <span class=\"o\">=</span> <span class=\"n\">parse_args</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">OPTS</span><span class=\"o\">.</span><span class=\"n\">out_image_dir</span><span class=\"p\">:</span>\n        <span class=\"kn\">import</span> <span class=\"nn\">matplotlib</span>\n\n        <span class=\"n\">matplotlib</span><span class=\"o\">.</span><span class=\"n\">use</span><span class=\"p\">(</span><span class=\"s2\">&quot;Agg&quot;</span><span class=\"p\">)</span>\n        <span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n    <span class=\"n\">main</span><span class=\"p\">()</span>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/metric/wikisql_official.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.metric.wikisql_official &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.metric.wikisql_official</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.metric.wikisql_official</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"sd\">&quot;&quot;&quot; Official evaluation script for WikiSQL dataset. &quot;&quot;&quot;</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">argparse</span> <span class=\"k\">import</span> <span class=\"n\">ArgumentParser</span>\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric.wikisql_lib.dbengine</span> <span class=\"k\">import</span> <span class=\"n\">DBEngine</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric.wikisql_lib.query</span> <span class=\"k\">import</span> <span class=\"n\">Query</span>\n\n\n<div class=\"viewcode-block\" id=\"count_lines\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.wikisql_official.count_lines\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">count_lines</span><span class=\"p\">(</span><span class=\"n\">fname</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">fname</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">f</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"evaluate\"><a class=\"viewcode-back\" href=\"../../../claf.metric.html#claf.metric.wikisql_official.evaluate\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">evaluate</span><span class=\"p\">(</span><span class=\"n\">labels</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">db_path</span><span class=\"p\">,</span> <span class=\"n\">ordered</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot; labels and predictions: dictionary {data_uid: sql_data, ...} &quot;&quot;&quot;</span>\n    <span class=\"n\">engine</span> <span class=\"o\">=</span> <span class=\"n\">DBEngine</span><span class=\"p\">(</span><span class=\"n\">db_path</span><span class=\"p\">)</span>\n\n    <span class=\"n\">exact_match</span><span class=\"p\">,</span> <span class=\"n\">grades</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">idx</span><span class=\"p\">,</span> <span class=\"n\">data_uid</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"n\">eg</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"n\">data_uid</span><span class=\"p\">]</span>\n        <span class=\"n\">ep</span> <span class=\"o\">=</span> <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">data_uid</span><span class=\"p\">]</span>\n\n        <span class=\"n\">qg</span> <span class=\"o\">=</span> <span class=\"n\">eg</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql_query&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">gold</span> <span class=\"o\">=</span> <span class=\"n\">eg</span><span class=\"p\">[</span><span class=\"s2\">&quot;execution_result&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">pred</span> <span class=\"o\">=</span> <span class=\"n\">ep</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;error&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n        <span class=\"n\">qp</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">ep</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;error&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">qp</span> <span class=\"o\">=</span> <span class=\"n\">Query</span><span class=\"o\">.</span><span class=\"n\">from_dict</span><span class=\"p\">(</span><span class=\"n\">ep</span><span class=\"p\">[</span><span class=\"s2\">&quot;query&quot;</span><span class=\"p\">],</span> <span class=\"n\">ordered</span><span class=\"o\">=</span><span class=\"n\">ordered</span><span class=\"p\">)</span>\n                <span class=\"n\">pred</span> <span class=\"o\">=</span> <span class=\"n\">engine</span><span class=\"o\">.</span><span class=\"n\">execute_query</span><span class=\"p\">(</span><span class=\"n\">ep</span><span class=\"p\">[</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">],</span> <span class=\"n\">qp</span><span class=\"p\">,</span> <span class=\"n\">lower</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"ne\">Exception</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n                <span class=\"n\">pred</span> <span class=\"o\">=</span> <span class=\"nb\">repr</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"p\">)</span>\n\n        <span class=\"n\">correct</span> <span class=\"o\">=</span> <span class=\"n\">pred</span> <span class=\"o\">==</span> <span class=\"n\">gold</span>\n        <span class=\"n\">match</span> <span class=\"o\">=</span> <span class=\"n\">qp</span> <span class=\"o\">==</span> <span class=\"n\">qg</span>\n        <span class=\"n\">grades</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">correct</span><span class=\"p\">)</span>\n        <span class=\"n\">exact_match</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">match</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ex_accuracy&quot;</span><span class=\"p\">:</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">grades</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">grades</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mf\">100.0</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;lf_accuracy&quot;</span><span class=\"p\">:</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">exact_match</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">exact_match</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mf\">100.0</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span></div>\n\n\n<span class=\"k\">if</span> <span class=\"vm\">__name__</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;__main__&quot;</span><span class=\"p\">:</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">parser</span> <span class=\"o\">=</span> <span class=\"n\">ArgumentParser</span><span class=\"p\">()</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;source_file&quot;</span><span class=\"p\">,</span> <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;source file for the prediction&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;db_file&quot;</span><span class=\"p\">,</span> <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;source database for the prediction&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span><span class=\"s2\">&quot;pred_file&quot;</span><span class=\"p\">,</span> <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;predictions by the model&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;--ordered&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">action</span><span class=\"o\">=</span><span class=\"s2\">&quot;store_true&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">help</span><span class=\"o\">=</span><span class=\"s2\">&quot;whether the exact match should consider the order of conditions&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">args</span> <span class=\"o\">=</span> <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">parse_args</span><span class=\"p\">()</span>\n\n    <span class=\"n\">engine</span> <span class=\"o\">=</span> <span class=\"n\">DBEngine</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"o\">.</span><span class=\"n\">db_file</span><span class=\"p\">)</span>\n    <span class=\"n\">exact_match</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"o\">.</span><span class=\"n\">source_file</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fs</span><span class=\"p\">,</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"o\">.</span><span class=\"n\">pred_file</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fp</span><span class=\"p\">:</span>\n        <span class=\"n\">grades</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">ls</span><span class=\"p\">,</span> <span class=\"n\">lp</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">fs</span><span class=\"p\">,</span> <span class=\"n\">fp</span><span class=\"p\">),</span> <span class=\"n\">total</span><span class=\"o\">=</span><span class=\"n\">count_lines</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"o\">.</span><span class=\"n\">source_file</span><span class=\"p\">)):</span>\n            <span class=\"n\">eg</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">ls</span><span class=\"p\">)</span>\n            <span class=\"n\">ep</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">lp</span><span class=\"p\">)</span>\n            <span class=\"n\">qg</span> <span class=\"o\">=</span> <span class=\"n\">Query</span><span class=\"o\">.</span><span class=\"n\">from_dict</span><span class=\"p\">(</span><span class=\"n\">eg</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql&quot;</span><span class=\"p\">],</span> <span class=\"n\">ordered</span><span class=\"o\">=</span><span class=\"n\">args</span><span class=\"o\">.</span><span class=\"n\">ordered</span><span class=\"p\">)</span>\n            <span class=\"n\">gold</span> <span class=\"o\">=</span> <span class=\"n\">engine</span><span class=\"o\">.</span><span class=\"n\">execute_query</span><span class=\"p\">(</span><span class=\"n\">eg</span><span class=\"p\">[</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">],</span> <span class=\"n\">qg</span><span class=\"p\">,</span> <span class=\"n\">lower</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n            <span class=\"n\">pred</span> <span class=\"o\">=</span> <span class=\"n\">ep</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;error&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n            <span class=\"n\">qp</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">ep</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;error&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">):</span>\n                <span class=\"k\">try</span><span class=\"p\">:</span>\n                    <span class=\"n\">qp</span> <span class=\"o\">=</span> <span class=\"n\">Query</span><span class=\"o\">.</span><span class=\"n\">from_dict</span><span class=\"p\">(</span><span class=\"n\">ep</span><span class=\"p\">[</span><span class=\"s2\">&quot;query&quot;</span><span class=\"p\">],</span> <span class=\"n\">ordered</span><span class=\"o\">=</span><span class=\"n\">args</span><span class=\"o\">.</span><span class=\"n\">ordered</span><span class=\"p\">)</span>\n                    <span class=\"n\">pred</span> <span class=\"o\">=</span> <span class=\"n\">engine</span><span class=\"o\">.</span><span class=\"n\">execute_query</span><span class=\"p\">(</span><span class=\"n\">eg</span><span class=\"p\">[</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">],</span> <span class=\"n\">qp</span><span class=\"p\">,</span> <span class=\"n\">lower</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n                <span class=\"k\">except</span> <span class=\"ne\">Exception</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n                    <span class=\"n\">pred</span> <span class=\"o\">=</span> <span class=\"nb\">repr</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"p\">)</span>\n            <span class=\"n\">correct</span> <span class=\"o\">=</span> <span class=\"n\">pred</span> <span class=\"o\">==</span> <span class=\"n\">gold</span>\n            <span class=\"n\">match</span> <span class=\"o\">=</span> <span class=\"n\">qp</span> <span class=\"o\">==</span> <span class=\"n\">qg</span>\n            <span class=\"n\">grades</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">correct</span><span class=\"p\">)</span>\n            <span class=\"n\">exact_match</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">match</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span>\n            <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span>\n                <span class=\"p\">{</span>\n                    <span class=\"s2\">&quot;ex_accuracy&quot;</span><span class=\"p\">:</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">grades</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">grades</span><span class=\"p\">),</span>\n                    <span class=\"s2\">&quot;lf_accuracy&quot;</span><span class=\"p\">:</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">exact_match</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">exact_match</span><span class=\"p\">),</span>\n                <span class=\"p\">},</span>\n                <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/base.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.base &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.base</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.base</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pathlib</span> <span class=\"k\">import</span> <span class=\"n\">Path</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n\n<div class=\"viewcode-block\" id=\"ModelBase\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.base.ModelBase\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ModelBase</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Model Base Class</span>\n\n<span class=\"sd\">    Args:</span>\n<span class=\"sd\">        token_embedder: (claf.tokens.token_embedder.base) TokenEmbedder</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">ModelBase</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"ModelBase.forward\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.base.ModelBase.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"ModelBase.make_metrics\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.base.ModelBase.make_metrics\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"ModelBase.make_predictions\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.base.ModelBase.make_predictions\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_predictions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        for Metrics</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"ModelBase.predict\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.base.ModelBase.predict\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Inference</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"ModelBase.print_examples\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.base.ModelBase.print_examples\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">print_examples</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Print evaluation examples</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"ModelBase.write_predictions\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.base.ModelBase.write_predictions\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">write_predictions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">is_dict</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;train&quot;</span> <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;valid&quot;</span>\n\n        <span class=\"n\">pred_dir</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log_dir</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;predictions&quot;</span>\n        <span class=\"n\">pred_dir</span><span class=\"o\">.</span><span class=\"n\">mkdir</span><span class=\"p\">(</span><span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">file_path</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">file_path</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;predictions-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-{self._train_counter.get_display()}.json&quot;</span>\n\n        <span class=\"n\">pred_path</span> <span class=\"o\">=</span> <span class=\"n\">pred_dir</span> <span class=\"o\">/</span> <span class=\"n\">file_path</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">pred_path</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">out_file</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">is_dict</span><span class=\"p\">:</span>\n                <span class=\"n\">out_file</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">))</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">out_file</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"ModelBase.is_ready\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.base.ModelBase.is_ready\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">is_ready</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">properties</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_config</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log_dir</span><span class=\"p\">,</span>\n            <span class=\"c1\"># self._dataset,  It&#39;s set at _run_epoch()</span>\n            <span class=\"c1\"># self._metrics,  It&#39;s set at save()</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_train_counter</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_vocabs</span>\n        <span class=\"p\">]</span>\n\n        <span class=\"k\">return</span> <span class=\"nb\">all</span><span class=\"p\">([</span><span class=\"n\">p</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span> <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">properties</span><span class=\"p\">])</span></div>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">config</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_config</span>\n\n    <span class=\"nd\">@config</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">config</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_config</span> <span class=\"o\">=</span> <span class=\"n\">config</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">log_dir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log_dir</span>\n\n    <span class=\"nd\">@log_dir</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">log_dir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">log_dir</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log_dir</span> <span class=\"o\">=</span> <span class=\"n\">log_dir</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">dataset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span>\n\n    <span class=\"nd\">@dataset</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">dataset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">dataset</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span> <span class=\"o\">=</span> <span class=\"n\">dataset</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_metrics</span>\n\n    <span class=\"nd\">@metrics</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">metrics</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_metrics</span> <span class=\"o\">=</span> <span class=\"n\">metrics</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">train_counter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_train_counter</span>\n\n    <span class=\"nd\">@train_counter</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">train_counter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">train_counter</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_train_counter</span> <span class=\"o\">=</span> <span class=\"n\">train_counter</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">vocabs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_vocabs</span>\n\n    <span class=\"nd\">@vocabs</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">vocabs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">vocabs</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_vocabs</span> <span class=\"o\">=</span> <span class=\"n\">vocabs</span></div>\n\n\n<div class=\"viewcode-block\" id=\"ModelWithTokenEmbedder\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.base.ModelWithTokenEmbedder\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ModelWithTokenEmbedder</span><span class=\"p\">(</span><span class=\"n\">ModelBase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_embedder</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">ModelWithTokenEmbedder</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span>\n        <span class=\"k\">if</span> <span class=\"n\">token_embedder</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_vocabs</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span><span class=\"o\">.</span><span class=\"n\">vocabs</span></div>\n\n\n<div class=\"viewcode-block\" id=\"ModelWithoutTokenEmbedder\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.base.ModelWithoutTokenEmbedder\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ModelWithoutTokenEmbedder</span><span class=\"p\">(</span><span class=\"n\">ModelBase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">ModelWithoutTokenEmbedder</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_makers</span> <span class=\"o\">=</span> <span class=\"n\">token_makers</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_vocabs</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">token_name</span><span class=\"p\">:</span> <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span> <span class=\"ow\">in</span> <span class=\"n\">token_makers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span>\n        <span class=\"p\">}</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/cls_utils.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.cls_utils &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.cls_utils</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.cls_utils</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">csv</span>\n<span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"k\">import</span> <span class=\"n\">defaultdict</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">seqeval.metrics.sequence_labeling</span> <span class=\"k\">import</span> <span class=\"n\">get_entities</span>\n\n\n<span class=\"c1\"># pycm</span>\n<div class=\"viewcode-block\" id=\"write_confusion_matrix_to_csv\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.cls_utils.write_confusion_matrix_to_csv\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">write_confusion_matrix_to_csv</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">pycm_obj</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">file_path</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;.csv&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">indicator</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;target/predict&quot;</span>\n\n        <span class=\"n\">fieldnames</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">indicator</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">classes</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"s2\">&quot;FN&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">writer</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">DictWriter</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">fieldnames</span><span class=\"o\">=</span><span class=\"n\">fieldnames</span><span class=\"p\">)</span>\n        <span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"n\">writeheader</span><span class=\"p\">()</span>\n\n        <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">matrix</span><span class=\"p\">)</span>\n        <span class=\"n\">FN</span> <span class=\"o\">=</span> <span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">FN</span><span class=\"p\">)</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">row_idx</span> <span class=\"ow\">in</span> <span class=\"n\">fieldnames</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]:</span>  <span class=\"c1\"># remove indicator and FN</span>\n            <span class=\"n\">row</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">indicator</span><span class=\"p\">:</span> <span class=\"n\">row_idx</span><span class=\"p\">}</span>\n            <span class=\"n\">row</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span>\n                <span class=\"p\">{</span>\n                    <span class=\"n\">col_idx</span><span class=\"p\">:</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">row_idx</span><span class=\"p\">][</span><span class=\"n\">col_idx</span><span class=\"p\">]</span>\n                    <span class=\"k\">for</span> <span class=\"n\">col_idx</span> <span class=\"ow\">in</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">row_idx</span><span class=\"p\">]</span>\n                    <span class=\"k\">if</span> <span class=\"n\">col_idx</span> <span class=\"ow\">in</span> <span class=\"n\">fieldnames</span>\n                <span class=\"p\">}</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">row</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span><span class=\"s2\">&quot;FN&quot;</span><span class=\"p\">:</span> <span class=\"n\">FN</span><span class=\"p\">[</span><span class=\"n\">row_idx</span><span class=\"p\">]})</span>\n            <span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"n\">writerow</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">)</span>\n\n        <span class=\"n\">row</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">indicator</span><span class=\"p\">:</span> <span class=\"s2\">&quot;FP&quot;</span><span class=\"p\">}</span>\n        <span class=\"n\">row</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">FP</span><span class=\"p\">))</span>\n        <span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"n\">writerow</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\"># seqeval</span>\n<div class=\"viewcode-block\" id=\"get_tag_dict\"><a class=\"viewcode-back\" href=\"../../../claf.model.html#claf.model.cls_utils.get_tag_dict\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_tag_dict</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">,</span> <span class=\"n\">tag_texts</span><span class=\"p\">):</span>\n    <span class=\"n\">words</span> <span class=\"o\">=</span> <span class=\"n\">sequence</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()</span>\n    <span class=\"n\">entities</span> <span class=\"o\">=</span> <span class=\"n\">get_entities</span><span class=\"p\">(</span><span class=\"n\">tag_texts</span><span class=\"p\">)</span>\n\n    <span class=\"n\">slots</span> <span class=\"o\">=</span> <span class=\"n\">defaultdict</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">slot</span><span class=\"p\">,</span> <span class=\"n\">start_idx</span><span class=\"p\">,</span> <span class=\"n\">end_idx</span> <span class=\"ow\">in</span> <span class=\"n\">entities</span><span class=\"p\">:</span>\n        <span class=\"n\">slots</span><span class=\"p\">[</span><span class=\"n\">slot</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"s2\">&quot; &quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">words</span><span class=\"p\">[</span><span class=\"n\">start_idx</span> <span class=\"p\">:</span> <span class=\"n\">end_idx</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]))</span>\n    <span class=\"k\">return</span> <span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">slots</span><span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/reading_comprehension/bert.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.reading_comprehension.bert &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.reading_comprehension.bert</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.reading_comprehension.bert</h1><div class=\"highlight\"><pre>\n<span></span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">BertForQuestionAnswering</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithoutTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.reading_comprehension.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SQuADv1ForBert</span>\n\n\n<div class=\"viewcode-block\" id=\"BertForQA\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.BertForQA\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:bert_for_qa&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">BertForQA</span><span class=\"p\">(</span><span class=\"n\">SQuADv1ForBert</span><span class=\"p\">,</span> <span class=\"n\">ModelWithoutTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Document Reader Model. `Span Detector`</span>\n\n<span class=\"sd\">    Implementation of model presented in</span>\n<span class=\"sd\">    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1810.04805)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;QATokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lang_code: Dataset language code [en|ko]</span>\n<span class=\"sd\">        pretrained_model_name: the name of a pre-trained model</span>\n<span class=\"sd\">        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">lang_code</span><span class=\"o\">=</span><span class=\"s2\">&quot;en&quot;</span><span class=\"p\">,</span> <span class=\"n\">pretrained_model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BertForQA</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_pytorch_transformers</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>  <span class=\"c1\"># for optimizer&#39;s model parameters</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">answer_maxlen</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">BertForQuestionAnswering</span><span class=\"o\">.</span><span class=\"n\">from_pretrained</span><span class=\"p\">(</span>\n            <span class=\"n\">pretrained_model_name</span><span class=\"p\">,</span> <span class=\"n\">cache_dir</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">ROOT</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"BertForQA.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.BertForQA.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">                {&quot;feature_name1&quot;: {</span>\n<span class=\"sd\">                     &quot;token_name1&quot;: tensor,</span>\n<span class=\"sd\">                     &quot;toekn_name2&quot;: tensor},</span>\n<span class=\"sd\">                 &quot;feature_name2&quot;: ...}</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">                {&quot;label_name1&quot;: tensor,</span>\n<span class=\"sd\">                 &quot;label_name2&quot;: tensor}</span>\n<span class=\"sd\">                 Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - start_logits: representing unnormalized log probabilities of the span start position.</span>\n<span class=\"sd\">            - end_logits: representing unnormalized log probabilities of the span end position.</span>\n<span class=\"sd\">            - best_span: the string from the original passage that the model thinks is the best answer to the question.</span>\n<span class=\"sd\">            - data_idx: the question id, mapping with answer</span>\n<span class=\"sd\">            - loss: A scalar loss to be optimised.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">bert_inputs</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">token_type_ids</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">attention_mask</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">bert_inputs</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n        <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">(</span>\n            <span class=\"n\">bert_inputs</span><span class=\"p\">,</span> <span class=\"n\">token_type_ids</span><span class=\"o\">=</span><span class=\"n\">token_type_ids</span><span class=\"p\">,</span> <span class=\"n\">attention_mask</span><span class=\"o\">=</span><span class=\"n\">attention_mask</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_best_span</span><span class=\"p\">(</span>\n                <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># If we are on multi-GPU, split add a dimension</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">answer_start_idx</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">answer_start_idx</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">answer_end_idx</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">answer_end_idx</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"c1\"># sometimes the start/end positions are outside our model inputs, we ignore these terms</span>\n            <span class=\"n\">ignored_index</span> <span class=\"o\">=</span> <span class=\"n\">span_start_logits</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n            <span class=\"n\">answer_start_idx</span><span class=\"o\">.</span><span class=\"n\">clamp_</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">ignored_index</span><span class=\"p\">)</span>\n            <span class=\"n\">answer_end_idx</span><span class=\"o\">.</span><span class=\"n\">clamp_</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">ignored_index</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">(</span><span class=\"n\">ignore_index</span><span class=\"o\">=</span><span class=\"n\">ignored_index</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_start_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_end_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">/=</span> <span class=\"mi\">2</span>  <span class=\"c1\"># (start + end)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/reading_comprehension/bert_for_qa.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.reading_comprehension.bert_for_qa &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.reading_comprehension.bert_for_qa</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.reading_comprehension.bert_for_qa</h1><div class=\"highlight\"><pre>\n<span></span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">BertForQuestionAnswering</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithoutTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.reading_comprehension.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SQuADv1</span>\n\n\n<div class=\"viewcode-block\" id=\"BertForQA\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.bert_for_qa.BertForQA\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:bert_for_qa&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">BertForQA</span><span class=\"p\">(</span><span class=\"n\">SQuADv1</span><span class=\"p\">,</span> <span class=\"n\">ModelWithoutTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Document Reader Model. `Span Detector`</span>\n\n<span class=\"sd\">    Implementation of model presented in</span>\n<span class=\"sd\">    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1810.04805)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;QATokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lang_code: Dataset language code [en|ko]</span>\n<span class=\"sd\">        pretrained_model_name: the name of a pre-trained model</span>\n<span class=\"sd\">        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">lang_code</span><span class=\"o\">=</span><span class=\"s2\">&quot;en&quot;</span><span class=\"p\">,</span> <span class=\"n\">pretrained_model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BertForQA</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>  <span class=\"c1\"># for optimizer&#39;s model parameters</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">answer_maxlen</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">BertForQuestionAnswering</span><span class=\"o\">.</span><span class=\"n\">from_pretrained</span><span class=\"p\">(</span>\n            <span class=\"n\">pretrained_model_name</span><span class=\"p\">,</span> <span class=\"n\">cache_dir</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">ROOT</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"BertForQA.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.bert_for_qa.BertForQA.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">                {&quot;feature_name1&quot;: {</span>\n<span class=\"sd\">                     &quot;token_name1&quot;: tensor,</span>\n<span class=\"sd\">                     &quot;toekn_name2&quot;: tensor},</span>\n<span class=\"sd\">                 &quot;feature_name2&quot;: ...}</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">                {&quot;label_name1&quot;: tensor,</span>\n<span class=\"sd\">                 &quot;label_name2&quot;: tensor}</span>\n<span class=\"sd\">                 Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - start_logits: representing unnormalized log probabilities of the span start position.</span>\n<span class=\"sd\">            - end_logits: representing unnormalized log probabilities of the span end position.</span>\n<span class=\"sd\">            - best_span: the string from the original passage that the model thinks is the best answer to the question.</span>\n<span class=\"sd\">            - answer_idx: the question id, mapping with answer</span>\n<span class=\"sd\">            - loss: A scalar loss to be optimised.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">bert_inputs</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">token_type_ids</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">attention_mask</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">bert_inputs</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n        <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">(</span>\n            <span class=\"n\">bert_inputs</span><span class=\"p\">,</span> <span class=\"n\">token_type_ids</span><span class=\"o\">=</span><span class=\"n\">token_type_ids</span><span class=\"p\">,</span> <span class=\"n\">attention_mask</span><span class=\"o\">=</span><span class=\"n\">attention_mask</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_best_span</span><span class=\"p\">(</span>\n                <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">answer_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">answer_idx</span>\n\n            <span class=\"c1\"># If we are on multi-GPU, split add a dimension</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">answer_start_idx</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">answer_start_idx</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">answer_end_idx</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">answer_end_idx</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"c1\"># sometimes the start/end positions are outside our model inputs, we ignore these terms</span>\n            <span class=\"n\">ignored_index</span> <span class=\"o\">=</span> <span class=\"n\">span_start_logits</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n            <span class=\"n\">answer_start_idx</span><span class=\"o\">.</span><span class=\"n\">clamp_</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">ignored_index</span><span class=\"p\">)</span>\n            <span class=\"n\">answer_end_idx</span><span class=\"o\">.</span><span class=\"n\">clamp_</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">ignored_index</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">(</span><span class=\"n\">ignore_index</span><span class=\"o\">=</span><span class=\"n\">ignored_index</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_start_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_end_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">/=</span> <span class=\"mi\">2</span>  <span class=\"c1\"># (start + end)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div>\n\n<div class=\"viewcode-block\" id=\"BertForQA.make_metrics\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.bert_for_qa.BertForQA.make_metrics\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">make_metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; BERT predictions need to get nbest result &quot;&quot;&quot;</span>\n\n        <span class=\"n\">best_predictions</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">for</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">prediction</span> <span class=\"ow\">in</span> <span class=\"n\">predictions</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n            <span class=\"n\">predict_text</span> <span class=\"o\">=</span> <span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;predict_text&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">start_logit</span> <span class=\"o\">=</span> <span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">][</span><span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;pred_span_start&quot;</span><span class=\"p\">]]</span>\n            <span class=\"n\">end_logit</span> <span class=\"o\">=</span> <span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">][</span><span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;pred_span_end&quot;</span><span class=\"p\">]]</span>\n            <span class=\"n\">predict_score</span> <span class=\"o\">=</span> <span class=\"n\">start_logit</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">end_logit</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">qid</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">best_predictions</span><span class=\"p\">:</span>\n                <span class=\"n\">best_predictions</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"n\">best_predictions</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"n\">predict_text</span><span class=\"p\">,</span> <span class=\"n\">predict_score</span><span class=\"p\">))</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">qid</span><span class=\"p\">,</span> <span class=\"n\">predictions</span> <span class=\"ow\">in</span> <span class=\"n\">best_predictions</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">sorted_predictions</span> <span class=\"o\">=</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">reverse</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n            <span class=\"n\">best_predictions</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">sorted_predictions</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">write_predictions</span><span class=\"p\">(</span><span class=\"n\">best_predictions</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_metrics_with_official</span><span class=\"p\">(</span><span class=\"n\">best_predictions</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"BertForQA.predict\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.bert_for_qa.BertForQA.predict\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">,</span> <span class=\"n\">arguments</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Inference by raw_feature</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            output_dict: model&#39;s output dictionary consisting of</span>\n<span class=\"sd\">                - answer_idx: question id</span>\n<span class=\"sd\">                - best_span: calculate the span_start_logits and span_end_logits to what is the best span</span>\n<span class=\"sd\">            arguments: arguments dictionary consisting of user_input</span>\n<span class=\"sd\">            helper: dictionary for helping get answer</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            span: predict best_span</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">context_text</span> <span class=\"o\">=</span> <span class=\"n\">arguments</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">bert_tokens</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_token&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">predictions</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"p\">(</span><span class=\"n\">best_span</span><span class=\"p\">,</span> <span class=\"n\">start_logits</span><span class=\"p\">,</span> <span class=\"n\">end_logits</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">best_span</span><span class=\"p\">,</span> <span class=\"n\">start_logits</span><span class=\"p\">,</span> <span class=\"n\">end_logits</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span>\n                <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span>\n                <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span>\n                <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span>\n            <span class=\"p\">)</span>\n        <span class=\"p\">]</span>\n\n        <span class=\"n\">best_predictions</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">prediction</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">):</span>\n            <span class=\"n\">bert_token</span> <span class=\"o\">=</span> <span class=\"n\">bert_tokens</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">]</span>\n            <span class=\"n\">best_span</span><span class=\"p\">,</span> <span class=\"n\">start_logits</span><span class=\"p\">,</span> <span class=\"n\">end_logits</span> <span class=\"o\">=</span> <span class=\"n\">prediction</span>\n            <span class=\"n\">pred_start</span><span class=\"p\">,</span> <span class=\"n\">pred_end</span> <span class=\"o\">=</span> <span class=\"n\">best_span</span>\n\n            <span class=\"n\">predict_text</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n            <span class=\"k\">if</span> <span class=\"p\">(</span>\n                <span class=\"n\">pred_start</span> <span class=\"o\">&lt;</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_token</span><span class=\"p\">)</span>\n                <span class=\"ow\">and</span> <span class=\"n\">pred_end</span> <span class=\"o\">&lt;</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_token</span><span class=\"p\">)</span>\n                <span class=\"ow\">and</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">pred_start</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n                <span class=\"ow\">and</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">pred_end</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n            <span class=\"p\">):</span>\n                <span class=\"n\">char_start</span> <span class=\"o\">=</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">pred_start</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n                <span class=\"n\">char_end</span> <span class=\"o\">=</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">pred_end</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n                <span class=\"n\">predict_text</span> <span class=\"o\">=</span> <span class=\"n\">context_text</span><span class=\"p\">[</span><span class=\"n\">char_start</span><span class=\"p\">:</span><span class=\"n\">char_end</span><span class=\"p\">]</span>\n\n            <span class=\"n\">start_logit</span> <span class=\"o\">=</span> <span class=\"n\">start_logits</span><span class=\"p\">[</span><span class=\"n\">pred_start</span><span class=\"p\">]</span>\n            <span class=\"n\">end_logit</span> <span class=\"o\">=</span> <span class=\"n\">end_logits</span><span class=\"p\">[</span><span class=\"n\">pred_end</span><span class=\"p\">]</span>\n            <span class=\"n\">predict_score</span> <span class=\"o\">=</span> <span class=\"n\">start_logit</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">end_logit</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n\n            <span class=\"n\">best_predictions</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"n\">predict_text</span><span class=\"p\">,</span> <span class=\"n\">predict_score</span><span class=\"p\">))</span>\n\n        <span class=\"n\">sorted_predictions</span> <span class=\"o\">=</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">best_predictions</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">reverse</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">:</span> <span class=\"n\">sorted_predictions</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"s2\">&quot;score&quot;</span><span class=\"p\">:</span> <span class=\"n\">sorted_predictions</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]}</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/reading_comprehension/bidaf.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.reading_comprehension.bidaf &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.reading_comprehension.bidaf</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.reading_comprehension.bidaf</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.reading_comprehension.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SQuADv1</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.attention</span> <span class=\"k\">as</span> <span class=\"nn\">attention</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.layer</span> <span class=\"k\">as</span> <span class=\"nn\">layer</span>\n\n\n<div class=\"viewcode-block\" id=\"BiDAF\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.bidaf.BiDAF\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:bidaf&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">BiDAF</span><span class=\"p\">(</span><span class=\"n\">SQuADv1</span><span class=\"p\">,</span> <span class=\"n\">ModelWithTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Document Reader Model. `Span Detector`</span>\n\n<span class=\"sd\">    Implementation of model presented in</span>\n<span class=\"sd\">    BiDAF: Bidirectional Attention Flow for Machine Comprehension</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1611.01603)</span>\n\n<span class=\"sd\">    - Embedding (Word + Char -&gt; Contextual)</span>\n<span class=\"sd\">    - Attention Flow</span>\n<span class=\"sd\">    - Modeling (RNN)</span>\n<span class=\"sd\">    - Output</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;QATokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lang_code: Dataset language code [en|ko]</span>\n<span class=\"sd\">        aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</span>\n<span class=\"sd\">            captures the similarity between pi and each question words q_j.</span>\n<span class=\"sd\">            these features add soft alignments between similar but non-identical words (e.g., car and vehicle)</span>\n<span class=\"sd\">            it only apply to &#39;context_embed&#39;.</span>\n<span class=\"sd\">        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}</span>\n<span class=\"sd\">        model_dim: the number of model dimension</span>\n<span class=\"sd\">        contextual_rnn_num_layer: the number of recurrent layers (contextual)</span>\n<span class=\"sd\">        modeling_rnn_num_layer: the number of recurrent layers (modeling)</span>\n<span class=\"sd\">        predict_rnn_num_layer: the number of recurrent layers (predict)</span>\n<span class=\"sd\">        dropout: the dropout probability</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">token_embedder</span><span class=\"p\">,</span>\n        <span class=\"n\">lang_code</span><span class=\"o\">=</span><span class=\"s2\">&quot;en&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">aligned_query_embedding</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">model_dim</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n        <span class=\"n\">contextual_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">modeling_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">predict_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BiDAF</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_embedder</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span> <span class=\"o\">=</span> <span class=\"n\">aligned_query_embedding</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">answer_maxlen</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_embed_dim</span><span class=\"p\">,</span> <span class=\"n\">query_embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span><span class=\"o\">.</span><span class=\"n\">get_embed_dim</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span><span class=\"p\">:</span>\n            <span class=\"n\">context_embed_dim</span> <span class=\"o\">+=</span> <span class=\"n\">query_embed_dim</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">context_embed_dim</span> <span class=\"o\">!=</span> <span class=\"n\">query_embed_dim</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_highway</span> <span class=\"o\">=</span> <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">Highway</span><span class=\"p\">(</span><span class=\"n\">context_embed_dim</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_contextual_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">contextual_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_highway</span> <span class=\"o\">=</span> <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">Highway</span><span class=\"p\">(</span><span class=\"n\">query_embed_dim</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_contextual_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">query_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">contextual_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">highway</span> <span class=\"o\">=</span> <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">Highway</span><span class=\"p\">(</span><span class=\"n\">query_embed_dim</span><span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_highway</span> <span class=\"o\">=</span> <span class=\"n\">highway</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_highway</span> <span class=\"o\">=</span> <span class=\"n\">highway</span>\n\n            <span class=\"n\">contextual_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">contextual_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_contextual_rnn</span> <span class=\"o\">=</span> <span class=\"n\">contextual_rnn</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_contextual_rnn</span> <span class=\"o\">=</span> <span class=\"n\">contextual_rnn</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">attention</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">BiAttention</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modeling_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"mi\">8</span> <span class=\"o\">*</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">modeling_rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">output_end_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"mi\">14</span> <span class=\"o\">*</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">predict_rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"mi\">10</span> <span class=\"o\">*</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"mi\">10</span> <span class=\"o\">*</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"BiDAF.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.bidaf.BiDAF.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">                {&quot;feature_name1&quot;: {</span>\n<span class=\"sd\">                     &quot;token_name1&quot;: tensor,</span>\n<span class=\"sd\">                     &quot;toekn_name2&quot;: tensor},</span>\n<span class=\"sd\">                 &quot;feature_name2&quot;: ...}</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">                {&quot;label_name1&quot;: tensor,</span>\n<span class=\"sd\">                 &quot;label_name2&quot;: tensor}</span>\n<span class=\"sd\">                 Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - start_logits: representing unnormalized log probabilities of the span start position.</span>\n<span class=\"sd\">            - end_logits: representing unnormalized log probabilities of the span end position.</span>\n<span class=\"sd\">            - best_span: the string from the original passage that the model thinks is the best answer to the question.</span>\n<span class=\"sd\">            - data_idx: the question id, mapping with answer</span>\n<span class=\"sd\">            - loss: A scalar loss to be optimised.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward</span>\n        <span class=\"n\">context_seq_config</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span>\n        <span class=\"n\">query_seq_config</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Embedding Layer (Char + Word -&gt; Contextual)</span>\n        <span class=\"n\">query_params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_word&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_tuning&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}}</span>\n        <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span><span class=\"p\">(</span>\n            <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">,</span> <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"n\">query_params</span><span class=\"p\">,</span> <span class=\"n\">query_align</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">context_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n        <span class=\"n\">query_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span> <span class=\"o\">=</span> <span class=\"n\">context_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">context_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_highway</span><span class=\"p\">(</span><span class=\"n\">context_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_highway</span><span class=\"p\">(</span><span class=\"n\">query_embed</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_contextual_rnn</span><span class=\"p\">,</span> <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"n\">query_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_contextual_rnn</span><span class=\"p\">,</span> <span class=\"n\">query_embed</span><span class=\"p\">,</span> <span class=\"n\">query_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">query_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">query_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Attention Flow Layer</span>\n        <span class=\"n\">attention_context_query</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">attention</span><span class=\"p\">(</span>\n            <span class=\"n\">context_encoded</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">query_encoded</span><span class=\"p\">,</span> <span class=\"n\">query_mask</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># Modeling Layer</span>\n        <span class=\"n\">modeled_context</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modeling_rnn</span><span class=\"p\">,</span> <span class=\"n\">attention_context_query</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">modeled_context</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">modeled_context</span><span class=\"p\">)</span>\n\n        <span class=\"n\">M_D</span> <span class=\"o\">=</span> <span class=\"n\">modeled_context</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Output Layer</span>\n        <span class=\"n\">span_start_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span>\n            <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">attention_context_query</span><span class=\"p\">,</span> <span class=\"n\">modeled_context</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, 10d)</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span><span class=\"p\">(</span><span class=\"n\">span_start_input</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L)</span>\n        <span class=\"n\">span_start_probs</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">masked_softmax</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">)</span>\n\n        <span class=\"n\">span_start_representation</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span>\n            <span class=\"n\">attention</span><span class=\"o\">=</span><span class=\"n\">span_start_probs</span><span class=\"p\">,</span> <span class=\"n\">matrix</span><span class=\"o\">=</span><span class=\"n\">modeled_context</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">tiled_span_start_representation</span> <span class=\"o\">=</span> <span class=\"n\">span_start_representation</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">M_D</span><span class=\"p\">)</span>\n\n        <span class=\"n\">span_end_representation</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span>\n                <span class=\"n\">attention_context_query</span><span class=\"p\">,</span>\n                <span class=\"n\">modeled_context</span><span class=\"p\">,</span>\n                <span class=\"n\">tiled_span_start_representation</span><span class=\"p\">,</span>\n                <span class=\"n\">modeled_context</span> <span class=\"o\">*</span> <span class=\"n\">tiled_span_start_representation</span><span class=\"p\">,</span>\n            <span class=\"p\">],</span>\n            <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">encoded_span_end</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">output_end_rnn</span><span class=\"p\">,</span> <span class=\"n\">span_end_representation</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">encoded_span_end</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">encoded_span_end</span><span class=\"p\">)</span>\n\n        <span class=\"n\">span_end_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span>\n            <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">attention_context_query</span><span class=\"p\">,</span> <span class=\"n\">encoded_span_end</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span><span class=\"p\">(</span><span class=\"n\">span_end_input</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Masked Value</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_best_span</span><span class=\"p\">(</span>\n                <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_start_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_end_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>  <span class=\"c1\"># NOTE: DataParallel concat Error</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/reading_comprehension/bidaf_no_answer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.reading_comprehension.bidaf_no_answer &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.reading_comprehension.bidaf_no_answer</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.reading_comprehension.bidaf_no_answer</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.reading_comprehension.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SQuADv2</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.attention</span> <span class=\"k\">as</span> <span class=\"nn\">attention</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.layer</span> <span class=\"k\">as</span> <span class=\"nn\">layer</span>\n\n\n<div class=\"viewcode-block\" id=\"BiDAF_No_Answer\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.bidaf_no_answer.BiDAF_No_Answer\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:bidaf_no_answer&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">BiDAF_No_Answer</span><span class=\"p\">(</span><span class=\"n\">SQuADv2</span><span class=\"p\">,</span> <span class=\"n\">ModelWithTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Question Answering Model. `Span Detector`, `No Answer`</span>\n\n<span class=\"sd\">    Bidirectional Attention Flow for Machine Comprehension + Bias (No_Answer)</span>\n\n<span class=\"sd\">    - Embedding (Word + Char -&gt; Contextual)</span>\n<span class=\"sd\">    - Attention Flow</span>\n<span class=\"sd\">    - Modeling (RNN)</span>\n<span class=\"sd\">    - Output</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;QATokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lang_code: Dataset language code [en|ko]</span>\n<span class=\"sd\">        aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</span>\n<span class=\"sd\">            captures the similarity between pi and each question words q_j.</span>\n<span class=\"sd\">            these features add soft alignments between similar but non-identical words (e.g., car and vehicle)</span>\n<span class=\"sd\">            it only apply to &#39;context_embed&#39;.</span>\n<span class=\"sd\">        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}</span>\n<span class=\"sd\">        model_dim: the number of model dimension</span>\n<span class=\"sd\">        dropout: the dropout probability</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">token_embedder</span><span class=\"p\">,</span>\n        <span class=\"n\">lang_code</span><span class=\"o\">=</span><span class=\"s2\">&quot;en&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">aligned_query_embedding</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">model_dim</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n        <span class=\"n\">contextual_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">modeling_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">predict_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BiDAF_No_Answer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_embedder</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span> <span class=\"o\">=</span> <span class=\"n\">aligned_query_embedding</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">answer_maxlen</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_embed_dim</span><span class=\"p\">,</span> <span class=\"n\">query_embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span><span class=\"o\">.</span><span class=\"n\">get_embed_dim</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span><span class=\"p\">:</span>\n            <span class=\"n\">context_embed_dim</span> <span class=\"o\">+=</span> <span class=\"n\">query_embed_dim</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">context_embed_dim</span> <span class=\"o\">!=</span> <span class=\"n\">query_embed_dim</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_highway</span> <span class=\"o\">=</span> <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">Highway</span><span class=\"p\">(</span><span class=\"n\">context_embed_dim</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_contextual_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">contextual_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_highway</span> <span class=\"o\">=</span> <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">Highway</span><span class=\"p\">(</span><span class=\"n\">query_embed_dim</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_contextual_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">query_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">contextual_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">highway</span> <span class=\"o\">=</span> <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">Highway</span><span class=\"p\">(</span><span class=\"n\">query_embed_dim</span><span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_highway</span> <span class=\"o\">=</span> <span class=\"n\">highway</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_highway</span> <span class=\"o\">=</span> <span class=\"n\">highway</span>\n\n            <span class=\"n\">contextual_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">contextual_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_contextual_rnn</span> <span class=\"o\">=</span> <span class=\"n\">contextual_rnn</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_contextual_rnn</span> <span class=\"o\">=</span> <span class=\"n\">contextual_rnn</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">attention</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">BiAttention</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modeling_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"mi\">8</span> <span class=\"o\">*</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">modeling_rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">output_end_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"mi\">14</span> <span class=\"o\">*</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">predict_rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"mi\">10</span> <span class=\"o\">*</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"mi\">10</span> <span class=\"o\">*</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bias</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">randn</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"BiDAF_No_Answer.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.bidaf_no_answer.BiDAF_No_Answer.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">                {&quot;feature_name1&quot;: {</span>\n<span class=\"sd\">                     &quot;token_name1&quot;: tensor,</span>\n<span class=\"sd\">                     &quot;toekn_name2&quot;: tensor},</span>\n<span class=\"sd\">                 &quot;feature_name2&quot;: ...}</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">                {&quot;label_name1&quot;: tensor,</span>\n<span class=\"sd\">                 &quot;label_name2&quot;: tensor}</span>\n<span class=\"sd\">                 Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - start_logits: representing unnormalized log probabilities of the span start position.</span>\n<span class=\"sd\">            - end_logits: representing unnormalized log probabilities of the span end position.</span>\n<span class=\"sd\">            - best_span: the string from the original passage that the model thinks is the best answer to the question.</span>\n<span class=\"sd\">            - data_idx: the question id, mapping with answer</span>\n<span class=\"sd\">            - loss: A scalar loss to be optimised.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward</span>\n        <span class=\"n\">context_seq_config</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span>\n        <span class=\"n\">query_seq_config</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Embedding Layer (Char + Word -&gt; Contextual)</span>\n        <span class=\"n\">query_params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_word&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_tuning&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}}</span>\n        <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span><span class=\"p\">(</span>\n            <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">,</span> <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"n\">query_params</span><span class=\"p\">,</span> <span class=\"n\">query_align</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">context_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n        <span class=\"n\">query_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span> <span class=\"o\">=</span> <span class=\"n\">context_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">context_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_highway</span><span class=\"p\">(</span><span class=\"n\">context_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_highway</span><span class=\"p\">(</span><span class=\"n\">query_embed</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_contextual_rnn</span><span class=\"p\">,</span> <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"n\">query_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_contextual_rnn</span><span class=\"p\">,</span> <span class=\"n\">query_embed</span><span class=\"p\">,</span> <span class=\"n\">query_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">query_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">query_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Attention Flow Layer</span>\n        <span class=\"n\">attention_context_query</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">attention</span><span class=\"p\">(</span>\n            <span class=\"n\">context_encoded</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">query_encoded</span><span class=\"p\">,</span> <span class=\"n\">query_mask</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># Modeling Layer</span>\n        <span class=\"n\">modeled_context</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modeling_rnn</span><span class=\"p\">,</span> <span class=\"n\">attention_context_query</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">modeled_context</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">modeled_context</span><span class=\"p\">)</span>\n\n        <span class=\"n\">M_D</span> <span class=\"o\">=</span> <span class=\"n\">modeled_context</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Output Layer</span>\n        <span class=\"n\">span_start_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span>\n            <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">attention_context_query</span><span class=\"p\">,</span> <span class=\"n\">modeled_context</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, 10d)</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span><span class=\"p\">(</span><span class=\"n\">span_start_input</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L)</span>\n        <span class=\"n\">span_start_probs</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">masked_softmax</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">)</span>\n\n        <span class=\"n\">span_start_representation</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span>\n            <span class=\"n\">attention</span><span class=\"o\">=</span><span class=\"n\">span_start_probs</span><span class=\"p\">,</span> <span class=\"n\">matrix</span><span class=\"o\">=</span><span class=\"n\">modeled_context</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">tiled_span_start_representation</span> <span class=\"o\">=</span> <span class=\"n\">span_start_representation</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">M_D</span><span class=\"p\">)</span>\n\n        <span class=\"n\">span_end_representation</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span>\n                <span class=\"n\">attention_context_query</span><span class=\"p\">,</span>\n                <span class=\"n\">modeled_context</span><span class=\"p\">,</span>\n                <span class=\"n\">tiled_span_start_representation</span><span class=\"p\">,</span>\n                <span class=\"n\">modeled_context</span> <span class=\"o\">*</span> <span class=\"n\">tiled_span_start_representation</span><span class=\"p\">,</span>\n            <span class=\"p\">],</span>\n            <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">encoded_span_end</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">output_end_rnn</span><span class=\"p\">,</span> <span class=\"n\">span_end_representation</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">encoded_span_end</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">encoded_span_end</span><span class=\"p\">)</span>\n\n        <span class=\"n\">span_end_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span>\n            <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">attention_context_query</span><span class=\"p\">,</span> <span class=\"n\">encoded_span_end</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span><span class=\"p\">(</span><span class=\"n\">span_end_input</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Masked Value</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># No_Answer Bias</span>\n        <span class=\"n\">bias</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_best_span</span><span class=\"p\">(</span>\n                <span class=\"n\">span_start_logits</span><span class=\"p\">[:,</span> <span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">],</span>\n                <span class=\"n\">span_end_logits</span><span class=\"p\">[:,</span> <span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">],</span>\n                <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span><span class=\"p\">,</span>  <span class=\"c1\"># except no_answer bias</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answerable</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"c1\"># No_Asnwer Case</span>\n            <span class=\"n\">C_L</span> <span class=\"o\">=</span> <span class=\"n\">context_mask</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">answer_start_idx</span><span class=\"o\">.</span><span class=\"n\">masked_fill</span><span class=\"p\">(</span><span class=\"n\">answerable</span><span class=\"o\">.</span><span class=\"n\">eq</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">C_L</span><span class=\"p\">)</span>\n            <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">answer_end_idx</span><span class=\"o\">.</span><span class=\"n\">masked_fill</span><span class=\"p\">(</span><span class=\"n\">answerable</span><span class=\"o\">.</span><span class=\"n\">eq</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">C_L</span><span class=\"p\">)</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_start_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_end_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>  <span class=\"c1\"># NOTE: DataParallel concat Error</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/reading_comprehension/docqa.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.reading_comprehension.docqa &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.reading_comprehension.docqa</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.reading_comprehension.docqa</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.reading_comprehension.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SQuADv1</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules</span> <span class=\"k\">import</span> <span class=\"n\">attention</span><span class=\"p\">,</span> <span class=\"n\">initializer</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules</span> <span class=\"k\">import</span> <span class=\"n\">functional</span> <span class=\"k\">as</span> <span class=\"n\">f</span>\n\n\n<div class=\"viewcode-block\" id=\"DocQA\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa.DocQA\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:docqa&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">DocQA</span><span class=\"p\">(</span><span class=\"n\">SQuADv1</span><span class=\"p\">,</span> <span class=\"n\">ModelWithTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Document Reader Model. `Span Detector`</span>\n\n<span class=\"sd\">    Implementation of model presented in</span>\n<span class=\"sd\">    Simple and Effective Multi-Paragraph Reading Comprehension</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1710.10723)</span>\n\n<span class=\"sd\">    - Embedding (Word + Char -&gt; Contextual)</span>\n<span class=\"sd\">    - Attention</span>\n<span class=\"sd\">    - Residual self-attention</span>\n<span class=\"sd\">    - Output</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;QATokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lang_code: Dataset language code [en|ko]</span>\n<span class=\"sd\">        aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</span>\n<span class=\"sd\">            captures the similarity between pi and each question words q_j.</span>\n<span class=\"sd\">            these features add soft alignments between similar but non-identical words (e.g., car and vehicle)</span>\n<span class=\"sd\">            it only apply to &#39;context_embed&#39;.</span>\n<span class=\"sd\">        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}</span>\n<span class=\"sd\">        rnn_dim: the number of RNN cell dimension</span>\n<span class=\"sd\">        linear_dim: the number of attention linear dimension</span>\n<span class=\"sd\">        preprocess_rnn_num_layer: the number of recurrent layers (preprocess)</span>\n<span class=\"sd\">        modeling_rnn_num_layer: the number of recurrent layers (modeling)</span>\n<span class=\"sd\">        predict_rnn_num_layer: the number of recurrent layers (predict)</span>\n<span class=\"sd\">        dropout: the dropout probability</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">token_embedder</span><span class=\"p\">,</span>\n        <span class=\"n\">lang_code</span><span class=\"o\">=</span><span class=\"s2\">&quot;en&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">aligned_query_embedding</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"mi\">17</span><span class=\"p\">,</span>\n        <span class=\"n\">rnn_dim</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n        <span class=\"n\">linear_dim</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span>\n        <span class=\"n\">preprocess_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">modeling_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">predict_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span>\n        <span class=\"n\">weight_init</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">DocQA</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_embedder</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span> <span class=\"o\">=</span> <span class=\"n\">aligned_query_embedding</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">answer_maxlen</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_embed_dim</span><span class=\"p\">,</span> <span class=\"n\">query_embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span><span class=\"o\">.</span><span class=\"n\">get_embed_dim</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span><span class=\"p\">:</span>\n            <span class=\"n\">context_embed_dim</span> <span class=\"o\">+=</span> <span class=\"n\">query_embed_dim</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">context_embed_dim</span> <span class=\"o\">!=</span> <span class=\"n\">query_embed_dim</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_preprocess_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">preprocess_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_preprocess_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">query_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">preprocess_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">preprocess_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">preprocess_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_preprocess_rnn</span> <span class=\"o\">=</span> <span class=\"n\">preprocess_rnn</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_preprocess_rnn</span> <span class=\"o\">=</span> <span class=\"n\">preprocess_rnn</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bi_attention</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">DocQAAttention</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">attn_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span> <span class=\"o\">*</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modeling_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">linear_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">modeling_rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attention</span> <span class=\"o\">=</span> <span class=\"n\">SelfAttention</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">,</span> <span class=\"n\">weight_init</span><span class=\"o\">=</span><span class=\"n\">weight_init</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">linear_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">predict_rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">linear_dim</span> <span class=\"o\">+</span> <span class=\"n\">rnn_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">predict_rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">relu</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">weight_init</span><span class=\"p\">:</span>\n            <span class=\"n\">modules</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_preprocess_rnn</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_preprocess_rnn</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modeling_rnn</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">attn_linear</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_rnn</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_rnn</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span><span class=\"p\">,</span>\n            <span class=\"p\">]</span>\n            <span class=\"n\">initializer</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">(</span><span class=\"n\">modules</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"DocQA.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa.DocQA.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">                {&quot;feature_name1&quot;: {</span>\n<span class=\"sd\">                     &quot;token_name1&quot;: tensor,</span>\n<span class=\"sd\">                     &quot;toekn_name2&quot;: tensor},</span>\n<span class=\"sd\">                 &quot;feature_name2&quot;: ...}</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">                {&quot;label_name1&quot;: tensor,</span>\n<span class=\"sd\">                 &quot;label_name2&quot;: tensor}</span>\n<span class=\"sd\">                 Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - start_logits: representing unnormalized log probabilities of the span start position.</span>\n<span class=\"sd\">            - end_logits: representing unnormalized log probabilities of the span end position.</span>\n<span class=\"sd\">            - best_span: the string from the original passage that the model thinks is the best answer to the question.</span>\n<span class=\"sd\">            - data_idx: the question id, mapping with answer</span>\n<span class=\"sd\">            - loss: A scalar loss to be optimised.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward</span>\n        <span class=\"n\">context_seq_config</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span>\n        <span class=\"n\">query_seq_config</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Embedding</span>\n        <span class=\"n\">query_params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_word&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_tuning&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}}</span>\n        <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span><span class=\"p\">(</span>\n            <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">,</span> <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"n\">query_params</span><span class=\"p\">,</span> <span class=\"n\">query_align</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">context_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>  <span class=\"c1\"># B X 1 X C_L</span>\n        <span class=\"n\">query_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>  <span class=\"c1\"># B X 1 X Q_L</span>\n\n        <span class=\"c1\"># Pre-process</span>\n        <span class=\"n\">context_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_preprocess_rnn</span><span class=\"p\">,</span> <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">query_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">query_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_preprocess_rnn</span><span class=\"p\">,</span> <span class=\"n\">query_embed</span><span class=\"p\">,</span> <span class=\"n\">query_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">query_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">query_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Attention -&gt; Projection</span>\n        <span class=\"n\">context_attnded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bi_attention</span><span class=\"p\">(</span>\n            <span class=\"n\">context_encoded</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">query_encoded</span><span class=\"p\">,</span> <span class=\"n\">query_mask</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">context_attnded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">attn_linear</span><span class=\"p\">(</span><span class=\"n\">context_attnded</span><span class=\"p\">))</span>  <span class=\"c1\"># B X C_L X dim*2</span>\n\n        <span class=\"c1\"># Residual Self-Attention</span>\n        <span class=\"n\">context_attnded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_attnded</span><span class=\"p\">)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modeling_rnn</span><span class=\"p\">,</span> <span class=\"n\">context_attnded</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_self_attnded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attention</span><span class=\"p\">(</span><span class=\"n\">context_encoded</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">)</span>  <span class=\"c1\"># B X C_L X dim*2</span>\n        <span class=\"n\">context_final</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_attnded</span> <span class=\"o\">+</span> <span class=\"n\">context_self_attnded</span><span class=\"p\">)</span>  <span class=\"c1\"># B X C_L X dim*2</span>\n\n        <span class=\"c1\"># Prediction</span>\n        <span class=\"n\">span_start_input</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_rnn</span><span class=\"p\">,</span> <span class=\"n\">context_final</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># B X C_L X dim*2</span>\n        <span class=\"n\">span_start_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">span_start_input</span><span class=\"p\">)</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span><span class=\"p\">(</span><span class=\"n\">span_start_input</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># B X C_L</span>\n\n        <span class=\"n\">span_end_input</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">span_start_input</span><span class=\"p\">,</span> <span class=\"n\">context_final</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># B X C_L X dim*4</span>\n        <span class=\"n\">span_end_input</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_rnn</span><span class=\"p\">,</span> <span class=\"n\">span_end_input</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># B X C_L X dim*2</span>\n        <span class=\"n\">span_end_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">span_end_input</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span><span class=\"p\">(</span><span class=\"n\">span_end_input</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># B X C_L</span>\n\n        <span class=\"c1\"># Masked Value</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_best_span</span><span class=\"p\">(</span>\n                <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_start_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_end_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>  <span class=\"c1\"># NOTE: DataParallel concat Error</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"SelfAttention\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa.SelfAttention\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SelfAttention</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Same bi-attention mechanism, only now between the passage and itself.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">rnn_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">weight_init</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SelfAttention</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attention</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">DocQAAttention</span><span class=\"p\">(</span>\n            <span class=\"n\">rnn_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">,</span> <span class=\"n\">self_attn</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">weight_init</span><span class=\"o\">=</span><span class=\"n\">weight_init</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attn_Linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span> <span class=\"o\">*</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">relu</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">weight_init</span><span class=\"p\">:</span>\n            <span class=\"n\">initializer</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attn_Linear</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"SelfAttention.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa.SelfAttention.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">context_self_attnded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attention</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attn_Linear</span><span class=\"p\">(</span><span class=\"n\">context_self_attnded</span><span class=\"p\">))</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/reading_comprehension/docqa_no_answer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.reading_comprehension.docqa_no_answer &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.reading_comprehension.docqa_no_answer</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.reading_comprehension.docqa_no_answer</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.reading_comprehension.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SQuADv2</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules</span> <span class=\"k\">import</span> <span class=\"n\">attention</span><span class=\"p\">,</span> <span class=\"n\">initializer</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules</span> <span class=\"k\">import</span> <span class=\"n\">functional</span> <span class=\"k\">as</span> <span class=\"n\">f</span>\n\n\n<div class=\"viewcode-block\" id=\"DocQA_No_Answer\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.DocQA_No_Answer\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:docqa_no_answer&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">DocQA_No_Answer</span><span class=\"p\">(</span><span class=\"n\">SQuADv2</span><span class=\"p\">,</span> <span class=\"n\">ModelWithTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Question Answering Model. `Span Detector`, `No Answer`</span>\n\n<span class=\"sd\">    Implementation of model presented in</span>\n<span class=\"sd\">    Simple and Effective Multi-Paragraph Reading Comprehension + No_Asnwer</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1710.10723)</span>\n\n<span class=\"sd\">    - Embedding (Word + Char -&gt; Contextual)</span>\n<span class=\"sd\">    - Attention</span>\n<span class=\"sd\">    - Residual self-attention</span>\n<span class=\"sd\">    - Output</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;QATokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lang_code: Dataset language code [en|ko]</span>\n<span class=\"sd\">        aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</span>\n<span class=\"sd\">            captures the similarity between pi and each question words q_j.</span>\n<span class=\"sd\">            these features add soft alignments between similar but non-identical words (e.g., car and vehicle)</span>\n<span class=\"sd\">            it only apply to &#39;context_embed&#39;.</span>\n<span class=\"sd\">        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}</span>\n<span class=\"sd\">        rnn_dim: the number of RNN cell dimension</span>\n<span class=\"sd\">        linear_dim: the number of attention linear dimension</span>\n<span class=\"sd\">        preprocess_rnn_num_layer: the number of recurrent layers (preprocess)</span>\n<span class=\"sd\">        modeling_rnn_num_layer: the number of recurrent layers (modeling)</span>\n<span class=\"sd\">        predict_rnn_num_layer: the number of recurrent layers (predict)</span>\n<span class=\"sd\">        dropout: the dropout probability</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">token_embedder</span><span class=\"p\">,</span>\n        <span class=\"n\">lang_code</span><span class=\"o\">=</span><span class=\"s2\">&quot;en&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">aligned_query_embedding</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"mi\">17</span><span class=\"p\">,</span>\n        <span class=\"n\">rnn_dim</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n        <span class=\"n\">linear_dim</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span>\n        <span class=\"n\">preprocess_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">modeling_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">predict_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span>\n        <span class=\"n\">weight_init</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">DocQA_No_Answer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_embedder</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span> <span class=\"o\">=</span> <span class=\"n\">aligned_query_embedding</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">answer_maxlen</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_embed_dim</span><span class=\"p\">,</span> <span class=\"n\">query_embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span><span class=\"o\">.</span><span class=\"n\">get_embed_dim</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span><span class=\"p\">:</span>\n            <span class=\"n\">context_embed_dim</span> <span class=\"o\">+=</span> <span class=\"n\">query_embed_dim</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">context_embed_dim</span> <span class=\"o\">!=</span> <span class=\"n\">query_embed_dim</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_preprocess_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">preprocess_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_preprocess_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">query_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">preprocess_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">preprocess_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n                <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n                <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">preprocess_rnn_num_layer</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_preprocess_rnn</span> <span class=\"o\">=</span> <span class=\"n\">preprocess_rnn</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_preprocess_rnn</span> <span class=\"o\">=</span> <span class=\"n\">preprocess_rnn</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bi_attention</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">DocQAAttention</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">attn_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span> <span class=\"o\">*</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modeling_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">linear_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">modeling_rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attention</span> <span class=\"o\">=</span> <span class=\"n\">SelfAttention</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">,</span> <span class=\"n\">weight_init</span><span class=\"o\">=</span><span class=\"n\">weight_init</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">linear_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">predict_rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">linear_dim</span> <span class=\"o\">+</span> <span class=\"n\">rnn_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">rnn_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">predict_rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">no_answer_op</span> <span class=\"o\">=</span> <span class=\"n\">NoAnswer</span><span class=\"p\">(</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span> <span class=\"mi\">80</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">relu</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">weight_init</span><span class=\"p\">:</span>\n            <span class=\"n\">modules</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_preprocess_rnn</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_preprocess_rnn</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modeling_rnn</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">attn_linear</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_rnn</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_rnn</span><span class=\"p\">,</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span><span class=\"p\">,</span>\n            <span class=\"p\">]</span>\n            <span class=\"n\">initializer</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">(</span><span class=\"n\">modules</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"DocQA_No_Answer.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.DocQA_No_Answer.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">                {&quot;feature_name1&quot;: {</span>\n<span class=\"sd\">                     &quot;token_name1&quot;: tensor,</span>\n<span class=\"sd\">                     &quot;toekn_name2&quot;: tensor},</span>\n<span class=\"sd\">                 &quot;feature_name2&quot;: ...}</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">                {&quot;label_name1&quot;: tensor,</span>\n<span class=\"sd\">                 &quot;label_name2&quot;: tensor}</span>\n<span class=\"sd\">                 Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - start_logits: representing unnormalized log probabilities of the span start position.</span>\n<span class=\"sd\">            - end_logits: representing unnormalized log probabilities of the span end position.</span>\n<span class=\"sd\">            - best_span: the string from the original passage that the model thinks is the best answer to the question.</span>\n<span class=\"sd\">            - data_idx: the question id, mapping with answer</span>\n<span class=\"sd\">            - loss: A scalar loss to be optimised.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward</span>\n        <span class=\"n\">context_seq_config</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span>\n        <span class=\"n\">query_seq_config</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Embedding</span>\n        <span class=\"n\">query_params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_word&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_tuning&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}}</span>\n        <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span><span class=\"p\">(</span>\n            <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">,</span> <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"n\">query_params</span><span class=\"p\">,</span> <span class=\"n\">query_align</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">context_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>  <span class=\"c1\"># B X C_L</span>\n        <span class=\"n\">query_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>  <span class=\"c1\"># B X Q_L</span>\n\n        <span class=\"c1\"># Pre-process</span>\n        <span class=\"n\">context_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_preprocess_rnn</span><span class=\"p\">,</span> <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">query_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">query_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_preprocess_rnn</span><span class=\"p\">,</span> <span class=\"n\">query_embed</span><span class=\"p\">,</span> <span class=\"n\">query_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">query_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">query_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Attention -&gt; Projection</span>\n        <span class=\"n\">context_attnded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bi_attention</span><span class=\"p\">(</span>\n            <span class=\"n\">context_encoded</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">query_encoded</span><span class=\"p\">,</span> <span class=\"n\">query_mask</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">context_attnded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">attn_linear</span><span class=\"p\">(</span><span class=\"n\">context_attnded</span><span class=\"p\">))</span>  <span class=\"c1\"># B X C_L X dim*2</span>\n\n        <span class=\"c1\"># Residual Self-Attention</span>\n        <span class=\"n\">context_attnded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_attnded</span><span class=\"p\">)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modeling_rnn</span><span class=\"p\">,</span> <span class=\"n\">context_attnded</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_self_attnded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attention</span><span class=\"p\">(</span><span class=\"n\">context_encoded</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">)</span>  <span class=\"c1\"># B X C_L X dim*2</span>\n        <span class=\"n\">context_final</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_attnded</span> <span class=\"o\">+</span> <span class=\"n\">context_self_attnded</span><span class=\"p\">)</span>  <span class=\"c1\"># B X C_L X dim*2</span>\n\n        <span class=\"c1\"># Prediction</span>\n        <span class=\"n\">span_start_input</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_rnn</span><span class=\"p\">,</span> <span class=\"n\">context_final</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># B X C_L X dim*2</span>\n        <span class=\"n\">span_start_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">span_start_input</span><span class=\"p\">)</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span><span class=\"p\">(</span><span class=\"n\">span_start_input</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># B X C_L</span>\n\n        <span class=\"n\">span_end_input</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">span_start_input</span><span class=\"p\">,</span> <span class=\"n\">context_final</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># B X C_L X dim*4</span>\n        <span class=\"n\">span_end_input</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_rnn</span><span class=\"p\">,</span> <span class=\"n\">span_end_input</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># B X C_L X dim*2</span>\n        <span class=\"n\">span_end_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">span_end_input</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span><span class=\"p\">(</span><span class=\"n\">span_end_input</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># B X C_L</span>\n\n        <span class=\"c1\"># Masked Value</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># No_Asnwer Option</span>\n        <span class=\"n\">bias</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">no_answer_op</span><span class=\"p\">(</span><span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span><span class=\"p\">)</span>\n\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_best_span</span><span class=\"p\">(</span>\n                <span class=\"n\">span_start_logits</span><span class=\"p\">[:,</span> <span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">],</span>\n                <span class=\"n\">span_end_logits</span><span class=\"p\">[:,</span> <span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">],</span>\n                <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span><span class=\"p\">,</span>  <span class=\"c1\"># except no_answer bias</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answerable</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answerable&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"c1\"># No_Asnwer Case</span>\n            <span class=\"n\">C_L</span> <span class=\"o\">=</span> <span class=\"n\">context_mask</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">answer_start_idx</span><span class=\"o\">.</span><span class=\"n\">masked_fill</span><span class=\"p\">(</span><span class=\"n\">answerable</span><span class=\"o\">.</span><span class=\"n\">eq</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">C_L</span><span class=\"p\">)</span>\n            <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">answer_end_idx</span><span class=\"o\">.</span><span class=\"n\">masked_fill</span><span class=\"p\">(</span><span class=\"n\">answerable</span><span class=\"o\">.</span><span class=\"n\">eq</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">C_L</span><span class=\"p\">)</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_start_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_end_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>  <span class=\"c1\"># NOTE: DataParallel concat Error</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"SelfAttention\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.SelfAttention\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SelfAttention</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Same bi-attention mechanism, only now between the passage and itself.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">rnn_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">weight_init</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SelfAttention</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attention</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">DocQAAttention</span><span class=\"p\">(</span>\n            <span class=\"n\">rnn_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">,</span> <span class=\"n\">self_attn</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">weight_init</span><span class=\"o\">=</span><span class=\"n\">weight_init</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attn_Linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">rnn_dim</span> <span class=\"o\">*</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">relu</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">weight_init</span><span class=\"p\">:</span>\n            <span class=\"n\">initializer</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attn_Linear</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"SelfAttention.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.SelfAttention.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">context_self_attnded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attention</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">)</span>\n        <span class=\"n\">context_self_attnded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attn_Linear</span><span class=\"p\">(</span><span class=\"n\">context_self_attnded</span><span class=\"p\">))</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">context_self_attnded</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"NoAnswer\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.NoAnswer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">NoAnswer</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        No-Answer Option</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            embed_dim: the number of passage embedding dimension</span>\n<span class=\"sd\">            bias_hidden_dim: bias use two layer mlp, the number of hidden_size</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">bias_hidden_dim</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">NoAnswer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bias_mlp</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">embed_dim</span> <span class=\"o\">*</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">bias_hidden_dim</span><span class=\"p\">),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ReLU</span><span class=\"p\">(),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">bias_hidden_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"NoAnswer.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.NoAnswer.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span><span class=\"p\">):</span>\n        <span class=\"n\">p_1_h</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># B,1,T</span>\n        <span class=\"n\">p_2_h</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># B,1,T</span>\n        <span class=\"n\">p_3_h</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attn</span><span class=\"p\">(</span><span class=\"n\">context_embed</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>  <span class=\"c1\"># B,1,T</span>\n\n        <span class=\"n\">v_1</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">matmul</span><span class=\"p\">(</span><span class=\"n\">p_1_h</span><span class=\"p\">,</span> <span class=\"n\">context_embed</span><span class=\"p\">)</span>  <span class=\"c1\"># B,1,D</span>\n        <span class=\"n\">v_2</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">matmul</span><span class=\"p\">(</span><span class=\"n\">p_2_h</span><span class=\"p\">,</span> <span class=\"n\">context_embed</span><span class=\"p\">)</span>  <span class=\"c1\"># B,1,D</span>\n        <span class=\"n\">v_3</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">matmul</span><span class=\"p\">(</span><span class=\"n\">p_3_h</span><span class=\"p\">,</span> <span class=\"n\">context_embed</span><span class=\"p\">)</span>  <span class=\"c1\"># B,1,D</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bias_mlp</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">v_1</span><span class=\"p\">,</span> <span class=\"n\">v_2</span><span class=\"p\">,</span> <span class=\"n\">v_3</span><span class=\"p\">],</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/reading_comprehension/drqa.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.reading_comprehension.drqa &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.reading_comprehension.drqa</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.reading_comprehension.drqa</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.reading_comprehension.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SQuADv1</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.attention</span> <span class=\"k\">as</span> <span class=\"nn\">attention</span>\n\n\n<div class=\"viewcode-block\" id=\"DrQA\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.drqa.DrQA\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:drqa&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">DrQA</span><span class=\"p\">(</span><span class=\"n\">SQuADv1</span><span class=\"p\">,</span> <span class=\"n\">ModelWithTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Document Reader Model. `Span Detector`</span>\n\n<span class=\"sd\">    Implementation of model presented in</span>\n<span class=\"sd\">    Reading Wikipedia to Answer Open-Domain Questions</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1704.00051)</span>\n\n<span class=\"sd\">    - Embedding + features</span>\n<span class=\"sd\">    - Align question embedding</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;QATokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lang_code: Dataset language code [en|ko]</span>\n<span class=\"sd\">        aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</span>\n<span class=\"sd\">            captures the similarity between pi and each question words q_j.</span>\n<span class=\"sd\">            these features add soft alignments between similar but non-identical words (e.g., car and vehicle)</span>\n<span class=\"sd\">            it only apply to &#39;context_embed&#39;.</span>\n<span class=\"sd\">        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}</span>\n<span class=\"sd\">        model_dim: the number of model dimension</span>\n<span class=\"sd\">        dropout: the dropout probability</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">token_embedder</span><span class=\"p\">,</span>\n        <span class=\"n\">lang_code</span><span class=\"o\">=</span><span class=\"s2\">&quot;en&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">aligned_query_embedding</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">model_dim</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.3</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">DrQA</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_embedder</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span> <span class=\"o\">=</span> <span class=\"n\">aligned_query_embedding</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">answer_maxlen</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context_embed_dim</span><span class=\"p\">,</span> <span class=\"n\">query_embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span><span class=\"o\">.</span><span class=\"n\">get_embed_dim</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span><span class=\"p\">:</span>\n            <span class=\"n\">context_embed_dim</span> <span class=\"o\">+=</span> <span class=\"n\">query_embed_dim</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">paragraph_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">query_embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_att</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">LinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">model_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_attn</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">BilinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">model_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">end_attn</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">BilinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">model_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"DrQA.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.drqa.DrQA.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">                {&quot;feature_name1&quot;: {</span>\n<span class=\"sd\">                     &quot;token_name1&quot;: tensor,</span>\n<span class=\"sd\">                     &quot;toekn_name2&quot;: tensor},</span>\n<span class=\"sd\">                 &quot;feature_name2&quot;: ...}</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">                {&quot;label_name1&quot;: tensor,</span>\n<span class=\"sd\">                 &quot;label_name2&quot;: tensor}</span>\n<span class=\"sd\">                 Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - start_logits: representing unnormalized log probabilities of the span start position.</span>\n<span class=\"sd\">            - end_logits: representing unnormalized log probabilities of the span end position.</span>\n<span class=\"sd\">            - best_span: the string from the original passage that the model thinks is the best answer to the question.</span>\n<span class=\"sd\">            - data_idx: the question id, mapping with answer</span>\n<span class=\"sd\">            - loss: A scalar loss to be optimised.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span>  <span class=\"c1\"># aka paragraph</span>\n        <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward</span>\n        <span class=\"n\">context_seq_config</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span>\n        <span class=\"n\">query_seq_config</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Embedding</span>\n        <span class=\"n\">query_params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_word&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_tuning&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}}</span>\n        <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span><span class=\"p\">(</span>\n            <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">,</span> <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"n\">query_params</span><span class=\"p\">,</span> <span class=\"n\">query_align</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">context_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n        <span class=\"n\">query_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">query_embed</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># RNN (LSTM)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">paragraph_rnn</span><span class=\"p\">,</span> <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">context_seq_config</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">context_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"n\">query_encoded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_rnn</span><span class=\"p\">,</span> <span class=\"n\">query_embed</span><span class=\"p\">,</span> <span class=\"n\">query_seq_config</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># (B, Q_L, H*2)</span>\n        <span class=\"n\">query_encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">query_encoded</span><span class=\"p\">)</span>\n\n        <span class=\"n\">query_attention</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_att</span><span class=\"p\">(</span><span class=\"n\">query_encoded</span><span class=\"p\">,</span> <span class=\"n\">query_mask</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, Q_L)</span>\n        <span class=\"n\">query_att_sum</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">query_attention</span><span class=\"p\">,</span> <span class=\"n\">query_encoded</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, H*2)</span>\n\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_attn</span><span class=\"p\">(</span><span class=\"n\">context_encoded</span><span class=\"p\">,</span> <span class=\"n\">query_att_sum</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">end_attn</span><span class=\"p\">(</span><span class=\"n\">context_encoded</span><span class=\"p\">,</span> <span class=\"n\">query_att_sum</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Masked Value</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_best_span</span><span class=\"p\">(</span>\n                <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_start_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_end_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/reading_comprehension/mixin.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.reading_comprehension.mixin &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.reading_comprehension.mixin</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.reading_comprehension.mixin</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"k\">import</span> <span class=\"n\">OrderedDict</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">arguments_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric</span> <span class=\"k\">import</span> <span class=\"n\">korquad_v1_official</span><span class=\"p\">,</span> <span class=\"n\">squad_v1_official</span><span class=\"p\">,</span> <span class=\"n\">squad_v2_official</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelBase</span>\n\n\n<div class=\"viewcode-block\" id=\"ReadingComprehension\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.ReadingComprehension\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ReadingComprehension</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Reading Comprehension Mixin Class</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;RCTokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n<div class=\"viewcode-block\" id=\"ReadingComprehension.get_best_span\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.ReadingComprehension.get_best_span\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_best_span</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Take argmax of constrained score_s * score_e.</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            span_start_logits: independent start logits</span>\n<span class=\"sd\">            span_end_logits: independent end logits</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            answer_maxlen: max span length to consider (default is None -&gt; All)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">B</span> <span class=\"o\">=</span> <span class=\"n\">span_start_logits</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n        <span class=\"n\">best_word_span</span> <span class=\"o\">=</span> <span class=\"n\">span_start_logits</span><span class=\"o\">.</span><span class=\"n\">new_zeros</span><span class=\"p\">((</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">),</span> <span class=\"n\">dtype</span><span class=\"o\">=</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">)</span>\n\n        <span class=\"n\">score_starts</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">score_ends</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">max_len</span> <span class=\"o\">=</span> <span class=\"n\">answer_maxlen</span> <span class=\"ow\">or</span> <span class=\"n\">score_starts</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">score_starts</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)):</span>\n            <span class=\"c1\"># Outer product of scores to get full p_s * p_e matrix</span>\n            <span class=\"n\">scores</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">ger</span><span class=\"p\">(</span><span class=\"n\">score_starts</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">],</span> <span class=\"n\">score_ends</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">])</span>\n\n            <span class=\"c1\"># Zero out negative length and over-length span scores</span>\n            <span class=\"n\">scores</span><span class=\"o\">.</span><span class=\"n\">triu_</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">tril_</span><span class=\"p\">(</span><span class=\"n\">max_len</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># Take argmax or top n</span>\n            <span class=\"n\">scores</span> <span class=\"o\">=</span> <span class=\"n\">scores</span><span class=\"o\">.</span><span class=\"n\">detach</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">cpu</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">numpy</span><span class=\"p\">()</span>\n            <span class=\"n\">scores_flat</span> <span class=\"o\">=</span> <span class=\"n\">scores</span><span class=\"o\">.</span><span class=\"n\">flatten</span><span class=\"p\">()</span>\n\n            <span class=\"n\">idx_sort</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">argmax</span><span class=\"p\">(</span><span class=\"n\">scores_flat</span><span class=\"p\">)]</span>\n\n            <span class=\"n\">s_idx</span><span class=\"p\">,</span> <span class=\"n\">e_idx</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">unravel_index</span><span class=\"p\">(</span><span class=\"n\">idx_sort</span><span class=\"p\">,</span> <span class=\"n\">scores</span><span class=\"o\">.</span><span class=\"n\">shape</span><span class=\"p\">)</span>\n            <span class=\"n\">best_word_span</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">s_idx</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span>\n            <span class=\"n\">best_word_span</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">e_idx</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">best_word_span</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_make_span_metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; span accuracy metrics &quot;&quot;&quot;</span>\n        <span class=\"n\">start_accuracy</span><span class=\"p\">,</span> <span class=\"n\">end_accuracy</span><span class=\"p\">,</span> <span class=\"n\">span_accuracy</span> <span class=\"o\">=</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">preds</span> <span class=\"ow\">in</span> <span class=\"n\">predictions</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span><span class=\"p\">)</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_ground_truths</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n            <span class=\"n\">start_acc</span> <span class=\"o\">=</span> <span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"n\">preds</span><span class=\"p\">[</span><span class=\"s2\">&quot;pred_span_start&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"n\">answer_start</span> <span class=\"k\">else</span> <span class=\"mi\">0</span>\n            <span class=\"n\">end_acc</span> <span class=\"o\">=</span> <span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"n\">preds</span><span class=\"p\">[</span><span class=\"s2\">&quot;pred_span_end&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"n\">answer_end</span> <span class=\"k\">else</span> <span class=\"mi\">0</span>\n            <span class=\"n\">span_acc</span> <span class=\"o\">=</span> <span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"n\">start_acc</span> <span class=\"o\">==</span> <span class=\"mi\">1</span> <span class=\"ow\">and</span> <span class=\"n\">end_acc</span> <span class=\"o\">==</span> <span class=\"mi\">1</span> <span class=\"k\">else</span> <span class=\"mi\">0</span>\n\n            <span class=\"n\">start_accuracy</span> <span class=\"o\">+=</span> <span class=\"n\">start_acc</span>\n            <span class=\"n\">end_accuracy</span> <span class=\"o\">+=</span> <span class=\"n\">end_acc</span>\n            <span class=\"n\">span_accuracy</span> <span class=\"o\">+=</span> <span class=\"n\">span_acc</span>\n\n        <span class=\"n\">start_accuracy</span> <span class=\"o\">=</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"n\">start_accuracy</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"p\">)</span>\n        <span class=\"n\">end_accuracy</span> <span class=\"o\">=</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"n\">end_accuracy</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"p\">)</span>\n        <span class=\"n\">span_accuracy</span> <span class=\"o\">=</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"n\">span_accuracy</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;start_acc&quot;</span><span class=\"p\">:</span> <span class=\"n\">start_accuracy</span><span class=\"p\">,</span> <span class=\"s2\">&quot;end_acc&quot;</span><span class=\"p\">:</span> <span class=\"n\">end_accuracy</span><span class=\"p\">,</span> <span class=\"s2\">&quot;span_acc&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_accuracy</span><span class=\"p\">}</span>\n\n<div class=\"viewcode-block\" id=\"ReadingComprehension.make_predictions\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.ReadingComprehension.make_predictions\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_predictions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Make predictions with model&#39;s output_dict</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            output_dict: model&#39;s output dictionary consisting of</span>\n<span class=\"sd\">                - data_idx: question id</span>\n<span class=\"sd\">                - best_span: calculate the span_start_logits and span_end_logits to what is the best span</span>\n<span class=\"sd\">                - start_logits: span start logits</span>\n<span class=\"sd\">                - end_logits: span end logits</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (question id)</span>\n<span class=\"sd\">                - value: consisting of dictionary</span>\n<span class=\"sd\">                    predict_text, pred_span_start, pred_span_end, span_start_prob, span_end_prob</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">best_word_span</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">OrderedDict</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span>\n                <span class=\"p\">(</span>\n                    <span class=\"n\">index</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">(),</span>\n                    <span class=\"p\">{</span>\n                        <span class=\"s2\">&quot;predict_text&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_text_with_index</span><span class=\"p\">(</span>\n                            <span class=\"n\">index</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">(),</span> <span class=\"n\">best_span</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">best_span</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n                        <span class=\"p\">),</span>\n                        <span class=\"s2\">&quot;pred_span_start&quot;</span><span class=\"p\">:</span> <span class=\"n\">best_span</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span>\n                        <span class=\"s2\">&quot;pred_span_end&quot;</span><span class=\"p\">:</span> <span class=\"n\">best_span</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span>\n                        <span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">start_logits</span><span class=\"p\">,</span>\n                        <span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">end_logits</span><span class=\"p\">,</span>\n                    <span class=\"p\">},</span>\n                <span class=\"p\">)</span>\n                <span class=\"k\">for</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">best_span</span><span class=\"p\">,</span> <span class=\"n\">start_logits</span><span class=\"p\">,</span> <span class=\"n\">end_logits</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span>\n                    <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">data_indices</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span>\n                    <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">best_word_span</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span>\n                    <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span>\n                    <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span>\n                <span class=\"p\">)</span>\n            <span class=\"p\">]</span>\n        <span class=\"p\">)</span></div>\n\n    <span class=\"nd\">@arguments_required</span><span class=\"p\">([</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;question&quot;</span><span class=\"p\">])</span>\n    <span class=\"k\">def</span> <span class=\"nf\">predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">,</span> <span class=\"n\">arguments</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Inference by raw_feature</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            output_dict: model&#39;s output dictionary consisting of</span>\n<span class=\"sd\">                - data_idx: question id</span>\n<span class=\"sd\">                - best_span: calculate the span_start_logits and span_end_logits to what is the best span</span>\n<span class=\"sd\">            arguments: arguments dictionary consisting of user_input</span>\n<span class=\"sd\">            helper: dictionary for helping get answer</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            span: predict best_span</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">span_start</span><span class=\"p\">,</span> <span class=\"n\">span_end</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">)</span>\n        <span class=\"n\">word_start</span> <span class=\"o\">=</span> <span class=\"n\">span_start</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"n\">word_end</span> <span class=\"o\">=</span> <span class=\"n\">span_end</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n\n        <span class=\"n\">text_span</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;text_span&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">char_start</span> <span class=\"o\">=</span> <span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"n\">word_start</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">char_end</span> <span class=\"o\">=</span> <span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"n\">word_end</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n\n        <span class=\"n\">context_text</span> <span class=\"o\">=</span> <span class=\"n\">arguments</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">answer_text</span> <span class=\"o\">=</span> <span class=\"n\">context_text</span><span class=\"p\">[</span><span class=\"n\">char_start</span><span class=\"p\">:</span><span class=\"n\">char_end</span><span class=\"p\">]</span>\n\n        <span class=\"n\">start_logit</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">end_logit</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n        <span class=\"n\">score</span> <span class=\"o\">=</span> <span class=\"n\">start_logit</span><span class=\"p\">[</span><span class=\"n\">span_start</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">end_logit</span><span class=\"p\">[</span><span class=\"n\">span_end</span><span class=\"p\">]</span>\n        <span class=\"n\">score</span> <span class=\"o\">=</span> <span class=\"n\">score</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">:</span> <span class=\"n\">answer_text</span><span class=\"p\">,</span> <span class=\"s2\">&quot;score&quot;</span><span class=\"p\">:</span> <span class=\"n\">score</span><span class=\"p\">}</span>\n\n<div class=\"viewcode-block\" id=\"ReadingComprehension.print_examples\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.ReadingComprehension.print_examples\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">print_examples</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Print evaluation examples</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            index: data index</span>\n<span class=\"sd\">            inputs: mini-batch inputs</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (question id)</span>\n<span class=\"sd\">                - value: consisting of dictionary</span>\n<span class=\"sd\">                    predict_text, pred_span_start, pred_span_end, span_start_prob, span_end_prob</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            print(Context, Question, Answers and Predict)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">data_index</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">][</span><span class=\"n\">index</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;#&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">qid</span><span class=\"p\">:</span>  <span class=\"c1\"># bert case (qid#index)</span>\n            <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"n\">qid</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;#&quot;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">helper</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">answers</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">qid</span><span class=\"p\">][</span><span class=\"s2\">&quot;answers&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">predict_text</span> <span class=\"o\">=</span> <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">data_index</span><span class=\"p\">][</span><span class=\"s2\">&quot;predict_text&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"nb\">print</span><span class=\"p\">()</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Context:&quot;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Question:&quot;</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Answers:&quot;</span><span class=\"p\">,</span> <span class=\"n\">answers</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Predict:&quot;</span><span class=\"p\">,</span> <span class=\"n\">predict_text</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"ReadingComprehension.write_predictions\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.ReadingComprehension.write_predictions\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">write_predictions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">is_dict</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"k\">pass</span></div></div>\n        <span class=\"c1\"># TODO: start and end logits (TypeError: Object of type &#39;Tensor&#39; is not JSON serializable)</span>\n        <span class=\"c1\"># try:</span>\n            <span class=\"c1\"># super(ReadingComprehension, self).write_predictions(</span>\n                <span class=\"c1\"># predictions, file_path=file_path, is_dict=is_dict</span>\n            <span class=\"c1\"># )</span>\n        <span class=\"c1\"># except AttributeError:</span>\n            <span class=\"c1\"># # TODO: Need to Fix</span>\n            <span class=\"c1\"># model_base = ModelBase()</span>\n            <span class=\"c1\"># model_base._log_dir = self._log_dir</span>\n            <span class=\"c1\"># model_base._train_counter = self._train_counter</span>\n            <span class=\"c1\"># model_base.training = self.training</span>\n            <span class=\"c1\"># model_base.write_predictions(predictions, file_path=file_path, is_dict=is_dict)</span>\n\n\n<div class=\"viewcode-block\" id=\"SQuADv1\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv1\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SQuADv1</span><span class=\"p\">(</span><span class=\"n\">ReadingComprehension</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Reading Comprehension Mixin Class</span>\n<span class=\"sd\">        with SQuAD v1.1 evaluation</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;QATokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n<div class=\"viewcode-block\" id=\"SQuADv1.make_metrics\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv1.make_metrics\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Make metrics with prediction dictionary</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (question id)</span>\n<span class=\"sd\">                - value: (predict_text, pred_span_start, pred_span_end)</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            metrics: metric dictionary consisting of</span>\n<span class=\"sd\">                - &#39;em&#39;: exact_match (SQuAD v1.1 official evaluation)</span>\n<span class=\"sd\">                - &#39;f1&#39;: f1 (SQuAD v1.1 official evaluation)</span>\n<span class=\"sd\">                - &#39;start_acc&#39;: span_start accuracy</span>\n<span class=\"sd\">                - &#39;end_acc&#39;: span_end accuracy</span>\n<span class=\"sd\">                - &#39;span_acc&#39;: span accuracy (start and end)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">preds</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">for</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">prediction</span> <span class=\"ow\">in</span> <span class=\"n\">predictions</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span><span class=\"p\">)</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_ground_truths</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n            <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n            <span class=\"n\">preds</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;predict_text&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">write_predictions</span><span class=\"p\">(</span><span class=\"n\">preds</span><span class=\"p\">)</span>\n\n        <span class=\"n\">squad_offical_metrics</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_metrics_with_official</span><span class=\"p\">(</span><span class=\"n\">preds</span><span class=\"p\">)</span>\n\n        <span class=\"n\">metrics</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_span_metrics</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">)</span>\n        <span class=\"n\">metrics</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">squad_offical_metrics</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">metrics</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_make_metrics_with_official</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; SQuAD v1.1 official evaluation &quot;&quot;&quot;</span>\n        <span class=\"n\">dataset</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">raw_dataset</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span><span class=\"o\">.</span><span class=\"n\">startswith</span><span class=\"p\">(</span><span class=\"s2\">&quot;ko&quot;</span><span class=\"p\">):</span>\n            <span class=\"n\">scores</span> <span class=\"o\">=</span> <span class=\"n\">korquad_v1_official</span><span class=\"o\">.</span><span class=\"n\">evaluate</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">scores</span> <span class=\"o\">=</span> <span class=\"n\">squad_v1_official</span><span class=\"o\">.</span><span class=\"n\">evaluate</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">scores</span></div>\n\n\n<div class=\"viewcode-block\" id=\"SQuADv1ForBert\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv1ForBert\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SQuADv1ForBert</span><span class=\"p\">(</span><span class=\"n\">SQuADv1</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Reading Comprehension Mixin Class</span>\n<span class=\"sd\">        with SQuAD v1.1 evaluation</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;QATokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n<div class=\"viewcode-block\" id=\"SQuADv1ForBert.make_metrics\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv1ForBert.make_metrics\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; BERT predictions need to get nbest result &quot;&quot;&quot;</span>\n\n        <span class=\"n\">best_predictions</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">for</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">prediction</span> <span class=\"ow\">in</span> <span class=\"n\">predictions</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n            <span class=\"n\">predict_text</span> <span class=\"o\">=</span> <span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;predict_text&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">start_logit</span> <span class=\"o\">=</span> <span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">][</span><span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;pred_span_start&quot;</span><span class=\"p\">]]</span>\n            <span class=\"n\">end_logit</span> <span class=\"o\">=</span> <span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">][</span><span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;pred_span_end&quot;</span><span class=\"p\">]]</span>\n            <span class=\"n\">predict_score</span> <span class=\"o\">=</span> <span class=\"n\">start_logit</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">end_logit</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">qid</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">best_predictions</span><span class=\"p\">:</span>\n                <span class=\"n\">best_predictions</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"n\">best_predictions</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"n\">predict_text</span><span class=\"p\">,</span> <span class=\"n\">predict_score</span><span class=\"p\">))</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">qid</span><span class=\"p\">,</span> <span class=\"n\">predictions</span> <span class=\"ow\">in</span> <span class=\"n\">best_predictions</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">sorted_predictions</span> <span class=\"o\">=</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">reverse</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n            <span class=\"n\">best_predictions</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">sorted_predictions</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">write_predictions</span><span class=\"p\">(</span><span class=\"n\">best_predictions</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_metrics_with_official</span><span class=\"p\">(</span><span class=\"n\">best_predictions</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"SQuADv1ForBert.predict\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv1ForBert.predict\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">,</span> <span class=\"n\">arguments</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Inference by raw_feature</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            output_dict: model&#39;s output dictionary consisting of</span>\n<span class=\"sd\">                - data_idx: question id</span>\n<span class=\"sd\">                - best_span: calculate the span_start_logits and span_end_logits to what is the best span</span>\n<span class=\"sd\">            arguments: arguments dictionary consisting of user_input</span>\n<span class=\"sd\">            helper: dictionary for helping get answer</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            span: predict best_span</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">context_text</span> <span class=\"o\">=</span> <span class=\"n\">arguments</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">bert_tokens</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_token&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">predictions</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"p\">(</span><span class=\"n\">best_span</span><span class=\"p\">,</span> <span class=\"n\">start_logits</span><span class=\"p\">,</span> <span class=\"n\">end_logits</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">best_span</span><span class=\"p\">,</span> <span class=\"n\">start_logits</span><span class=\"p\">,</span> <span class=\"n\">end_logits</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span>\n                <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span>\n                <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span>\n                <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span>\n            <span class=\"p\">)</span>\n        <span class=\"p\">]</span>\n\n        <span class=\"n\">best_predictions</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">prediction</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">):</span>\n            <span class=\"n\">bert_token</span> <span class=\"o\">=</span> <span class=\"n\">bert_tokens</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">]</span>\n            <span class=\"n\">best_span</span><span class=\"p\">,</span> <span class=\"n\">start_logits</span><span class=\"p\">,</span> <span class=\"n\">end_logits</span> <span class=\"o\">=</span> <span class=\"n\">prediction</span>\n            <span class=\"n\">pred_start</span><span class=\"p\">,</span> <span class=\"n\">pred_end</span> <span class=\"o\">=</span> <span class=\"n\">best_span</span>\n\n            <span class=\"n\">predict_text</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n            <span class=\"k\">if</span> <span class=\"p\">(</span>\n                <span class=\"n\">pred_start</span> <span class=\"o\">&lt;</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_token</span><span class=\"p\">)</span>\n                <span class=\"ow\">and</span> <span class=\"n\">pred_end</span> <span class=\"o\">&lt;</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">bert_token</span><span class=\"p\">)</span>\n                <span class=\"ow\">and</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">pred_start</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n                <span class=\"ow\">and</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">pred_end</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n            <span class=\"p\">):</span>\n                <span class=\"n\">char_start</span> <span class=\"o\">=</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">pred_start</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n                <span class=\"n\">char_end</span> <span class=\"o\">=</span> <span class=\"n\">bert_token</span><span class=\"p\">[</span><span class=\"n\">pred_end</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">text_span</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n                <span class=\"n\">predict_text</span> <span class=\"o\">=</span> <span class=\"n\">context_text</span><span class=\"p\">[</span><span class=\"n\">char_start</span><span class=\"p\">:</span><span class=\"n\">char_end</span><span class=\"p\">]</span>\n\n            <span class=\"n\">start_logit</span> <span class=\"o\">=</span> <span class=\"n\">start_logits</span><span class=\"p\">[</span><span class=\"n\">pred_start</span><span class=\"p\">]</span>\n            <span class=\"n\">end_logit</span> <span class=\"o\">=</span> <span class=\"n\">end_logits</span><span class=\"p\">[</span><span class=\"n\">pred_end</span><span class=\"p\">]</span>\n            <span class=\"n\">predict_score</span> <span class=\"o\">=</span> <span class=\"n\">start_logit</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">end_logit</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n\n            <span class=\"n\">best_predictions</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"n\">predict_text</span><span class=\"p\">,</span> <span class=\"n\">predict_score</span><span class=\"p\">))</span>\n\n        <span class=\"n\">sorted_predictions</span> <span class=\"o\">=</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">best_predictions</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">reverse</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">:</span> <span class=\"n\">sorted_predictions</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"s2\">&quot;score&quot;</span><span class=\"p\">:</span> <span class=\"n\">sorted_predictions</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]}</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"SQuADv2\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv2\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SQuADv2</span><span class=\"p\">(</span><span class=\"n\">ReadingComprehension</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Reading Comprehension Mixin Class</span>\n<span class=\"sd\">        with SQuAD v2.0 evaluation</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;RCTokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n<div class=\"viewcode-block\" id=\"SQuADv2.make_metrics\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv2.make_metrics\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Make metrics with prediction dictionary</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (question id)</span>\n<span class=\"sd\">                - value: consisting of dictionary</span>\n<span class=\"sd\">                    predict_text, pred_span_start, pred_span_end, span_start_prob, span_end_prob</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            metrics: metric dictionary consisting of</span>\n<span class=\"sd\">                - &#39;start_acc&#39;: span_start accuracy</span>\n<span class=\"sd\">                - &#39;end_acc&#39;: span_end accuracy</span>\n<span class=\"sd\">                - &#39;span_acc&#39;: span accuracy (start and end)</span>\n<span class=\"sd\">                - &#39;em&#39;: exact_match (SQuAD v2.0 official evaluation)</span>\n<span class=\"sd\">                - &#39;f1&#39;: f1 (SQuAD v2.0 official evaluation)</span>\n<span class=\"sd\">                - &#39;HasAns_exact&#39;: has answer exact_match</span>\n<span class=\"sd\">                - &#39;HasAns_f1&#39;: has answer f1</span>\n<span class=\"sd\">                - &#39;NoAns_exact&#39;: no answer exact_match</span>\n<span class=\"sd\">                - &#39;NoAns_f1&#39;: no answer f1</span>\n<span class=\"sd\">                - &#39;best_exact&#39;: best exact_match score with best_exact_thresh</span>\n<span class=\"sd\">                - &#39;best_exact_thresh&#39;: best exact_match answerable threshold</span>\n<span class=\"sd\">                - &#39;best_f1&#39;: best f1 score with best_f1_thresh</span>\n<span class=\"sd\">                - &#39;best_f1_thresh&#39;: best f1 answerable threshold</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">preds</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span> <span class=\"o\">=</span> <span class=\"p\">{},</span> <span class=\"p\">{}</span>\n        <span class=\"k\">for</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">prediction</span> <span class=\"ow\">in</span> <span class=\"n\">predictions</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">answer_start</span><span class=\"p\">,</span> <span class=\"n\">answer_end</span><span class=\"p\">)</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_ground_truths</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># Metrics (SQuAD official metric)</span>\n            <span class=\"n\">predict_text</span> <span class=\"o\">=</span> <span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;predict_text&quot;</span><span class=\"p\">]</span>\n            <span class=\"k\">if</span> <span class=\"n\">predict_text</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;&lt;noanswer&gt;&quot;</span><span class=\"p\">:</span>\n                <span class=\"n\">predict_text</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n\n            <span class=\"n\">qid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_qid</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n            <span class=\"n\">preds</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">predict_text</span>\n\n            <span class=\"n\">span_start_probs</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">span_end_probs</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n            <span class=\"n\">start_no_prob</span> <span class=\"o\">=</span> <span class=\"n\">span_start_probs</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n            <span class=\"n\">end_no_prob</span> <span class=\"o\">=</span> <span class=\"n\">span_end_probs</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n            <span class=\"n\">no_answer_prob</span> <span class=\"o\">=</span> <span class=\"n\">start_no_prob</span> <span class=\"o\">*</span> <span class=\"n\">end_no_prob</span>\n            <span class=\"n\">na_probs</span><span class=\"p\">[</span><span class=\"n\">qid</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">no_answer_prob</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">write_predictions</span><span class=\"p\">(</span><span class=\"n\">preds</span><span class=\"p\">)</span>\n\n        <span class=\"n\">model_type</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;train&quot;</span> <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;valid&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">write_predictions</span><span class=\"p\">(</span>\n            <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"s2\">&quot;na_probs-</span><span class=\"si\">{model_type}</span><span class=\"s2\">-{self._train_counter.get_display()}.json&quot;</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">squad_offical_metrics</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_metrics_with_official</span><span class=\"p\">(</span><span class=\"n\">preds</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">)</span>\n\n        <span class=\"n\">metrics</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_span_metrics</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">)</span>\n        <span class=\"n\">metrics</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">squad_offical_metrics</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">metrics</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_make_metrics_with_official</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">na_prob_thresh</span><span class=\"o\">=</span><span class=\"mf\">1.0</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; SQuAD 2.0 official evaluation &quot;&quot;&quot;</span>\n        <span class=\"n\">dataset</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">raw_dataset</span>\n\n        <span class=\"n\">squad_scores</span> <span class=\"o\">=</span> <span class=\"n\">squad_v2_official</span><span class=\"o\">.</span><span class=\"n\">evaluate</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">,</span> <span class=\"n\">na_probs</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">)</span>\n        <span class=\"n\">squad_scores</span><span class=\"p\">[</span><span class=\"s2\">&quot;em&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">squad_scores</span><span class=\"p\">[</span><span class=\"s2\">&quot;exact&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">remove_keys</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;total&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;exact&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;HasAns_total&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;NoAns_total&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">remove_keys</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">squad_scores</span><span class=\"p\">:</span>\n                <span class=\"k\">del</span> <span class=\"n\">squad_scores</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">squad_scores</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/reading_comprehension/qanet.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.reading_comprehension.qanet &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.reading_comprehension.qanet</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.reading_comprehension.qanet</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.reading_comprehension.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SQuADv1</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.attention</span> <span class=\"k\">as</span> <span class=\"nn\">attention</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.encoder</span> <span class=\"k\">as</span> <span class=\"nn\">encoder</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.conv</span> <span class=\"k\">as</span> <span class=\"nn\">conv</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.layer</span> <span class=\"k\">as</span> <span class=\"nn\">layer</span>\n\n\n<div class=\"viewcode-block\" id=\"QANet\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.qanet.QANet\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:qanet&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">QANet</span><span class=\"p\">(</span><span class=\"n\">SQuADv1</span><span class=\"p\">,</span> <span class=\"n\">ModelWithTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Document Reader Model. `Span Detector`</span>\n\n<span class=\"sd\">        Implementation of model presented in</span>\n<span class=\"sd\">        QANet:Combining Local Convolution with Global Self-Attention for Reading Comprehension</span>\n<span class=\"sd\">        (https://arxiv.org/abs/1804.09541)</span>\n\n<span class=\"sd\">        - Input Embedding Layer</span>\n<span class=\"sd\">        - Embedding Encoder Layer</span>\n<span class=\"sd\">        - Context-Query Attention Layer</span>\n<span class=\"sd\">        - Model Encoder Layer</span>\n<span class=\"sd\">        - Output Layer</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            token_embedder: &#39;QATokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            lang_code: Dataset language code [en|ko]</span>\n<span class=\"sd\">            aligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</span>\n<span class=\"sd\">                captures the similarity between pi and each question words q_j.</span>\n<span class=\"sd\">                these features add soft alignments between similar but non-identical words (e.g., car and vehicle)</span>\n<span class=\"sd\">                it only apply to &#39;context_embed&#39;.</span>\n<span class=\"sd\">            answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}</span>\n<span class=\"sd\">            model_dim: the number of model dimension</span>\n\n<span class=\"sd\">            * Encoder Block Parameters (embedding, modeling)</span>\n<span class=\"sd\">              kernel_size: convolution kernel size in encoder block</span>\n<span class=\"sd\">              num_head: the number of multi-head attention&#39;s head</span>\n<span class=\"sd\">              num_conv_block: the number of convolution block in encoder block</span>\n<span class=\"sd\">                  [Layernorm -&gt; Conv (residual)]</span>\n<span class=\"sd\">              num_encoder_block: the number of the encoder block</span>\n<span class=\"sd\">                  [position_encoding -&gt; [n repeat conv block] -&gt; Layernorm -&gt; Self-attention (residual)</span>\n<span class=\"sd\">                   -&gt; Layernorm -&gt; Feedforward (residual)]</span>\n\n<span class=\"sd\">            dropout: the dropout probability</span>\n<span class=\"sd\">            layer_dropout: the layer dropout probability</span>\n<span class=\"sd\">                (cf. Deep Networks with Stochastic Depth(https://arxiv.org/abs/1603.09382) )</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">token_embedder</span><span class=\"p\">,</span>\n        <span class=\"n\">lang_code</span><span class=\"o\">=</span><span class=\"s2\">&quot;en&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">aligned_query_embedding</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">model_dim</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">,</span>\n        <span class=\"n\">kernel_size_in_embedding</span><span class=\"o\">=</span><span class=\"mi\">7</span><span class=\"p\">,</span>\n        <span class=\"n\">num_head_in_embedding</span><span class=\"o\">=</span><span class=\"mi\">8</span><span class=\"p\">,</span>\n        <span class=\"n\">num_conv_block_in_embedding</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span>\n        <span class=\"n\">num_embedding_encoder_block</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">kernel_size_in_modeling</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">,</span>\n        <span class=\"n\">num_head_in_modeling</span><span class=\"o\">=</span><span class=\"mi\">8</span><span class=\"p\">,</span>\n        <span class=\"n\">num_conv_block_in_modeling</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">num_modeling_encoder_block</span><span class=\"o\">=</span><span class=\"mi\">7</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.1</span><span class=\"p\">,</span>\n        <span class=\"n\">layer_dropout</span><span class=\"o\">=</span><span class=\"mf\">0.9</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">QANet</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_embedder</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span> <span class=\"o\">=</span> <span class=\"n\">aligned_query_embedding</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">answer_maxlen</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span>\n\n        <span class=\"n\">context_embed_dim</span><span class=\"p\">,</span> <span class=\"n\">query_embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span><span class=\"o\">.</span><span class=\"n\">get_embed_dim</span><span class=\"p\">()</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span><span class=\"p\">:</span>\n            <span class=\"n\">context_embed_dim</span> <span class=\"o\">+=</span> <span class=\"n\">query_embed_dim</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">context_embed_dim</span> <span class=\"o\">!=</span> <span class=\"n\">query_embed_dim</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_highway</span> <span class=\"o\">=</span> <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">Highway</span><span class=\"p\">(</span><span class=\"n\">context_embed_dim</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_highway</span> <span class=\"o\">=</span> <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">Highway</span><span class=\"p\">(</span><span class=\"n\">query_embed_dim</span><span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_embed_pointwise_conv</span> <span class=\"o\">=</span> <span class=\"n\">conv</span><span class=\"o\">.</span><span class=\"n\">PointwiseConv</span><span class=\"p\">(</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_embed_pointwise_conv</span> <span class=\"o\">=</span> <span class=\"n\">conv</span><span class=\"o\">.</span><span class=\"n\">PointwiseConv</span><span class=\"p\">(</span><span class=\"n\">query_embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">highway</span> <span class=\"o\">=</span> <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">Highway</span><span class=\"p\">(</span><span class=\"n\">context_embed_dim</span><span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_highway</span> <span class=\"o\">=</span> <span class=\"n\">highway</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_highway</span> <span class=\"o\">=</span> <span class=\"n\">highway</span>\n\n            <span class=\"n\">embed_pointwise_conv</span> <span class=\"o\">=</span> <span class=\"n\">conv</span><span class=\"o\">.</span><span class=\"n\">PointwiseConv</span><span class=\"p\">(</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_embed_pointwise_conv</span> <span class=\"o\">=</span> <span class=\"n\">embed_pointwise_conv</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_embed_pointwise_conv</span> <span class=\"o\">=</span> <span class=\"n\">embed_pointwise_conv</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_encoder_blocks</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ModuleList</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span>\n                <span class=\"n\">EncoderBlock</span><span class=\"p\">(</span>\n                    <span class=\"n\">model_dim</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n                    <span class=\"n\">kernel_size</span><span class=\"o\">=</span><span class=\"n\">kernel_size_in_embedding</span><span class=\"p\">,</span>\n                    <span class=\"n\">num_head</span><span class=\"o\">=</span><span class=\"n\">num_head_in_embedding</span><span class=\"p\">,</span>\n                    <span class=\"n\">num_conv_block</span><span class=\"o\">=</span><span class=\"n\">num_conv_block_in_modeling</span><span class=\"p\">,</span>\n                    <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n                    <span class=\"n\">layer_dropout</span><span class=\"o\">=</span><span class=\"n\">layer_dropout</span><span class=\"p\">,</span>\n                <span class=\"p\">)</span>\n                <span class=\"k\">for</span> <span class=\"n\">_</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">num_embedding_encoder_block</span><span class=\"p\">)</span>\n            <span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">co_attention</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">CoAttention</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pointwise_conv</span> <span class=\"o\">=</span> <span class=\"n\">conv</span><span class=\"o\">.</span><span class=\"n\">PointwiseConv</span><span class=\"p\">(</span><span class=\"n\">model_dim</span> <span class=\"o\">*</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_encoder_blocks</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ModuleList</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span>\n                <span class=\"n\">EncoderBlock</span><span class=\"p\">(</span>\n                    <span class=\"n\">model_dim</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n                    <span class=\"n\">kernel_size</span><span class=\"o\">=</span><span class=\"n\">kernel_size_in_modeling</span><span class=\"p\">,</span>\n                    <span class=\"n\">num_head</span><span class=\"o\">=</span><span class=\"n\">num_head_in_modeling</span><span class=\"p\">,</span>\n                    <span class=\"n\">num_conv_block</span><span class=\"o\">=</span><span class=\"n\">num_conv_block_in_modeling</span><span class=\"p\">,</span>\n                    <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n                    <span class=\"n\">layer_dropout</span><span class=\"o\">=</span><span class=\"n\">layer_dropout</span><span class=\"p\">,</span>\n                <span class=\"p\">)</span>\n                <span class=\"k\">for</span> <span class=\"n\">_</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">num_modeling_encoder_block</span><span class=\"p\">)</span>\n            <span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"QANet.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.qanet.QANet.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">            * Args:</span>\n<span class=\"sd\">                features: feature dictionary like below.</span>\n<span class=\"sd\">                    {&quot;feature_name1&quot;: {</span>\n<span class=\"sd\">                         &quot;token_name1&quot;: tensor,</span>\n<span class=\"sd\">                         &quot;toekn_name2&quot;: tensor},</span>\n<span class=\"sd\">                     &quot;feature_name2&quot;: ...}</span>\n\n<span class=\"sd\">            * Kwargs:</span>\n<span class=\"sd\">                label: label dictionary like below.</span>\n<span class=\"sd\">                    {&quot;label_name1&quot;: tensor,</span>\n<span class=\"sd\">                     &quot;label_name2&quot;: tensor}</span>\n<span class=\"sd\">                     Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">            * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">                - start_logits: representing unnormalized log probabilities of the span start position.</span>\n<span class=\"sd\">                - end_logits: representing unnormalized log probabilities of the span end position.</span>\n<span class=\"sd\">                - best_span: the string from the original passage that the model thinks is the best answer to the question.</span>\n<span class=\"sd\">                - data_idx: the question id, mapping with answer</span>\n<span class=\"sd\">                - loss: A scalar loss to be optimised.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;context&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># 1. Input Embedding Layer</span>\n        <span class=\"n\">query_params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_word&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;frequent_tuning&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">}}</span>\n        <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span><span class=\"p\">(</span>\n            <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">,</span> <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"n\">query_params</span><span class=\"p\">,</span> <span class=\"n\">query_align</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">aligned_query_embedding</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">context_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n        <span class=\"n\">query_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_highway</span><span class=\"p\">(</span><span class=\"n\">context_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">context_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">context_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_embed_pointwise_conv</span><span class=\"p\">(</span><span class=\"n\">context_embed</span><span class=\"p\">)</span>\n\n        <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_highway</span><span class=\"p\">(</span><span class=\"n\">query_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">query_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_embed_pointwise_conv</span><span class=\"p\">(</span><span class=\"n\">query_embed</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># 2. Embedding Encoder Layer</span>\n        <span class=\"k\">for</span> <span class=\"n\">encoder_block</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_encoder_blocks</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"n\">encoder_block</span><span class=\"p\">(</span><span class=\"n\">context_embed</span><span class=\"p\">)</span>\n            <span class=\"n\">context_embed</span> <span class=\"o\">=</span> <span class=\"n\">context</span>\n\n            <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"n\">encoder_block</span><span class=\"p\">(</span><span class=\"n\">query_embed</span><span class=\"p\">)</span>\n            <span class=\"n\">query_embed</span> <span class=\"o\">=</span> <span class=\"n\">query</span>\n\n        <span class=\"c1\"># 3. Context-Query Attention Layer</span>\n        <span class=\"n\">context_query_attention</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">co_attention</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">query</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">query_mask</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Projection (memory issue)</span>\n        <span class=\"n\">context_query_attention</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pointwise_conv</span><span class=\"p\">(</span><span class=\"n\">context_query_attention</span><span class=\"p\">)</span>\n        <span class=\"n\">context_query_attention</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">context_query_attention</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># 4. Model Encoder Layer</span>\n        <span class=\"n\">model_encoder_block_inputs</span> <span class=\"o\">=</span> <span class=\"n\">context_query_attention</span>\n\n        <span class=\"c1\"># Stacked Model Encoder Block</span>\n        <span class=\"n\">stacked_model_encoder_blocks</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">model_encoder_block</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_encoder_blocks</span><span class=\"p\">):</span>\n                <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">model_encoder_block</span><span class=\"p\">(</span><span class=\"n\">model_encoder_block_inputs</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">)</span>\n                <span class=\"n\">model_encoder_block_inputs</span> <span class=\"o\">=</span> <span class=\"n\">output</span>\n\n            <span class=\"n\">stacked_model_encoder_blocks</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">output</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># 5. Output Layer</span>\n        <span class=\"n\">span_start_inputs</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span><span class=\"n\">stacked_model_encoder_blocks</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">stacked_model_encoder_blocks</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">span_start_inputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">span_start_inputs</span><span class=\"p\">)</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_start_linear</span><span class=\"p\">(</span><span class=\"n\">span_start_inputs</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">span_end_inputs</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span><span class=\"n\">stacked_model_encoder_blocks</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">stacked_model_encoder_blocks</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">span_end_inputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">span_end_inputs</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">span_end_linear</span><span class=\"p\">(</span><span class=\"n\">span_end_inputs</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Masked Value</span>\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_best_span</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_start_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_end_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>  <span class=\"c1\"># NOTE: DataParallel concat Error</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"EncoderBlock\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.qanet.EncoderBlock\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EncoderBlock</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Encoder Block</span>\n\n<span class=\"sd\">        []: residual</span>\n<span class=\"sd\">        position_encoding -&gt; [convolution-layer] x # -&gt; [self-attention-layer] -&gt; [feed-forward-layer]</span>\n\n<span class=\"sd\">        - convolution-layer: depthwise separable convolutions</span>\n<span class=\"sd\">        - self-attention-layer: multi-head attention</span>\n<span class=\"sd\">        - feed-forward-layer: pointwise convolution</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            model_dim: the number of model dimension</span>\n<span class=\"sd\">            num_heads: the number of head in multi-head attention</span>\n<span class=\"sd\">            kernel_size: convolution kernel size</span>\n<span class=\"sd\">            num_conv_block: the number of convolution block</span>\n<span class=\"sd\">            dropout: the dropout probability</span>\n<span class=\"sd\">            layer_dropout: the layer dropout probability</span>\n<span class=\"sd\">                (cf. Deep Networks with Stochastic Depth(https://arxiv.org/abs/1603.09382) )</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">model_dim</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">,</span>\n        <span class=\"n\">num_head</span><span class=\"o\">=</span><span class=\"mi\">8</span><span class=\"p\">,</span>\n        <span class=\"n\">kernel_size</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">,</span>\n        <span class=\"n\">num_conv_block</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.1</span><span class=\"p\">,</span>\n        <span class=\"n\">layer_dropout</span><span class=\"o\">=</span><span class=\"mf\">0.9</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">EncoderBlock</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">position_encoding</span> <span class=\"o\">=</span> <span class=\"n\">encoder</span><span class=\"o\">.</span><span class=\"n\">PositionalEncoding</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_conv_block</span> <span class=\"o\">=</span> <span class=\"n\">num_conv_block</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">conv_blocks</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ModuleList</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span><span class=\"n\">conv</span><span class=\"o\">.</span><span class=\"n\">DepSepConv</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">kernel_size</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">_</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">num_conv_block</span><span class=\"p\">)]</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attention</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">MultiHeadAttention</span><span class=\"p\">(</span>\n            <span class=\"n\">num_head</span><span class=\"o\">=</span><span class=\"n\">num_head</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">feedforward_layer</span> <span class=\"o\">=</span> <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">PositionwiseFeedForward</span><span class=\"p\">(</span>\n            <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span> <span class=\"o\">*</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># survival probability for stochastic depth</span>\n        <span class=\"k\">if</span> <span class=\"n\">layer_dropout</span> <span class=\"o\">&lt;</span> <span class=\"mf\">1.0</span><span class=\"p\">:</span>\n            <span class=\"n\">L</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">num_conv_block</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">2</span> <span class=\"o\">-</span> <span class=\"mi\">1</span>\n            <span class=\"n\">layer_dropout_prob</span> <span class=\"o\">=</span> <span class=\"nb\">round</span><span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">/</span> <span class=\"n\">L</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">layer_dropout</span><span class=\"p\">),</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">residuals</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ModuleList</span><span class=\"p\">(</span>\n                <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">ResidualConnection</span><span class=\"p\">(</span>\n                    <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">layer_dropout</span><span class=\"o\">=</span><span class=\"n\">layer_dropout_prob</span><span class=\"p\">,</span> <span class=\"n\">layernorm</span><span class=\"o\">=</span><span class=\"kc\">True</span>\n                <span class=\"p\">)</span>\n                <span class=\"k\">for</span> <span class=\"n\">l</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">num_conv_block</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">residuals</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ModuleList</span><span class=\"p\">(</span>\n                <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">ResidualConnection</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">layernorm</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n                <span class=\"k\">for</span> <span class=\"n\">l</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">num_conv_block</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n            <span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"EncoderBlock.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.qanet.EncoderBlock.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Positional Encoding</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">position_encoding</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Convolution Block (LayerNorm -&gt; Conv)</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">conv_block</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">conv_blocks</span><span class=\"p\">):</span>\n            <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">residuals</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">](</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">sub_layer_fn</span><span class=\"o\">=</span><span class=\"n\">conv_block</span><span class=\"p\">)</span>\n            <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># LayerNorm -&gt; Self-attention</span>\n        <span class=\"n\">self_attention</span> <span class=\"o\">=</span> <span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attention</span><span class=\"p\">(</span><span class=\"n\">q</span><span class=\"o\">=</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"o\">=</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"o\">=</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"o\">=</span><span class=\"n\">mask</span><span class=\"p\">)</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">residuals</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_conv_block</span><span class=\"p\">](</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">sub_layer_fn</span><span class=\"o\">=</span><span class=\"n\">self_attention</span><span class=\"p\">)</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># LayerNorm -&gt; Feedforward layer</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">residuals</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_conv_block</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">](</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">sub_layer_fn</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">feedforward_layer</span><span class=\"p\">)</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">x</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/reading_comprehension/roberta.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.reading_comprehension.roberta &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.reading_comprehension.roberta</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.reading_comprehension.roberta</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">RobertaModel</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithoutTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.reading_comprehension.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SQuADv1ForBert</span>\n\n\n<div class=\"viewcode-block\" id=\"RoBertaForQA\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.RoBertaForQA\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:roberta_for_qa&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">RoBertaForQA</span><span class=\"p\">(</span><span class=\"n\">SQuADv1ForBert</span><span class=\"p\">,</span> <span class=\"n\">ModelWithoutTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Document Reader Model. `Span Detector`</span>\n\n<span class=\"sd\">    Implementation of model presented in</span>\n<span class=\"sd\">    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1810.04805)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;QATokenEmbedder&#39;, Used to embed the &#39;context&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lang_code: Dataset language code [en|ko]</span>\n<span class=\"sd\">        pretrained_model_name: the name of a pre-trained model</span>\n<span class=\"sd\">        answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">lang_code</span><span class=\"o\">=</span><span class=\"s2\">&quot;en&quot;</span><span class=\"p\">,</span> <span class=\"n\">pretrained_model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">RoBertaForQA</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lang_code</span> <span class=\"o\">=</span> <span class=\"n\">lang_code</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_pytorch_transformers</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>  <span class=\"c1\"># for optimizer&#39;s model parameters</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">answer_maxlen</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">RobertaModel</span><span class=\"o\">.</span><span class=\"n\">from_pretrained</span><span class=\"p\">(</span>\n            <span class=\"n\">pretrained_model_name</span><span class=\"p\">,</span> <span class=\"n\">cache_dir</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">ROOT</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qa_outputs</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">num_labels</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"RoBertaForQA.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.reading_comprehension.html#claf.model.reading_comprehension.RoBertaForQA.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">                {&quot;feature_name1&quot;: {</span>\n<span class=\"sd\">                     &quot;token_name1&quot;: tensor,</span>\n<span class=\"sd\">                     &quot;toekn_name2&quot;: tensor},</span>\n<span class=\"sd\">                 &quot;feature_name2&quot;: ...}</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">                {&quot;label_name1&quot;: tensor,</span>\n<span class=\"sd\">                 &quot;label_name2&quot;: tensor}</span>\n<span class=\"sd\">                 Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - start_logits: representing unnormalized log probabilities of the span start position.</span>\n<span class=\"sd\">            - end_logits: representing unnormalized log probabilities of the span end position.</span>\n<span class=\"sd\">            - best_span: the string from the original passage that the model thinks is the best answer to the question.</span>\n<span class=\"sd\">            - data_idx: the question id, mapping with answer</span>\n<span class=\"sd\">            - loss: A scalar loss to be optimised.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">bert_inputs</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">attention_mask</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">bert_inputs</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n        <span class=\"n\">outputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">(</span>\n            <span class=\"n\">bert_inputs</span><span class=\"p\">,</span> <span class=\"n\">token_type_ids</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">attention_mask</span><span class=\"o\">=</span><span class=\"n\">attention_mask</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">sequence_output</span> <span class=\"o\">=</span> <span class=\"n\">outputs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">qa_outputs</span><span class=\"p\">(</span><span class=\"n\">sequence_output</span><span class=\"p\">)</span>\n        <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"n\">logits</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">span_start_logits</span> <span class=\"o\">=</span> <span class=\"n\">span_start_logits</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">span_end_logits</span> <span class=\"o\">=</span> <span class=\"n\">span_end_logits</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;start_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_start_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;end_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;best_span&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_best_span</span><span class=\"p\">(</span>\n                <span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_maxlen</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">answer_maxlen</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_start_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;answer_end_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># If we are on multi-GPU, split add a dimension</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">answer_start_idx</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">answer_start_idx</span> <span class=\"o\">=</span> <span class=\"n\">answer_start_idx</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">answer_end_idx</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">answer_end_idx</span> <span class=\"o\">=</span> <span class=\"n\">answer_end_idx</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"c1\"># sometimes the start/end positions are outside our model inputs, we ignore these terms</span>\n            <span class=\"n\">ignored_index</span> <span class=\"o\">=</span> <span class=\"n\">span_start_logits</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n            <span class=\"n\">answer_start_idx</span><span class=\"o\">.</span><span class=\"n\">clamp_</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">ignored_index</span><span class=\"p\">)</span>\n            <span class=\"n\">answer_end_idx</span><span class=\"o\">.</span><span class=\"n\">clamp_</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">ignored_index</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">(</span><span class=\"n\">ignore_index</span><span class=\"o\">=</span><span class=\"n\">ignored_index</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_start_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_start_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">span_end_logits</span><span class=\"p\">,</span> <span class=\"n\">answer_end_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">/=</span> <span class=\"mi\">2</span>  <span class=\"c1\"># (start + end)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/semantic_parsing/mixin.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.semantic_parsing.mixin &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.semantic_parsing.mixin</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.semantic_parsing.mixin</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">arguments_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric</span> <span class=\"k\">import</span> <span class=\"n\">wikisql_official</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric.wikisql_lib.dbengine</span> <span class=\"k\">import</span> <span class=\"n\">DBEngine</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric.wikisql_lib.query</span> <span class=\"k\">import</span> <span class=\"n\">Query</span>\n\n\n<div class=\"viewcode-block\" id=\"WikiSQL\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">WikiSQL</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    WikiSQL Mixin Class</span>\n<span class=\"sd\">        with official evaluation</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;TokenEmbedder&#39;</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">AGG_OPS</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;None&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;MAX&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;MIN&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;COUNT&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;SUM&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;AVG&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">COND_OPS</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;EQL&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;GT&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;LT&quot;</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"WikiSQL.make_metrics\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.make_metrics\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; aggregator, select_column, conditions accuracy &quot;&quot;&quot;</span>\n\n        <span class=\"n\">agg_accuracy</span><span class=\"p\">,</span> <span class=\"n\">sel_accuracy</span><span class=\"p\">,</span> <span class=\"n\">conds_accuracy</span> <span class=\"o\">=</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">pred</span> <span class=\"ow\">in</span> <span class=\"n\">predictions</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">target</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_ground_truth</span><span class=\"p\">(</span><span class=\"n\">index</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># Aggregator, Select_Column, Conditions</span>\n            <span class=\"n\">agg_acc</span> <span class=\"o\">=</span> <span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"n\">pred</span><span class=\"p\">[</span><span class=\"s2\">&quot;query&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;agg&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"n\">target</span><span class=\"p\">[</span><span class=\"s2\">&quot;agg_idx&quot;</span><span class=\"p\">]</span> <span class=\"k\">else</span> <span class=\"mi\">0</span>\n            <span class=\"n\">sel_acc</span> <span class=\"o\">=</span> <span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"n\">pred</span><span class=\"p\">[</span><span class=\"s2\">&quot;query&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;sel&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"n\">target</span><span class=\"p\">[</span><span class=\"s2\">&quot;sel_idx&quot;</span><span class=\"p\">]</span> <span class=\"k\">else</span> <span class=\"mi\">0</span>\n\n            <span class=\"n\">pred_conds</span> <span class=\"o\">=</span> <span class=\"n\">pred</span><span class=\"p\">[</span><span class=\"s2\">&quot;query&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;conds&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">string_set_pred_conds</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">([</span><span class=\"s2\">&quot;#&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">cond</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">cond</span> <span class=\"ow\">in</span> <span class=\"n\">pred_conds</span><span class=\"p\">])</span>\n            <span class=\"n\">target_conds</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                <span class=\"p\">[</span><span class=\"n\">target</span><span class=\"p\">[</span><span class=\"s2\">&quot;conds_col&quot;</span><span class=\"p\">][</span><span class=\"n\">i</span><span class=\"p\">],</span> <span class=\"n\">target</span><span class=\"p\">[</span><span class=\"s2\">&quot;conds_op&quot;</span><span class=\"p\">][</span><span class=\"n\">i</span><span class=\"p\">],</span> <span class=\"n\">target</span><span class=\"p\">[</span><span class=\"s2\">&quot;conds_val_str&quot;</span><span class=\"p\">][</span><span class=\"n\">i</span><span class=\"p\">]]</span>\n                <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">target</span><span class=\"p\">[</span><span class=\"s2\">&quot;conds_num&quot;</span><span class=\"p\">])</span>\n            <span class=\"p\">]</span>\n            <span class=\"n\">string_set_target_conds</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">(</span>\n                <span class=\"p\">[</span><span class=\"s2\">&quot;#&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">cond</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">cond</span> <span class=\"ow\">in</span> <span class=\"n\">target_conds</span><span class=\"p\">]</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"n\">conds_acc</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n                <span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"n\">string_set_pred_conds</span> <span class=\"o\">==</span> <span class=\"n\">string_set_target_conds</span> <span class=\"k\">else</span> <span class=\"mi\">0</span>\n            <span class=\"p\">)</span>  <span class=\"c1\"># not matter in order</span>\n\n            <span class=\"n\">agg_accuracy</span> <span class=\"o\">+=</span> <span class=\"n\">agg_acc</span>\n            <span class=\"n\">sel_accuracy</span> <span class=\"o\">+=</span> <span class=\"n\">sel_acc</span>\n            <span class=\"n\">conds_accuracy</span> <span class=\"o\">+=</span> <span class=\"n\">conds_acc</span>\n\n        <span class=\"n\">total_count</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"p\">)</span>\n\n        <span class=\"n\">agg_accuracy</span> <span class=\"o\">=</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"n\">agg_accuracy</span> <span class=\"o\">/</span> <span class=\"n\">total_count</span>\n        <span class=\"n\">sel_accuracy</span> <span class=\"o\">=</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"n\">sel_accuracy</span> <span class=\"o\">/</span> <span class=\"n\">total_count</span>\n        <span class=\"n\">conds_accuracy</span> <span class=\"o\">=</span> <span class=\"mf\">100.0</span> <span class=\"o\">*</span> <span class=\"n\">conds_accuracy</span> <span class=\"o\">/</span> <span class=\"n\">total_count</span>\n\n        <span class=\"n\">metrics</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;agg_accuracy&quot;</span><span class=\"p\">:</span> <span class=\"n\">agg_accuracy</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sel_accuracy&quot;</span><span class=\"p\">:</span> <span class=\"n\">sel_accuracy</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;conds_accuracy&quot;</span><span class=\"p\">:</span> <span class=\"n\">conds_accuracy</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">write_predictions</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">)</span>\n\n        <span class=\"n\">wikisql_official_metrics</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_metrics_with_official</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">)</span>\n        <span class=\"n\">metrics</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">wikisql_official_metrics</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">metrics</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_make_metrics_with_official</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        WikiSQL official evaluation</span>\n\n<span class=\"sd\">        lf_accuracy: Logical-form accuracy</span>\n<span class=\"sd\">          - Directly compare the synthesized SQL query with the ground truth to</span>\n<span class=\"sd\">            check whether they match each other.</span>\n<span class=\"sd\">        ex_accuracy: Execution accuracy</span>\n<span class=\"sd\">          - Execute both the synthesized query and the ground truth query and</span>\n<span class=\"sd\">            compare whether the results match to each other.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">labels</span>\n        <span class=\"n\">db_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;db_path&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">wikisql_official</span><span class=\"o\">.</span><span class=\"n\">evaluate</span><span class=\"p\">(</span><span class=\"n\">labels</span><span class=\"p\">,</span> <span class=\"n\">preds</span><span class=\"p\">,</span> <span class=\"n\">db_path</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"WikiSQL.make_predictions\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.make_predictions\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_predictions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">):</span>\n        <span class=\"n\">predictions</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"n\">sql_quries</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">generate_queries</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">)</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">sql_quries</span><span class=\"p\">)):</span>\n            <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"n\">sql_quries</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span>\n\n            <span class=\"n\">prediction</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n            <span class=\"n\">prediction</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span>\n\n            <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_id&quot;</span><span class=\"p\">][</span><span class=\"n\">i</span><span class=\"p\">])</span>\n            <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">prediction</span>\n        <span class=\"k\">return</span> <span class=\"n\">predictions</span></div>\n\n<div class=\"viewcode-block\" id=\"WikiSQL.generate_queries\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.generate_queries\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">generate_queries</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">):</span>\n        <span class=\"n\">preds_agg</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">argmax</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;agg_logits&quot;</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">preds_sel</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">argmax</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;sel_logits&quot;</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">conds_logits</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;conds_logits&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">conds_num_logits</span><span class=\"p\">,</span> <span class=\"n\">conds_column_logits</span><span class=\"p\">,</span> <span class=\"n\">conds_op_logits</span><span class=\"p\">,</span> <span class=\"n\">conds_value_logits</span> <span class=\"o\">=</span> <span class=\"n\">conds_logits</span>\n\n        <span class=\"n\">preds_conds_num</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">argmax</span><span class=\"p\">(</span><span class=\"n\">conds_num_logits</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">preds_conds_op</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">argmax</span><span class=\"p\">(</span><span class=\"n\">conds_op_logits</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">sql_quries</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">B</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;agg_logits&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"s2\">&quot;table_id&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">output_dict</span><span class=\"p\">:</span>\n                <span class=\"n\">table_id</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">]</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">table_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_table_id</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_id&quot;</span><span class=\"p\">][</span><span class=\"n\">i</span><span class=\"p\">])</span>\n\n            <span class=\"n\">query</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">:</span> <span class=\"n\">table_id</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;query&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;agg&quot;</span><span class=\"p\">:</span> <span class=\"n\">preds_agg</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">(),</span> <span class=\"s2\">&quot;sel&quot;</span><span class=\"p\">:</span> <span class=\"n\">preds_sel</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()},</span>\n            <span class=\"p\">}</span>\n\n            <span class=\"n\">pred_conds_num</span> <span class=\"o\">=</span> <span class=\"n\">preds_conds_num</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n            <span class=\"n\">conds_pred</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"k\">if</span> <span class=\"n\">pred_conds_num</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">pass</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">pred_conds_column_idx</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">topk</span><span class=\"p\">(</span><span class=\"n\">conds_column_logits</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">],</span> <span class=\"n\">pred_conds_num</span><span class=\"p\">)</span>\n\n                <span class=\"k\">if</span> <span class=\"n\">preds_conds_op</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>  <span class=\"c1\"># for one-example (TODO: fix hard-code)</span>\n                    <span class=\"n\">pred_conds_op</span> <span class=\"o\">=</span> <span class=\"n\">preds_conds_op</span>\n                    <span class=\"n\">conds_value_logits</span> <span class=\"o\">=</span> <span class=\"n\">conds_value_logits</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n                    <span class=\"n\">conds_value_logits</span> <span class=\"o\">=</span> <span class=\"n\">conds_value_logits</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">pred_conds_op</span> <span class=\"o\">=</span> <span class=\"n\">preds_conds_op</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span>\n\n                <span class=\"k\">if</span> <span class=\"s2\">&quot;tokenized_question&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">output_dict</span><span class=\"p\">:</span>\n                    <span class=\"n\">tokenized_question</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;tokenized_question&quot;</span><span class=\"p\">]</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">tokenized_question</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_tokenized_question</span><span class=\"p\">(</span>\n                        <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_id&quot;</span><span class=\"p\">][</span><span class=\"n\">i</span><span class=\"p\">]</span>\n                    <span class=\"p\">)</span>\n\n                <span class=\"n\">conds_pred</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                    <span class=\"p\">[</span>\n                        <span class=\"n\">pred_conds_column_idx</span><span class=\"p\">[</span><span class=\"n\">j</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">(),</span>\n                        <span class=\"n\">pred_conds_op</span><span class=\"p\">[</span><span class=\"n\">j</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">(),</span>\n                        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">decode_pointer</span><span class=\"p\">(</span><span class=\"n\">tokenized_question</span><span class=\"p\">,</span> <span class=\"n\">conds_value_logits</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"p\">]),</span>\n                    <span class=\"p\">]</span>\n                    <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">pred_conds_num</span><span class=\"p\">)</span>\n                <span class=\"p\">]</span>\n\n            <span class=\"n\">query</span><span class=\"p\">[</span><span class=\"s2\">&quot;query&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;conds&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">conds_pred</span>\n            <span class=\"n\">sql_quries</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">sql_quries</span></div>\n\n<div class=\"viewcode-block\" id=\"WikiSQL.decode_pointer\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.decode_pointer\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">decode_pointer</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenized_question</span><span class=\"p\">,</span> <span class=\"n\">cond_value_logits</span><span class=\"p\">):</span>\n        <span class=\"n\">question_text</span> <span class=\"o\">=</span> <span class=\"s2\">&quot; &quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">tokenized_question</span><span class=\"p\">)</span>\n        <span class=\"n\">tokenized_question</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;&lt;BEG&gt;&quot;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">tokenized_question</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"s2\">&quot;&lt;END&gt;&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">conds_value</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">value_logit</span> <span class=\"ow\">in</span> <span class=\"n\">cond_value_logits</span><span class=\"p\">:</span>\n            <span class=\"n\">pred_value_pos</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">argmax</span><span class=\"p\">(</span><span class=\"n\">value_logit</span><span class=\"p\">[:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tokenized_question</span><span class=\"p\">)])</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n            <span class=\"n\">pred_value_token</span> <span class=\"o\">=</span> <span class=\"n\">tokenized_question</span><span class=\"p\">[</span><span class=\"n\">pred_value_pos</span><span class=\"p\">]</span>\n            <span class=\"k\">if</span> <span class=\"n\">pred_value_token</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;&lt;END&gt;&quot;</span><span class=\"p\">:</span>\n                <span class=\"k\">break</span>\n            <span class=\"n\">conds_value</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">pred_value_token</span><span class=\"p\">)</span>\n\n        <span class=\"n\">conds_value</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">merge_tokens</span><span class=\"p\">(</span><span class=\"n\">conds_value</span><span class=\"p\">,</span> <span class=\"n\">question_text</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">conds_value</span></div>\n\n<div class=\"viewcode-block\" id=\"WikiSQL.merge_tokens\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.merge_tokens\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">merge_tokens</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tok_list</span><span class=\"p\">,</span> <span class=\"n\">raw_tok_str</span><span class=\"p\">):</span>\n        <span class=\"n\">lower_tok_str</span> <span class=\"o\">=</span> <span class=\"n\">raw_tok_str</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span>\n        <span class=\"n\">alphabet</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"s2\">&quot;abcdefghijklmnopqrstuvwxyz0123456789$(&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">special</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;-LRB-&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;(&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;-RRB-&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;)&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;-LSB-&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;[&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;-RSB-&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;]&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;``&quot;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&quot;&#39;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;&#39;&#39;&quot;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&quot;&#39;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;--&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\u2013</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">ret</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n        <span class=\"n\">double_quote_appear</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"k\">for</span> <span class=\"n\">raw_tok</span> <span class=\"ow\">in</span> <span class=\"n\">tok_list</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">raw_tok</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">tok</span> <span class=\"o\">=</span> <span class=\"n\">special</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">raw_tok</span><span class=\"p\">,</span> <span class=\"n\">raw_tok</span><span class=\"p\">)</span>\n            <span class=\"n\">lower_tok</span> <span class=\"o\">=</span> <span class=\"n\">tok</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span>\n            <span class=\"k\">if</span> <span class=\"n\">tok</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;&quot;&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">double_quote_appear</span> <span class=\"o\">=</span> <span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">double_quote_appear</span>\n\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">ret</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"k\">pass</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">ret</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span> <span class=\"ow\">and</span> <span class=\"n\">ret</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; &quot;</span> <span class=\"o\">+</span> <span class=\"n\">lower_tok</span> <span class=\"ow\">in</span> <span class=\"n\">lower_tok_str</span><span class=\"p\">:</span>\n                <span class=\"n\">ret</span> <span class=\"o\">=</span> <span class=\"n\">ret</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; &quot;</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">ret</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span> <span class=\"ow\">and</span> <span class=\"n\">ret</span> <span class=\"o\">+</span> <span class=\"n\">lower_tok</span> <span class=\"ow\">in</span> <span class=\"n\">lower_tok_str</span><span class=\"p\">:</span>\n                <span class=\"k\">pass</span>\n            <span class=\"k\">elif</span> <span class=\"n\">lower_tok</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;&quot;&#39;</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">double_quote_appear</span><span class=\"p\">:</span>\n                    <span class=\"n\">ret</span> <span class=\"o\">=</span> <span class=\"n\">ret</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; &quot;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">lower_tok</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">alphabet</span><span class=\"p\">:</span>\n                <span class=\"k\">pass</span>\n            <span class=\"k\">elif</span> <span class=\"p\">(</span><span class=\"n\">ret</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s2\">&quot;(&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;/&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\u2013</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;#&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;$&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&amp;&quot;</span><span class=\"p\">])</span> <span class=\"ow\">and</span> <span class=\"p\">(</span>\n                <span class=\"n\">ret</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"s1\">&#39;&quot;&#39;</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"n\">double_quote_appear</span>\n            <span class=\"p\">):</span>\n                <span class=\"n\">ret</span> <span class=\"o\">=</span> <span class=\"n\">ret</span> <span class=\"o\">+</span> <span class=\"s2\">&quot; &quot;</span>\n            <span class=\"n\">ret</span> <span class=\"o\">=</span> <span class=\"n\">ret</span> <span class=\"o\">+</span> <span class=\"n\">tok</span>\n        <span class=\"k\">return</span> <span class=\"n\">ret</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span></div>\n\n    <span class=\"nd\">@arguments_required</span><span class=\"p\">([</span><span class=\"s2\">&quot;db_path&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">])</span>\n    <span class=\"k\">def</span> <span class=\"nf\">predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">,</span> <span class=\"n\">arguments</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Inference by raw_feature</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            output_dict: model&#39;s output dictionary consisting of</span>\n<span class=\"sd\">            arguments: arguments dictionary consisting of user_input</span>\n<span class=\"sd\">            helper: dictionary for helping get answer</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            query: Generated SQL Query</span>\n<span class=\"sd\">            execute_result: Execute result by generated query</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">arguments</span><span class=\"p\">[</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;tokenized_question&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;tokenized_question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">prediction</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">generate_queries</span><span class=\"p\">(</span><span class=\"n\">output_dict</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_query</span> <span class=\"o\">=</span> <span class=\"n\">Query</span><span class=\"o\">.</span><span class=\"n\">from_dict</span><span class=\"p\">(</span><span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;query&quot;</span><span class=\"p\">],</span> <span class=\"n\">ordered</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"n\">dbengine</span> <span class=\"o\">=</span> <span class=\"n\">DBEngine</span><span class=\"p\">(</span><span class=\"n\">arguments</span><span class=\"p\">[</span><span class=\"s2\">&quot;db_path&quot;</span><span class=\"p\">])</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">pred_execute_result</span> <span class=\"o\">=</span> <span class=\"n\">dbengine</span><span class=\"o\">.</span><span class=\"n\">execute_query</span><span class=\"p\">(</span>\n                <span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">],</span> <span class=\"n\">pred_query</span><span class=\"p\">,</span> <span class=\"n\">lower</span><span class=\"o\">=</span><span class=\"kc\">True</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">IndexError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n            <span class=\"n\">pred_execute_result</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;query&quot;</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">pred_query</span><span class=\"p\">),</span> <span class=\"s2\">&quot;execute_result&quot;</span><span class=\"p\">:</span> <span class=\"n\">pred_execute_result</span><span class=\"p\">}</span>\n\n<div class=\"viewcode-block\" id=\"WikiSQL.print_examples\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.print_examples\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">print_examples</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Print evaluation examples</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            index: data index</span>\n<span class=\"sd\">            inputs: mini-batch inputs</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (question id)</span>\n<span class=\"sd\">                - value: consisting of dictionary</span>\n<span class=\"sd\">                    table_id, query (agg, sel, conds)</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            print(Context, Question, Answers and Predict)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_index</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">][</span><span class=\"n\">index</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_index</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">helper</span>\n        <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">label</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_ground_truth</span><span class=\"p\">(</span><span class=\"n\">data_id</span><span class=\"p\">)</span>\n\n        <span class=\"n\">dbengine</span> <span class=\"o\">=</span> <span class=\"n\">DBEngine</span><span class=\"p\">(</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;db_path&quot;</span><span class=\"p\">])</span>\n\n        <span class=\"n\">prediction</span> <span class=\"o\">=</span> <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_query</span> <span class=\"o\">=</span> <span class=\"n\">Query</span><span class=\"o\">.</span><span class=\"n\">from_dict</span><span class=\"p\">(</span><span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;query&quot;</span><span class=\"p\">],</span> <span class=\"n\">ordered</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"n\">pred_execute_result</span> <span class=\"o\">=</span> <span class=\"n\">dbengine</span><span class=\"o\">.</span><span class=\"n\">execute_query</span><span class=\"p\">(</span><span class=\"n\">prediction</span><span class=\"p\">[</span><span class=\"s2\">&quot;table_id&quot;</span><span class=\"p\">],</span> <span class=\"n\">pred_query</span><span class=\"p\">,</span> <span class=\"n\">lower</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Question:&quot;</span><span class=\"p\">,</span> <span class=\"n\">question</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Answers:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    SQL Query: &quot;</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;sql_query&quot;</span><span class=\"p\">])</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Execute Results:&quot;</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"p\">[</span><span class=\"s2\">&quot;execution_result&quot;</span><span class=\"p\">])</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Predict:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    SQL Query: &quot;</span><span class=\"p\">,</span> <span class=\"n\">pred_query</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Execute Results:&quot;</span><span class=\"p\">,</span> <span class=\"n\">pred_execute_result</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;-&quot;</span> <span class=\"o\">*</span> <span class=\"mi\">30</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/semantic_parsing/sqlnet.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.semantic_parsing.sqlnet &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.semantic_parsing.sqlnet</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.semantic_parsing.sqlnet</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.semantic_parsing</span> <span class=\"k\">import</span> <span class=\"n\">utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.semantic_parsing.mixin</span> <span class=\"k\">import</span> <span class=\"n\">WikiSQL</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.attention</span> <span class=\"k\">as</span> <span class=\"nn\">attention</span>\n\n\n<div class=\"viewcode-block\" id=\"SQLNet\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.SQLNet\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:sqlnet&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">SQLNet</span><span class=\"p\">(</span><span class=\"n\">WikiSQL</span><span class=\"p\">,</span> <span class=\"n\">ModelWithTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Nature Language to SQL Query Model. `Semantic Parsing`, `NL2SQL`</span>\n\n<span class=\"sd\">    Implementation of model presented in</span>\n<span class=\"sd\">    SQLNet: Generating Structured Queries From Natural Language</span>\n<span class=\"sd\">      Without Reinforcement Learning</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1711.04436)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: &#39;WikiSQLTokenEmbedder&#39;, Used to embed the &#39;column&#39; and &#39;question&#39;.</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        column_attention: highlight that column attention is a special instance of</span>\n<span class=\"sd\">          the generic attention mechanism to compute the attention map on a question</span>\n<span class=\"sd\">          conditioned on the column names.</span>\n<span class=\"sd\">        model_dim: the number of model dimension</span>\n<span class=\"sd\">        rnn_num_layer: the number of recurrent layers (all of rnn)</span>\n<span class=\"sd\">        column_maxlen: an upper-bound N on the number of columns to choose</span>\n<span class=\"sd\">        token_maxlen: conds value slot - pointer network an upper-bound N on the number of token</span>\n<span class=\"sd\">        conds_column_loss_alpha: balance the positive data versus negative data</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">token_embedder</span><span class=\"p\">,</span>\n        <span class=\"n\">column_attention</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">model_dim</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n        <span class=\"n\">rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.3</span><span class=\"p\">,</span>\n        <span class=\"n\">column_maxlen</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span>\n        <span class=\"n\">token_maxlen</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span>\n        <span class=\"n\">conds_column_loss_alpha</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SQLNet</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_embedder</span><span class=\"p\">)</span>\n\n        <span class=\"n\">embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span><span class=\"o\">.</span><span class=\"n\">get_embed_dim</span><span class=\"p\">()</span>  <span class=\"c1\"># NOTE: need to fix</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">token_maxlen</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">column_maxlen</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">conds_column_loss_alpha</span> <span class=\"o\">=</span> <span class=\"n\">conds_column_loss_alpha</span>\n\n        <span class=\"c1\"># Predict aggregator</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">agg_predictor</span> <span class=\"o\">=</span> <span class=\"n\">AggPredictor</span><span class=\"p\">(</span>\n            <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">AGG_OPS</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># Predict selected column</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sel_predictor</span> <span class=\"o\">=</span> <span class=\"n\">SelPredictor</span><span class=\"p\">(</span>\n            <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"p\">,</span> <span class=\"n\">column_attention</span><span class=\"o\">=</span><span class=\"n\">column_attention</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># #Predict number of conditions</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">conds_predictor</span> <span class=\"o\">=</span> <span class=\"n\">CondsPredictor</span><span class=\"p\">(</span>\n            <span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">COND_OPS</span><span class=\"p\">),</span>\n            <span class=\"n\">column_maxlen</span><span class=\"p\">,</span>\n            <span class=\"n\">token_maxlen</span><span class=\"p\">,</span>\n            <span class=\"n\">column_attention</span><span class=\"o\">=</span><span class=\"n\">column_attention</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cross_entropy</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bce_logit</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">BCEWithLogitsLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"SQLNet.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.SQLNet.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">column</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;column&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">question</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">column_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span><span class=\"p\">(</span><span class=\"n\">column</span><span class=\"p\">)</span>\n        <span class=\"n\">question_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span>\n\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span> <span class=\"o\">=</span> <span class=\"n\">column_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">column_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">column_indexed</span> <span class=\"o\">=</span> <span class=\"n\">column</span><span class=\"p\">[</span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"nb\">iter</span><span class=\"p\">(</span><span class=\"n\">column</span><span class=\"p\">))]</span>\n        <span class=\"n\">column_name_mask</span> <span class=\"o\">=</span> <span class=\"n\">column_indexed</span><span class=\"o\">.</span><span class=\"n\">gt</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>  <span class=\"c1\"># NOTE: hard-code</span>\n        <span class=\"n\">column_lengths</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">get_column_lengths</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">)</span>\n        <span class=\"n\">column_mask</span> <span class=\"o\">=</span> <span class=\"n\">column_lengths</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">gt</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>  <span class=\"c1\"># NOTE: hard-code</span>\n        <span class=\"n\">question_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">question</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n\n        <span class=\"n\">agg_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">agg_predictor</span><span class=\"p\">(</span><span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">)</span>\n        <span class=\"n\">sel_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sel_predictor</span><span class=\"p\">(</span>\n            <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">,</span> <span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"n\">column_mask</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">conds_col_idx</span><span class=\"p\">,</span> <span class=\"n\">conds_val_pos</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">ground_truths</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_ground_truths</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"p\">)</span>\n\n            <span class=\"n\">conds_col_idx</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">ground_truth</span><span class=\"p\">[</span><span class=\"s2\">&quot;conds_col&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">ground_truth</span> <span class=\"ow\">in</span> <span class=\"n\">ground_truths</span><span class=\"p\">]</span>\n            <span class=\"n\">conds_val_pos</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">ground_truth</span><span class=\"p\">[</span><span class=\"s2\">&quot;conds_val_pos&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">ground_truth</span> <span class=\"ow\">in</span> <span class=\"n\">ground_truths</span><span class=\"p\">]</span>\n\n        <span class=\"n\">conds_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">conds_predictor</span><span class=\"p\">(</span>\n            <span class=\"n\">question_embed</span><span class=\"p\">,</span>\n            <span class=\"n\">question_mask</span><span class=\"p\">,</span>\n            <span class=\"n\">column_embed</span><span class=\"p\">,</span>\n            <span class=\"n\">column_name_mask</span><span class=\"p\">,</span>\n            <span class=\"n\">column_mask</span><span class=\"p\">,</span>\n            <span class=\"n\">conds_col_idx</span><span class=\"p\">,</span>\n            <span class=\"n\">conds_val_pos</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># Convert GPU to CPU</span>\n        <span class=\"n\">agg_logits</span> <span class=\"o\">=</span> <span class=\"n\">agg_logits</span><span class=\"o\">.</span><span class=\"n\">cpu</span><span class=\"p\">()</span>\n        <span class=\"n\">sel_logits</span> <span class=\"o\">=</span> <span class=\"n\">sel_logits</span><span class=\"o\">.</span><span class=\"n\">cpu</span><span class=\"p\">()</span>\n        <span class=\"n\">conds_logits</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">logits</span><span class=\"o\">.</span><span class=\"n\">cpu</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">logits</span> <span class=\"ow\">in</span> <span class=\"n\">conds_logits</span><span class=\"p\">]</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;agg_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">agg_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sel_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">sel_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;conds_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">conds_logits</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_id&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"n\">ground_truths</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_ground_truths</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># Aggregator, Select Column</span>\n            <span class=\"n\">target_agg_idx</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">LongTensor</span><span class=\"p\">(</span>\n                <span class=\"p\">[</span><span class=\"n\">ground_truth</span><span class=\"p\">[</span><span class=\"s2\">&quot;agg_idx&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">ground_truth</span> <span class=\"ow\">in</span> <span class=\"n\">ground_truths</span><span class=\"p\">]</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">target_sel_idx</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">LongTensor</span><span class=\"p\">(</span>\n                <span class=\"p\">[</span><span class=\"n\">ground_truth</span><span class=\"p\">[</span><span class=\"s2\">&quot;sel_idx&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">ground_truth</span> <span class=\"ow\">in</span> <span class=\"n\">ground_truths</span><span class=\"p\">]</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cross_entropy</span><span class=\"p\">(</span><span class=\"n\">agg_logits</span><span class=\"p\">,</span> <span class=\"n\">target_agg_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cross_entropy</span><span class=\"p\">(</span><span class=\"n\">sel_logits</span><span class=\"p\">,</span> <span class=\"n\">target_sel_idx</span><span class=\"p\">)</span>\n\n            <span class=\"n\">conds_num_logits</span><span class=\"p\">,</span> <span class=\"n\">conds_column_logits</span><span class=\"p\">,</span> <span class=\"n\">conds_op_logits</span><span class=\"p\">,</span> <span class=\"n\">conds_value_logits</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n                <span class=\"n\">conds_logits</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"c1\"># Conditions</span>\n            <span class=\"c1\"># 1. The number of conditions</span>\n            <span class=\"n\">target_conds_num</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">LongTensor</span><span class=\"p\">(</span>\n                <span class=\"p\">[</span><span class=\"n\">ground_truth</span><span class=\"p\">[</span><span class=\"s2\">&quot;conds_num&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">ground_truth</span> <span class=\"ow\">in</span> <span class=\"n\">ground_truths</span><span class=\"p\">]</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">target_conds_column</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">ground_truth</span><span class=\"p\">[</span><span class=\"s2\">&quot;conds_col&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">ground_truth</span> <span class=\"ow\">in</span> <span class=\"n\">ground_truths</span><span class=\"p\">]</span>\n\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cross_entropy</span><span class=\"p\">(</span><span class=\"n\">conds_num_logits</span><span class=\"p\">,</span> <span class=\"n\">target_conds_num</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># 2. Columns of conditions</span>\n            <span class=\"n\">B</span> <span class=\"o\">=</span> <span class=\"n\">conds_column_logits</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n            <span class=\"n\">target_conds_columns</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">conds_column_logits</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()),</span> <span class=\"n\">dtype</span><span class=\"o\">=</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">float32</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">):</span>\n                <span class=\"n\">target_conds_column_idx</span> <span class=\"o\">=</span> <span class=\"n\">target_conds_column</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span>\n                <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">target_conds_column_idx</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                    <span class=\"k\">continue</span>\n                <span class=\"n\">target_conds_columns</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">target_conds_column_idx</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n            <span class=\"n\">target_conds_columns</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">from_numpy</span><span class=\"p\">(</span><span class=\"n\">target_conds_columns</span><span class=\"p\">)</span>\n            <span class=\"n\">conds_column_probs</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sigmoid</span><span class=\"p\">(</span><span class=\"n\">conds_column_logits</span><span class=\"p\">)</span>\n\n            <span class=\"n\">bce_loss</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">mean</span><span class=\"p\">(</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">conds_column_loss_alpha</span>\n                <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">target_conds_columns</span> <span class=\"o\">*</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"n\">conds_column_probs</span> <span class=\"o\">+</span> <span class=\"mf\">1e-10</span><span class=\"p\">))</span>\n                <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">target_conds_columns</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">conds_column_probs</span> <span class=\"o\">+</span> <span class=\"mf\">1e-10</span><span class=\"p\">)</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"n\">bce_loss</span>\n\n            <span class=\"c1\"># 3. Operator of conditions</span>\n            <span class=\"n\">conds_op_loss</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n            <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">):</span>\n                <span class=\"n\">target_conds_op</span> <span class=\"o\">=</span> <span class=\"n\">ground_truths</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"s2\">&quot;conds_op&quot;</span><span class=\"p\">]</span>\n                <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">target_conds_op</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                    <span class=\"k\">continue</span>\n\n                <span class=\"n\">target_conds_op</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">from_numpy</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">(</span><span class=\"n\">target_conds_op</span><span class=\"p\">))</span>\n                <span class=\"n\">logits_conds_op</span> <span class=\"o\">=</span> <span class=\"n\">conds_op_logits</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">target_conds_op</span><span class=\"p\">)]</span>\n\n                <span class=\"n\">target_op_count</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">target_conds_op</span><span class=\"p\">)</span>\n                <span class=\"n\">conds_op_loss</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cross_entropy</span><span class=\"p\">(</span><span class=\"n\">logits_conds_op</span><span class=\"p\">,</span> <span class=\"n\">target_conds_op</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"n\">target_op_count</span>\n                <span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"n\">conds_op_loss</span>\n\n            <span class=\"c1\"># 4. Value of conditions</span>\n            <span class=\"n\">conds_val_pos</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">ground_truth</span><span class=\"p\">[</span><span class=\"s2\">&quot;conds_val_pos&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">ground_truth</span> <span class=\"ow\">in</span> <span class=\"n\">ground_truths</span><span class=\"p\">]</span>\n\n            <span class=\"n\">conds_value_loss</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n            <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">):</span>\n                <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">conds_val_pos</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">])):</span>\n                    <span class=\"n\">cond_val_pos</span> <span class=\"o\">=</span> <span class=\"n\">conds_val_pos</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"p\">]</span>\n                    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">cond_val_pos</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                        <span class=\"k\">continue</span>\n\n                    <span class=\"n\">target_cond_val_pos</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">from_numpy</span><span class=\"p\">(</span>\n                        <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">(</span><span class=\"n\">cond_val_pos</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:])</span>\n                    <span class=\"p\">)</span>  <span class=\"c1\"># index 0: START_TOKEN</span>\n                    <span class=\"n\">logits_cond_val_pos</span> <span class=\"o\">=</span> <span class=\"n\">conds_value_logits</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">j</span><span class=\"p\">,</span> <span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">cond_val_pos</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n\n                    <span class=\"n\">conds_value_loss</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cross_entropy</span><span class=\"p\">(</span>\n                        <span class=\"n\">logits_cond_val_pos</span><span class=\"p\">,</span> <span class=\"n\">target_cond_val_pos</span>\n                    <span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">conds_val_pos</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">])</span>\n\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"n\">conds_value_loss</span> <span class=\"o\">/</span> <span class=\"n\">B</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"AggPredictor\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.AggPredictor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">AggPredictor</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"p\">,</span> <span class=\"n\">agg_count</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">AggPredictor</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">seq_attn</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">LinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Tanh</span><span class=\"p\">(),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">agg_count</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"AggPredictor.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.AggPredictor.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span><span class=\"p\">(</span><span class=\"n\">question_embed</span><span class=\"p\">)</span>\n        <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">seq_attn</span><span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">)</span>\n        <span class=\"n\">attn_question</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">attn_matrix</span><span class=\"p\">,</span> <span class=\"n\">encoded_question</span><span class=\"p\">)</span>\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span><span class=\"p\">(</span><span class=\"n\">attn_question</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">logits</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"SelPredictor\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.SelPredictor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SelPredictor</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"p\">,</span> <span class=\"n\">column_attention</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SelPredictor</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_attention</span> <span class=\"o\">=</span> <span class=\"n\">column_attention</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">column_attention</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_attn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">seq_attn</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">LinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_question</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_column</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Tanh</span><span class=\"p\">(),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n\n<div class=\"viewcode-block\" id=\"SelPredictor.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.SelPredictor.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">,</span> <span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"n\">column_mask</span><span class=\"p\">):</span>\n\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">N_L</span><span class=\"p\">,</span> <span class=\"n\">embed_D</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n\n        <span class=\"n\">encoded_column</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">encode_column</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_rnn</span><span class=\"p\">)</span>\n        <span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span><span class=\"p\">(</span><span class=\"n\">question_embed</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_attention</span><span class=\"p\">:</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span>\n                <span class=\"n\">encoded_column</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_attn</span><span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">attn_matrix</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">attn_matrix</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_question</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"n\">attn_matrix</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">seq_attn</span><span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_question</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">attn_matrix</span><span class=\"p\">,</span> <span class=\"n\">encoded_question</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_question</span> <span class=\"o\">=</span> <span class=\"n\">attn_question</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_question</span><span class=\"p\">(</span><span class=\"n\">attn_question</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_column</span><span class=\"p\">(</span><span class=\"n\">encoded_column</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">()</span>\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">logits</span><span class=\"p\">,</span> <span class=\"n\">column_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">logits</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"CondsPredictor\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsPredictor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CondsPredictor</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n        <span class=\"n\">model_dim</span><span class=\"p\">,</span>\n        <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"p\">,</span>\n        <span class=\"n\">conds_op_count</span><span class=\"p\">,</span>\n        <span class=\"n\">column_maxlen</span><span class=\"p\">,</span>\n        <span class=\"n\">token_maxlen</span><span class=\"p\">,</span>\n        <span class=\"n\">column_attention</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CondsPredictor</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_predictor</span> <span class=\"o\">=</span> <span class=\"n\">CondsNumPredictor</span><span class=\"p\">(</span>\n            <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"p\">,</span> <span class=\"n\">column_maxlen</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_predictor</span> <span class=\"o\">=</span> <span class=\"n\">CondsColPredictor</span><span class=\"p\">(</span>\n            <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"p\">,</span> <span class=\"n\">column_attention</span><span class=\"o\">=</span><span class=\"n\">column_attention</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">op_predictor</span> <span class=\"o\">=</span> <span class=\"n\">CondsOpPredictor</span><span class=\"p\">(</span>\n            <span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">conds_op_count</span><span class=\"p\">,</span>\n            <span class=\"n\">column_maxlen</span><span class=\"p\">,</span>\n            <span class=\"n\">column_attention</span><span class=\"o\">=</span><span class=\"n\">column_attention</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">value_pointer</span> <span class=\"o\">=</span> <span class=\"n\">CondsValuePointer</span><span class=\"p\">(</span>\n            <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"p\">,</span> <span class=\"n\">column_maxlen</span><span class=\"p\">,</span> <span class=\"n\">token_maxlen</span>\n        <span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"CondsPredictor.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsPredictor.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">question_embed</span><span class=\"p\">,</span>\n        <span class=\"n\">question_mask</span><span class=\"p\">,</span>\n        <span class=\"n\">column_embed</span><span class=\"p\">,</span>\n        <span class=\"n\">column_name_mask</span><span class=\"p\">,</span>\n        <span class=\"n\">column_mask</span><span class=\"p\">,</span>\n        <span class=\"n\">col_idx</span><span class=\"p\">,</span>\n        <span class=\"n\">conds_val_pos</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"n\">num_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_predictor</span><span class=\"p\">(</span>\n            <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">,</span> <span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"n\">column_mask</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">column_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_predictor</span><span class=\"p\">(</span>\n            <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">,</span> <span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"n\">column_mask</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">col_idx</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">col_idx</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"n\">preds_num</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">argmax</span><span class=\"p\">(</span><span class=\"n\">num_logits</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">column_logits</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)):</span>\n                <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">pred_conds_column_idx</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">topk</span><span class=\"p\">(</span><span class=\"n\">column_logits</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">],</span> <span class=\"n\">preds_num</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">])</span>\n                <span class=\"n\">col_idx</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">pred_conds_column_idx</span><span class=\"o\">.</span><span class=\"n\">tolist</span><span class=\"p\">())</span>\n\n        <span class=\"n\">op_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">op_predictor</span><span class=\"p\">(</span>\n            <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">,</span> <span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"n\">col_idx</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">value_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">value_pointer</span><span class=\"p\">(</span>\n            <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">,</span> <span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"n\">col_idx</span><span class=\"p\">,</span> <span class=\"n\">conds_val_pos</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">num_logits</span><span class=\"p\">,</span> <span class=\"n\">column_logits</span><span class=\"p\">,</span> <span class=\"n\">op_logits</span><span class=\"p\">,</span> <span class=\"n\">value_logits</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"CondsNumPredictor\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsNumPredictor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CondsNumPredictor</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"p\">,</span> <span class=\"n\">column_maxlen</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CondsNumPredictor</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_dim</span> <span class=\"o\">=</span> <span class=\"n\">model_dim</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">column_maxlen</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_seq_attn</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">LinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_to_hidden_state</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_to_cell_state</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_seq_attn</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">LinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Tanh</span><span class=\"p\">(),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">column_maxlen</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"CondsNumPredictor.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsNumPredictor.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">,</span> <span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"n\">column_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">N_L</span><span class=\"p\">,</span> <span class=\"n\">embed_D</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n\n        <span class=\"n\">encoded_column</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">encode_column</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_rnn</span><span class=\"p\">)</span>\n        <span class=\"n\">attn_column</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_seq_attn</span><span class=\"p\">(</span><span class=\"n\">encoded_column</span><span class=\"p\">,</span> <span class=\"n\">column_mask</span><span class=\"p\">)</span>\n        <span class=\"n\">out_column</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">attn_column</span><span class=\"p\">,</span> <span class=\"n\">encoded_column</span><span class=\"p\">)</span>\n\n        <span class=\"n\">question_rnn_hidden_state</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_to_hidden_state</span><span class=\"p\">(</span><span class=\"n\">out_column</span><span class=\"p\">)</span>\n            <span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n            <span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"o\">.</span><span class=\"n\">contiguous</span><span class=\"p\">()</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">question_rnn_cell_state</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_to_cell_state</span><span class=\"p\">(</span><span class=\"n\">out_column</span><span class=\"p\">)</span>\n            <span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n            <span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"o\">.</span><span class=\"n\">contiguous</span><span class=\"p\">()</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span><span class=\"p\">(</span>\n            <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">question_rnn_hidden_state</span><span class=\"p\">,</span> <span class=\"n\">question_rnn_cell_state</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">attn_question</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_seq_attn</span><span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">)</span>\n        <span class=\"n\">out_question</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">attn_question</span><span class=\"p\">,</span> <span class=\"n\">encoded_question</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span><span class=\"p\">(</span><span class=\"n\">out_question</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"CondsColPredictor\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsColPredictor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CondsColPredictor</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"p\">,</span> <span class=\"n\">column_attention</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CondsColPredictor</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_attention</span> <span class=\"o\">=</span> <span class=\"n\">column_attention</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">column_attention</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_attn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">seq_attn</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">LinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_question</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_column</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ReLU</span><span class=\"p\">(),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n\n<div class=\"viewcode-block\" id=\"CondsColPredictor.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsColPredictor.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">,</span> <span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"n\">column_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">N_L</span><span class=\"p\">,</span> <span class=\"n\">embed_D</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n\n        <span class=\"c1\"># Column Encoder</span>\n        <span class=\"n\">encoded_column</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">encode_column</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_rnn</span><span class=\"p\">)</span>\n        <span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span><span class=\"p\">(</span><span class=\"n\">question_embed</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_attention</span><span class=\"p\">:</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span>\n                <span class=\"n\">encoded_column</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_attn</span><span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">attn_matrix</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">attn_matrix</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_question</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"n\">attn_matrix</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">seq_attn</span><span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_question</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">attn_matrix</span><span class=\"p\">,</span> <span class=\"n\">encoded_question</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_question</span> <span class=\"o\">=</span> <span class=\"n\">attn_question</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_question</span><span class=\"p\">(</span><span class=\"n\">attn_question</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_column</span><span class=\"p\">(</span><span class=\"n\">encoded_column</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">()</span>\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">logits</span><span class=\"p\">,</span> <span class=\"n\">column_mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">logits</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"CondsOpPredictor\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsOpPredictor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CondsOpPredictor</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n        <span class=\"n\">model_dim</span><span class=\"p\">,</span>\n        <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"p\">,</span>\n        <span class=\"n\">op_count</span><span class=\"p\">,</span>\n        <span class=\"n\">column_maxlen</span><span class=\"p\">,</span>\n        <span class=\"n\">column_attention</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CondsOpPredictor</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_attention</span> <span class=\"o\">=</span> <span class=\"n\">column_attention</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">column_maxlen</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">column_attention</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_attn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">seq_attn</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">LinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_question</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_column</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Tanh</span><span class=\"p\">(),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">op_count</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"CondsOpPredictor.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsOpPredictor.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">,</span> <span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"n\">col_idx</span><span class=\"p\">):</span>\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">N_L</span><span class=\"p\">,</span> <span class=\"n\">embed_D</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n\n        <span class=\"c1\"># Column Encoder</span>\n        <span class=\"n\">encoded_column</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">encode_column</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_rnn</span><span class=\"p\">)</span>\n        <span class=\"n\">encoded_used_column</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">filter_used_column</span><span class=\"p\">(</span>\n            <span class=\"n\">encoded_column</span><span class=\"p\">,</span> <span class=\"n\">col_idx</span><span class=\"p\">,</span> <span class=\"n\">padding_count</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span><span class=\"p\">(</span><span class=\"n\">question_embed</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_attention</span><span class=\"p\">:</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">matmul</span><span class=\"p\">(</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_attn</span><span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">encoded_used_column</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n            <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">()</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">attn_matrix</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">attn_matrix</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_question</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"n\">attn_matrix</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">attn_matrix</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">seq_attn</span><span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_question</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">attn_matrix</span><span class=\"p\">,</span> <span class=\"n\">encoded_question</span><span class=\"p\">)</span>\n            <span class=\"n\">attn_question</span> <span class=\"o\">=</span> <span class=\"n\">attn_question</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_question</span><span class=\"p\">(</span><span class=\"n\">attn_question</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_column</span><span class=\"p\">(</span><span class=\"n\">encoded_used_column</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">()</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"CondsValuePointer\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsValuePointer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CondsValuePointer</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"p\">,</span> <span class=\"n\">column_maxlen</span><span class=\"p\">,</span> <span class=\"n\">token_maxlen</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CondsValuePointer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_dim</span> <span class=\"o\">=</span> <span class=\"n\">model_dim</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">column_maxlen</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_maxlen</span> <span class=\"o\">=</span> <span class=\"n\">token_maxlen</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">seq_attn</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">LinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">decoder</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_maxlen</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">model_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_column</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_conds</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_question</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ReLU</span><span class=\"p\">(),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n\n<div class=\"viewcode-block\" id=\"CondsValuePointer.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsValuePointer.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">,</span> <span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"n\">col_idx</span><span class=\"p\">,</span> <span class=\"n\">conds_val_pos</span>\n    <span class=\"p\">):</span>\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">N_L</span><span class=\"p\">,</span> <span class=\"n\">embed_D</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n\n        <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">concat_start_and_end_zero_padding</span><span class=\"p\">(</span>\n            <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># Column Encoder</span>\n        <span class=\"n\">encoded_column</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">encode_column</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_rnn</span><span class=\"p\">)</span>\n        <span class=\"n\">encoded_used_column</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">filter_used_column</span><span class=\"p\">(</span>\n            <span class=\"n\">encoded_column</span><span class=\"p\">,</span> <span class=\"n\">col_idx</span><span class=\"p\">,</span> <span class=\"n\">padding_count</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">question_rnn</span><span class=\"p\">(</span><span class=\"n\">question_embed</span><span class=\"p\">)</span>\n\n        <span class=\"n\">encoded_used_column</span> <span class=\"o\">=</span> <span class=\"n\">encoded_used_column</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"n\">encoded_question</span> <span class=\"o\">=</span> <span class=\"n\">encoded_question</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">conds_val_pos</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>  <span class=\"c1\"># inference</span>\n            <span class=\"n\">MAX_DECODER_STEP</span> <span class=\"o\">=</span> <span class=\"mi\">50</span>\n\n            <span class=\"n\">decoder_input</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"mi\">4</span> <span class=\"o\">*</span> <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_maxlen</span><span class=\"p\">)</span>\n            <span class=\"n\">decoder_input</span><span class=\"p\">[:,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>  <span class=\"c1\"># Set &lt;s&gt; Token</span>\n            <span class=\"k\">if</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">():</span>\n                <span class=\"n\">decoder_input</span> <span class=\"o\">=</span> <span class=\"n\">decoder_input</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"p\">()</span>\n            <span class=\"n\">decoder_hidden</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n            <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"k\">for</span> <span class=\"n\">_</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">MAX_DECODER_STEP</span><span class=\"p\">):</span>\n                <span class=\"n\">step_logit</span><span class=\"p\">,</span> <span class=\"n\">decoder_hidden</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">decode_then_output</span><span class=\"p\">(</span>\n                    <span class=\"n\">encoded_used_column</span><span class=\"p\">,</span>\n                    <span class=\"n\">encoded_question</span><span class=\"p\">,</span>\n                    <span class=\"n\">question_mask</span><span class=\"p\">,</span>\n                    <span class=\"n\">decoder_input</span><span class=\"p\">,</span>\n                    <span class=\"n\">decoder_hidden</span><span class=\"o\">=</span><span class=\"n\">decoder_hidden</span><span class=\"p\">,</span>\n                <span class=\"p\">)</span>\n                <span class=\"n\">step_logit</span> <span class=\"o\">=</span> <span class=\"n\">step_logit</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n                <span class=\"n\">logits</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">step_logit</span><span class=\"p\">)</span>\n\n                <span class=\"c1\"># To ont-hot</span>\n                <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">decoder_idxs</span> <span class=\"o\">=</span> <span class=\"n\">step_logit</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">max</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n                <span class=\"n\">decoder_input</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"n\">B</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_maxlen</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">scatter_</span><span class=\"p\">(</span>\n                    <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">decoder_idxs</span><span class=\"o\">.</span><span class=\"n\">cpu</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"mi\">1</span>\n                <span class=\"p\">)</span>\n                <span class=\"k\">if</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">():</span>\n                    <span class=\"n\">decoder_input</span> <span class=\"o\">=</span> <span class=\"n\">decoder_input</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"p\">()</span>\n\n            <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">stack</span><span class=\"p\">(</span><span class=\"n\">logits</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">decoder_input</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"n\">utils</span><span class=\"o\">.</span><span class=\"n\">convert_position_to_decoder_input</span><span class=\"p\">(</span>\n                <span class=\"n\">conds_val_pos</span><span class=\"p\">,</span> <span class=\"n\">token_maxlen</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_maxlen</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">logits</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">decode_then_output</span><span class=\"p\">(</span>\n                <span class=\"n\">encoded_used_column</span><span class=\"p\">,</span> <span class=\"n\">encoded_question</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"p\">,</span> <span class=\"n\">decoder_input</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">logits</span></div>\n\n<div class=\"viewcode-block\" id=\"CondsValuePointer.concat_start_and_end_zero_padding\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsValuePointer.concat_start_and_end_zero_padding\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">concat_start_and_end_zero_padding</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">):</span>\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">Q_L</span><span class=\"p\">,</span> <span class=\"n\">embed_D</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">question_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n\n        <span class=\"n\">zero_padding</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">embed_D</span><span class=\"p\">)</span>\n        <span class=\"n\">mask_with_start_end</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">Q_L</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">():</span>\n            <span class=\"n\">zero_padding</span> <span class=\"o\">=</span> <span class=\"n\">zero_padding</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">current_device</span><span class=\"p\">())</span>\n            <span class=\"n\">mask_with_start_end</span> <span class=\"o\">=</span> <span class=\"n\">mask_with_start_end</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">current_device</span><span class=\"p\">())</span>\n\n        <span class=\"n\">question_embed_with_start_end</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span><span class=\"n\">zero_padding</span><span class=\"p\">,</span> <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">zero_padding</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">1</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># add &lt;BEG&gt; and &lt;END&gt;</span>\n\n        <span class=\"n\">mask_with_start_end</span><span class=\"p\">[:,</span> <span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># &lt;BEG&gt;</span>\n        <span class=\"n\">mask_with_start_end</span><span class=\"p\">[:,</span> <span class=\"mi\">1</span> <span class=\"p\">:</span> <span class=\"n\">Q_L</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">mask</span>\n        <span class=\"n\">question_lengths</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">mask</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">byte</span><span class=\"p\">()</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">):</span>\n            <span class=\"n\">mask_with_start_end</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">question_lengths</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># &lt;END&gt;</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">question_embed_with_start_end</span><span class=\"p\">,</span> <span class=\"n\">mask_with_start_end</span></div>\n\n<div class=\"viewcode-block\" id=\"CondsValuePointer.decode_then_output\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsValuePointer.decode_then_output\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">decode_then_output</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">encoded_used_column</span><span class=\"p\">,</span>\n        <span class=\"n\">encoded_question</span><span class=\"p\">,</span>\n        <span class=\"n\">question_mask</span><span class=\"p\">,</span>\n        <span class=\"n\">decoder_input</span><span class=\"p\">,</span>\n        <span class=\"n\">decoder_hidden</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"n\">B</span> <span class=\"o\">=</span> <span class=\"n\">encoded_used_column</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n        <span class=\"n\">decoder_output</span><span class=\"p\">,</span> <span class=\"n\">decoder_hidden</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">decoder</span><span class=\"p\">(</span>\n            <span class=\"n\">decoder_input</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_maxlen</span><span class=\"p\">),</span> <span class=\"n\">decoder_hidden</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">decoder_output</span> <span class=\"o\">=</span> <span class=\"n\">decoder_output</span><span class=\"o\">.</span><span class=\"n\">contiguous</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">column_maxlen</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_dim</span><span class=\"p\">)</span>\n        <span class=\"n\">decoder_output</span> <span class=\"o\">=</span> <span class=\"n\">decoder_output</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mlp</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_column</span><span class=\"p\">(</span><span class=\"n\">encoded_used_column</span><span class=\"p\">)</span>\n            <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_conds</span><span class=\"p\">(</span><span class=\"n\">decoder_output</span><span class=\"p\">)</span>\n            <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear_question</span><span class=\"p\">(</span><span class=\"n\">encoded_question</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">()</span>\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">logits</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">logits</span><span class=\"p\">,</span> <span class=\"n\">decoder_hidden</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/semantic_parsing/utils.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.semantic_parsing.utils &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.semantic_parsing.utils</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.semantic_parsing.utils</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n\n<div class=\"viewcode-block\" id=\"encode_column\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.utils.encode_column\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">encode_column</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">,</span> <span class=\"n\">rnn_module</span><span class=\"p\">):</span>\n    <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">N_L</span><span class=\"p\">,</span> <span class=\"n\">embed_D</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n\n    <span class=\"n\">column_lengths</span> <span class=\"o\">=</span> <span class=\"n\">get_column_lengths</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">)</span>\n    <span class=\"n\">column_last_index</span> <span class=\"o\">=</span> <span class=\"n\">column_lengths</span> <span class=\"o\">-</span> <span class=\"n\">column_lengths</span><span class=\"o\">.</span><span class=\"n\">gt</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>  <span class=\"c1\"># NOTE: hard-code</span>\n\n    <span class=\"n\">column_reshape</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"n\">N_L</span><span class=\"p\">,</span> <span class=\"n\">embed_D</span><span class=\"p\">]</span>\n    <span class=\"n\">column_embed</span> <span class=\"o\">=</span> <span class=\"n\">column_embed</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">column_reshape</span><span class=\"p\">)</span>\n\n    <span class=\"n\">encoded_column</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"n\">rnn_module</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"p\">)</span>\n    <span class=\"n\">encoded_D</span> <span class=\"o\">=</span> <span class=\"n\">encoded_column</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n    <span class=\"n\">encoded_output_column</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span>\n        <span class=\"p\">[</span>\n            <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">index_select</span><span class=\"p\">(</span><span class=\"n\">encoded_column</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">],</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">column_last_index</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">])</span>\n            <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">column_last_index</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">))</span>\n        <span class=\"p\">],</span>\n        <span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">encoded_output_column</span> <span class=\"o\">=</span> <span class=\"n\">encoded_output_column</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">([</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">encoded_D</span><span class=\"p\">])</span>\n    <span class=\"k\">return</span> <span class=\"n\">encoded_output_column</span></div>\n\n\n<div class=\"viewcode-block\" id=\"get_column_lengths\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.utils.get_column_lengths\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_column_lengths</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"p\">,</span> <span class=\"n\">column_name_mask</span><span class=\"p\">):</span>\n    <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">N_L</span><span class=\"p\">,</span> <span class=\"n\">embed_D</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">column_embed</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n    <span class=\"n\">column_reshape</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"n\">N_L</span><span class=\"p\">,</span> <span class=\"n\">embed_D</span><span class=\"p\">]</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">column_name_mask</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">column_reshape</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]),</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span></div>\n\n\n<div class=\"viewcode-block\" id=\"filter_used_column\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.utils.filter_used_column\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">filter_used_column</span><span class=\"p\">(</span><span class=\"n\">encoded_columns</span><span class=\"p\">,</span> <span class=\"n\">col_idx</span><span class=\"p\">,</span> <span class=\"n\">padding_count</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">):</span>\n    <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">D</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">encoded_columns</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n    <span class=\"n\">zero_padding</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"n\">D</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">():</span>\n        <span class=\"n\">zero_padding</span> <span class=\"o\">=</span> <span class=\"n\">zero_padding</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">current_device</span><span class=\"p\">())</span>\n\n    <span class=\"n\">encoded_used_columns</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">):</span>\n        <span class=\"n\">encoded_used_column</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">stack</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span><span class=\"n\">encoded_columns</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"n\">col_idx</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]]</span>\n            <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"n\">zero_padding</span><span class=\"p\">]</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">padding_count</span> <span class=\"o\">-</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">col_idx</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]))</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">encoded_used_columns</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">encoded_used_column</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">stack</span><span class=\"p\">(</span><span class=\"n\">encoded_used_columns</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"convert_position_to_decoder_input\"><a class=\"viewcode-back\" href=\"../../../../claf.model.semantic_parsing.html#claf.model.semantic_parsing.utils.convert_position_to_decoder_input\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">convert_position_to_decoder_input</span><span class=\"p\">(</span><span class=\"n\">conds_val_pos</span><span class=\"p\">,</span> <span class=\"n\">token_maxlen</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">):</span>\n    <span class=\"n\">B</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">conds_val_pos</span><span class=\"p\">)</span>\n    <span class=\"n\">max_len</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"nb\">max</span><span class=\"p\">([</span><span class=\"nb\">max</span><span class=\"p\">([</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tok</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">tok</span> <span class=\"ow\">in</span> <span class=\"n\">tok_seq</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span> <span class=\"k\">for</span> <span class=\"n\">tok_seq</span> <span class=\"ow\">in</span> <span class=\"n\">conds_val_pos</span><span class=\"p\">])</span> <span class=\"o\">-</span> <span class=\"mi\">1</span>\n    <span class=\"p\">)</span>  <span class=\"c1\"># The max seq len in the batch.</span>\n    <span class=\"k\">if</span> <span class=\"n\">max_len</span> <span class=\"o\">&lt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n        <span class=\"n\">max_len</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n    <span class=\"n\">ret_array</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">((</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">max_len</span><span class=\"p\">,</span> <span class=\"n\">token_maxlen</span><span class=\"p\">),</span> <span class=\"n\">dtype</span><span class=\"o\">=</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">float32</span><span class=\"p\">)</span>\n    <span class=\"n\">ret_len</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">((</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">))</span>\n    <span class=\"k\">for</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">tok_seq</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">conds_val_pos</span><span class=\"p\">):</span>\n        <span class=\"n\">idx</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"k\">for</span> <span class=\"n\">idx</span><span class=\"p\">,</span> <span class=\"n\">one_tok_seq</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">tok_seq</span><span class=\"p\">):</span>\n            <span class=\"n\">out_one_tok_seq</span> <span class=\"o\">=</span> <span class=\"n\">one_tok_seq</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n            <span class=\"n\">ret_len</span><span class=\"p\">[</span><span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">idx</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">out_one_tok_seq</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">t</span><span class=\"p\">,</span> <span class=\"n\">tok_id</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">out_one_tok_seq</span><span class=\"p\">):</span>\n                <span class=\"n\">ret_array</span><span class=\"p\">[</span><span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">idx</span><span class=\"p\">,</span> <span class=\"n\">t</span><span class=\"p\">,</span> <span class=\"n\">tok_id</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n        <span class=\"k\">if</span> <span class=\"n\">idx</span> <span class=\"o\">&lt;</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n            <span class=\"n\">ret_array</span><span class=\"p\">[</span><span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">idx</span> <span class=\"o\">+</span> <span class=\"mi\">1</span> <span class=\"p\">:,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n            <span class=\"n\">ret_len</span><span class=\"p\">[</span><span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">idx</span> <span class=\"o\">+</span> <span class=\"mi\">1</span> <span class=\"p\">:]</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n\n    <span class=\"n\">ret_inp</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">from_numpy</span><span class=\"p\">(</span><span class=\"n\">ret_array</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">():</span>\n        <span class=\"n\">ret_inp</span> <span class=\"o\">=</span> <span class=\"n\">ret_inp</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">current_device</span><span class=\"p\">())</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">ret_inp</span><span class=\"p\">,</span> <span class=\"n\">ret_len</span>  <span class=\"c1\"># [B, IDX, max_len, token_maxlen]</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/sequence_classification/bert.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.sequence_classification.bert &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.sequence_classification.bert</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.sequence_classification.bert</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">BertModel</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithoutTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.sequence_classification.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SequenceClassification</span>\n\n\n<div class=\"viewcode-block\" id=\"BertForSeqCls\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.BertForSeqCls\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:bert_for_seq_cls&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">BertForSeqCls</span><span class=\"p\">(</span><span class=\"n\">SequenceClassification</span><span class=\"p\">,</span> <span class=\"n\">ModelWithoutTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Implementation of Sentence Classification model presented in</span>\n<span class=\"sd\">    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1810.04805)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: used to embed the sequence</span>\n<span class=\"sd\">        num_classes: number of classified classes</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        pretrained_model_name: the name of a pre-trained model</span>\n<span class=\"sd\">        dropout: classification layer dropout</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">num_classes</span><span class=\"p\">,</span> <span class=\"n\">pretrained_model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BertForSeqCls</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_pytorch_transformers</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>  <span class=\"c1\"># for optimizer&#39;s model parameters</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_classes</span> <span class=\"o\">=</span> <span class=\"n\">num_classes</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span> <span class=\"o\">=</span> <span class=\"n\">BertModel</span><span class=\"o\">.</span><span class=\"n\">from_pretrained</span><span class=\"p\">(</span>\n            <span class=\"n\">pretrained_model_name</span><span class=\"p\">,</span> <span class=\"n\">cache_dir</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">ROOT</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">dropout</span><span class=\"p\">),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"n\">num_classes</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span><span class=\"o\">.</span><span class=\"n\">apply</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">init_weights</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"BertForSeqCls.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.BertForSeqCls.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">            {</span>\n<span class=\"sd\">                &quot;bert_input&quot;: {</span>\n<span class=\"sd\">                    &quot;feature&quot;: [</span>\n<span class=\"sd\">                        [3, 4, 1, 0, 0, 0, ...],</span>\n<span class=\"sd\">                        ...,</span>\n<span class=\"sd\">                    ]</span>\n<span class=\"sd\">                },</span>\n<span class=\"sd\">                &quot;token_type&quot;: {</span>\n<span class=\"sd\">                    &quot;feature&quot;: [</span>\n<span class=\"sd\">                        [0, 0, 0, 0, 0, 0, ...],</span>\n<span class=\"sd\">                        ...,</span>\n<span class=\"sd\">                    ],</span>\n<span class=\"sd\">                }</span>\n<span class=\"sd\">            }</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">            {</span>\n<span class=\"sd\">                &quot;class_idx&quot;: [2, 1, 0, 4, 5, ...]</span>\n<span class=\"sd\">                &quot;data_idx&quot;: [2, 4, 5, 7, 2, 1, ...]</span>\n<span class=\"sd\">            }</span>\n<span class=\"sd\">            Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - sequence_embed: embedding vector of the sequence</span>\n<span class=\"sd\">            - logits: representing unnormalized log probabilities of the class.</span>\n\n<span class=\"sd\">            - class_idx: target class idx</span>\n<span class=\"sd\">            - data_idx: data idx</span>\n<span class=\"sd\">            - loss: a scalar loss to be optimized</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">bert_inputs</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">token_type_ids</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">attention_mask</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">bert_inputs</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n        <span class=\"n\">outputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"p\">(</span>\n            <span class=\"n\">bert_inputs</span><span class=\"p\">,</span> <span class=\"n\">token_type_ids</span><span class=\"o\">=</span><span class=\"n\">token_type_ids</span><span class=\"p\">,</span> <span class=\"n\">attention_mask</span><span class=\"o\">=</span><span class=\"n\">attention_mask</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">pooled_output</span> <span class=\"o\">=</span> <span class=\"n\">outputs</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span><span class=\"p\">(</span><span class=\"n\">pooled_output</span><span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;sequence_embed&quot;</span><span class=\"p\">:</span> <span class=\"n\">pooled_output</span><span class=\"p\">,</span> <span class=\"s2\">&quot;logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">logits</span><span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">class_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">class_idx</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span>\n                <span class=\"n\">logits</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_classes</span><span class=\"p\">),</span> <span class=\"n\">class_idx</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>  <span class=\"c1\"># NOTE: DataParallel concat Error</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div>\n\n<div class=\"viewcode-block\" id=\"BertForSeqCls.print_examples\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.BertForSeqCls.print_examples\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">print_examples</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Print evaluation examples</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            index: data index</span>\n<span class=\"sd\">            inputs: mini-batch inputs</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (sequence id)</span>\n<span class=\"sd\">                - value: dictionary consisting of</span>\n<span class=\"sd\">                    - class_idx</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            print(Sequence, Sequence Tokens, Target Class, Predicted Class)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">][</span><span class=\"n\">index</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">helper</span>\n\n        <span class=\"n\">sequence_a</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">sequence_a_tokens</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_a_tokens&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">sequence_b</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">sequence_b_tokens</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_b_tokens&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">target_class_text</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">pred_class_idx</span> <span class=\"o\">=</span> <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_class_text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_class_text_with_idx</span><span class=\"p\">(</span><span class=\"n\">pred_class_idx</span><span class=\"p\">)</span>\n\n        <span class=\"nb\">print</span><span class=\"p\">()</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence a:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_a</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence a Tokens:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_a_tokens</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">sequence_b</span><span class=\"p\">:</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence b:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_b</span><span class=\"p\">)</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence b Tokens:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_b_tokens</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Target:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Class:&quot;</span><span class=\"p\">,</span> <span class=\"n\">target_class_text</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Predict:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Class:&quot;</span><span class=\"p\">,</span> <span class=\"n\">pred_class_text</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">()</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/sequence_classification/bert_for_seq_cls.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.sequence_classification.bert_for_seq_cls &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.sequence_classification.bert_for_seq_cls</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.sequence_classification.bert_for_seq_cls</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">BertModel</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithoutTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.sequence_classification.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SequenceClassification</span>\n\n\n<div class=\"viewcode-block\" id=\"BertForSeqCls\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.bert_for_seq_cls.BertForSeqCls\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:bert_for_seq_cls&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">BertForSeqCls</span><span class=\"p\">(</span><span class=\"n\">SequenceClassification</span><span class=\"p\">,</span> <span class=\"n\">ModelWithoutTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Implementation of Single Sentence Classification model presented in</span>\n<span class=\"sd\">    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1810.04805)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: used to embed the sequence</span>\n<span class=\"sd\">        num_classes: number of classified classes</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        pretrained_model_name: the name of a pre-trained model</span>\n<span class=\"sd\">        dropout: classification layer dropout</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">num_classes</span><span class=\"p\">,</span> <span class=\"n\">pretrained_model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BertForSeqCls</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>  <span class=\"c1\"># for optimizer&#39;s model parameters</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_classes</span> <span class=\"o\">=</span> <span class=\"n\">num_classes</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span> <span class=\"o\">=</span> <span class=\"n\">BertModel</span><span class=\"o\">.</span><span class=\"n\">from_pretrained</span><span class=\"p\">(</span>\n            <span class=\"n\">pretrained_model_name</span><span class=\"p\">,</span> <span class=\"n\">cache_dir</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">ROOT</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">dropout</span><span class=\"p\">),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"n\">num_classes</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span><span class=\"o\">.</span><span class=\"n\">apply</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">init_weights</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"BertForSeqCls.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.bert_for_seq_cls.BertForSeqCls.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">            {</span>\n<span class=\"sd\">                &quot;bert_input&quot;: {</span>\n<span class=\"sd\">                    &quot;feature&quot;: [</span>\n<span class=\"sd\">                        [3, 4, 1, 0, 0, 0, ...],</span>\n<span class=\"sd\">                        ...,</span>\n<span class=\"sd\">                    ]</span>\n<span class=\"sd\">                },</span>\n<span class=\"sd\">                &quot;token_type&quot;: {</span>\n<span class=\"sd\">                    &quot;feature&quot;: [</span>\n<span class=\"sd\">                        [0, 0, 0, 0, 0, 0, ...],</span>\n<span class=\"sd\">                        ...,</span>\n<span class=\"sd\">                    ],</span>\n<span class=\"sd\">                }</span>\n<span class=\"sd\">            }</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">            {</span>\n<span class=\"sd\">                &quot;class_idx&quot;: [2, 1, 0, 4, 5, ...]</span>\n<span class=\"sd\">                &quot;data_idx&quot;: [2, 4, 5, 7, 2, 1, ...]</span>\n<span class=\"sd\">            }</span>\n<span class=\"sd\">            Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - sequence_embed: embedding vector of the sequence</span>\n<span class=\"sd\">            - class_logits: representing unnormalized log probabilities of the class.</span>\n\n<span class=\"sd\">            - class_idx: target class idx</span>\n<span class=\"sd\">            - data_idx: data idx</span>\n<span class=\"sd\">            - loss: a scalar loss to be optimized</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">bert_inputs</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">token_type_ids</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">attention_mask</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">bert_inputs</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n        <span class=\"n\">outputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"p\">(</span>\n            <span class=\"n\">bert_inputs</span><span class=\"p\">,</span> <span class=\"n\">token_type_ids</span><span class=\"o\">=</span><span class=\"n\">token_type_ids</span><span class=\"p\">,</span> <span class=\"n\">attention_mask</span><span class=\"o\">=</span><span class=\"n\">attention_mask</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">pooled_output</span> <span class=\"o\">=</span> <span class=\"n\">outputs</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"n\">class_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span><span class=\"p\">(</span><span class=\"n\">pooled_output</span><span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;sequence_embed&quot;</span><span class=\"p\">:</span> <span class=\"n\">pooled_output</span><span class=\"p\">,</span> <span class=\"s2\">&quot;class_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_logits</span><span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">class_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">class_idx</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">class_logits</span><span class=\"p\">,</span> <span class=\"n\">class_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>  <span class=\"c1\"># NOTE: DataParallel concat Error</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div>\n\n<div class=\"viewcode-block\" id=\"BertForSeqCls.print_examples\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.bert_for_seq_cls.BertForSeqCls.print_examples\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">print_examples</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Print evaluation examples</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            index: data index</span>\n<span class=\"sd\">            inputs: mini-batch inputs</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (sequence id)</span>\n<span class=\"sd\">                - value: dictionary consisting of</span>\n<span class=\"sd\">                    - class_idx</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            print(Sequence, Sequence Tokens, Target Class, Predicted Class)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">][</span><span class=\"n\">index</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">helper</span>\n\n        <span class=\"n\">sequence_a</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">sequence_a_tokens</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_a_sub_tokens&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">sequence_b</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">sequence_b_tokens</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_b_sub_tokens&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">target_class_text</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">pred_class_idx</span> <span class=\"o\">=</span> <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_class_text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_class_text_with_idx</span><span class=\"p\">(</span><span class=\"n\">pred_class_idx</span><span class=\"p\">)</span>\n\n        <span class=\"nb\">print</span><span class=\"p\">()</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence a:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_a</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence a Tokens:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_a_tokens</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">sequence_b</span><span class=\"p\">:</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence b:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_b</span><span class=\"p\">)</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence b Tokens:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_b_tokens</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Target:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Class:&quot;</span><span class=\"p\">,</span> <span class=\"n\">target_class_text</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Predict:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Class:&quot;</span><span class=\"p\">,</span> <span class=\"n\">pred_class_text</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">()</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/sequence_classification/mixin.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.sequence_classification.mixin &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.sequence_classification.mixin</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.sequence_classification.mixin</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">pathlib</span> <span class=\"k\">import</span> <span class=\"n\">Path</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">pycm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pycm.pycm_obj</span> <span class=\"k\">import</span> <span class=\"n\">pycmVectorError</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model</span> <span class=\"k\">import</span> <span class=\"n\">cls_utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelBase</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric.classification</span> <span class=\"k\">import</span> <span class=\"n\">macro_f1</span><span class=\"p\">,</span> <span class=\"n\">macro_precision</span><span class=\"p\">,</span> <span class=\"n\">macro_recall</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric.glue</span> <span class=\"k\">import</span> <span class=\"n\">simple_accuracy</span><span class=\"p\">,</span> <span class=\"n\">f1</span><span class=\"p\">,</span> <span class=\"n\">matthews_corr</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"SequenceClassification\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SequenceClassification</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot; Sequence Classification Mixin Class &quot;&quot;&quot;</span>\n\n<div class=\"viewcode-block\" id=\"SequenceClassification.make_predictions\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification.make_predictions\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_predictions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Make predictions with model&#39;s output_dict</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            output_dict: model&#39;s output dictionary consisting of</span>\n<span class=\"sd\">                - sequence_embed: embedding vector of the sequence</span>\n<span class=\"sd\">                - logits: representing unnormalized log probabilities of the class</span>\n\n<span class=\"sd\">                - class_idx: target class idx</span>\n<span class=\"sd\">                - data_idx: data idx</span>\n<span class=\"sd\">                - loss: a scalar loss to be optimized</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (sequence id)</span>\n<span class=\"sd\">                - value: dictionary consisting of</span>\n<span class=\"sd\">                    - class_idx</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_logits</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;logits&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_class_idxs</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">argmax</span><span class=\"p\">(</span><span class=\"n\">pred_logits</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">predictions</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()):</span> <span class=\"p\">{</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">pred_class_idx</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()}</span>\n            <span class=\"k\">for</span> <span class=\"n\">data_idx</span><span class=\"p\">,</span> <span class=\"n\">pred_class_idx</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">data_indices</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">pred_class_idxs</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">))</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">predictions</span></div>\n\n<div class=\"viewcode-block\" id=\"SequenceClassification.predict\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification.predict\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">,</span> <span class=\"n\">arguments</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Inference by raw_feature</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            output_dict: model&#39;s output dictionary consisting of</span>\n<span class=\"sd\">                - sequence_embed: embedding vector of the sequence</span>\n<span class=\"sd\">                - logits: representing unnormalized log probabilities of the class.</span>\n<span class=\"sd\">            arguments: arguments dictionary consisting of user_input</span>\n<span class=\"sd\">            helper: dictionary to get the classification result, consisting of</span>\n<span class=\"sd\">                - class_idx2text: dictionary converting class_idx to class_text</span>\n\n<span class=\"sd\">        * Returns: output dict (dict) consisting of</span>\n<span class=\"sd\">            - logits: representing unnormalized log probabilities of the class</span>\n<span class=\"sd\">            - class_idx: predicted class idx</span>\n<span class=\"sd\">            - class_text: predicted class text</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;logits&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">class_idx</span> <span class=\"o\">=</span> <span class=\"n\">logits</span><span class=\"o\">.</span><span class=\"n\">argmax</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">class_idx</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">:</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx2text&quot;</span><span class=\"p\">][</span><span class=\"n\">class_idx</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()],</span>\n        <span class=\"p\">}</span></div>\n\n<div class=\"viewcode-block\" id=\"SequenceClassification.make_metrics\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification.make_metrics\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Make metrics with prediction dictionary</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (sequence id)</span>\n<span class=\"sd\">                - value: dictionary consisting of</span>\n<span class=\"sd\">                    - class_idx</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            metrics: metric dictionary consisting of</span>\n<span class=\"sd\">                - &#39;macro_f1&#39;: class prediction macro(unweighted mean) f1</span>\n<span class=\"sd\">                - &#39;macro_precision&#39;: class prediction macro(unweighted mean) precision</span>\n<span class=\"sd\">                - &#39;macro_recall&#39;: class prediction macro(unweighted mean) recall</span>\n<span class=\"sd\">                - &#39;accuracy&#39;: class prediction accuracy</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">pred_idx</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">pred_classes</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"n\">target_idx</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">target_classes</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">target_count</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span><span class=\"p\">)</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">data_id</span><span class=\"p\">,</span> <span class=\"n\">pred</span> <span class=\"ow\">in</span> <span class=\"n\">predictions</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">target</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_ground_truth</span><span class=\"p\">(</span><span class=\"n\">data_id</span><span class=\"p\">)</span>\n\n            <span class=\"n\">pred_idx</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">pred</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">])</span>\n            <span class=\"n\">pred_classes</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">class_idx2text</span><span class=\"p\">[</span><span class=\"n\">pred</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]])</span>\n\n            <span class=\"n\">target_idx</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">target</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">])</span>\n            <span class=\"n\">target_classes</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">target</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">])</span>\n\n        <span class=\"n\">metrics</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;accuracy&quot;</span><span class=\"p\">:</span> <span class=\"n\">simple_accuracy</span><span class=\"p\">(</span><span class=\"n\">pred_idx</span><span class=\"p\">,</span> <span class=\"n\">target_idx</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">target_count</span> <span class=\"o\">==</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n            <span class=\"c1\"># binary class</span>\n            <span class=\"n\">f1_metric</span> <span class=\"o\">=</span> <span class=\"n\">f1</span><span class=\"p\">(</span><span class=\"n\">pred_idx</span><span class=\"p\">,</span> <span class=\"n\">target_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">metrics</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">f1_metric</span><span class=\"p\">)</span>\n\n        <span class=\"n\">matthews_corr_metric</span> <span class=\"o\">=</span> <span class=\"n\">matthews_corr</span><span class=\"p\">(</span><span class=\"n\">pred_idx</span><span class=\"p\">,</span> <span class=\"n\">target_idx</span><span class=\"p\">)</span>\n        <span class=\"n\">metrics</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">matthews_corr_metric</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">metrics</span></div>\n\n<div class=\"viewcode-block\" id=\"SequenceClassification.write_predictions\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification.write_predictions\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">write_predictions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">is_dict</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">pycm_obj</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Override write_predictions() in ModelBase to log confusion matrix</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SequenceClassification</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">write_predictions</span><span class=\"p\">(</span>\n                <span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"o\">=</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">is_dict</span><span class=\"o\">=</span><span class=\"n\">is_dict</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n            <span class=\"c1\"># TODO: Need to Fix</span>\n            <span class=\"n\">model_base</span> <span class=\"o\">=</span> <span class=\"n\">ModelBase</span><span class=\"p\">()</span>\n            <span class=\"n\">model_base</span><span class=\"o\">.</span><span class=\"n\">_log_dir</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log_dir</span>\n            <span class=\"n\">model_base</span><span class=\"o\">.</span><span class=\"n\">_train_counter</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_train_counter</span>\n            <span class=\"n\">model_base</span><span class=\"o\">.</span><span class=\"n\">training</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training</span>\n            <span class=\"n\">model_base</span><span class=\"o\">.</span><span class=\"n\">write_predictions</span><span class=\"p\">(</span><span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"o\">=</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">is_dict</span><span class=\"o\">=</span><span class=\"n\">is_dict</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;train&quot;</span> <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;valid&quot;</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">pycm_obj</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">stats_file_path</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;predictions-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-{self._train_counter.get_display()}-stats&quot;</span>\n            <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">save_csv</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log_dir</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;predictions&quot;</span> <span class=\"o\">/</span> <span class=\"n\">stats_file_path</span><span class=\"p\">))</span>\n\n            <span class=\"n\">confusion_matrix_file_path</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n                <span class=\"n\">f</span><span class=\"s2\">&quot;predictions-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-{self._train_counter.get_display()}-confusion_matrix&quot;</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">cls_utils</span><span class=\"o\">.</span><span class=\"n\">write_confusion_matrix_to_csv</span><span class=\"p\">(</span>\n                <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log_dir</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;predictions&quot;</span> <span class=\"o\">/</span> <span class=\"n\">confusion_matrix_file_path</span><span class=\"p\">),</span> <span class=\"n\">pycm_obj</span>\n            <span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"SequenceClassification.print_examples\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification.print_examples\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">print_examples</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Print evaluation examples</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            index: data index</span>\n<span class=\"sd\">            inputs: mini-batch inputs</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (sequence id)</span>\n<span class=\"sd\">                - value: dictionary consisting of</span>\n<span class=\"sd\">                    - class_idx</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            print(Sequence, Target Class, Predicted Class)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">][</span><span class=\"n\">index</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">helper</span>\n        <span class=\"n\">sequence</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">target_class_text</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">pred_class_idx</span> <span class=\"o\">=</span> <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_class_text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_class_text_with_idx</span><span class=\"p\">(</span><span class=\"n\">pred_class_idx</span><span class=\"p\">)</span>\n\n        <span class=\"nb\">print</span><span class=\"p\">()</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Target:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Class:&quot;</span><span class=\"p\">,</span> <span class=\"n\">target_class_text</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Predict:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Class:&quot;</span><span class=\"p\">,</span> <span class=\"n\">pred_class_text</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">()</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/sequence_classification/roberta.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.sequence_classification.roberta &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.sequence_classification.roberta</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.sequence_classification.roberta</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">RobertaModel</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithoutTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.sequence_classification.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SequenceClassification</span>\n\n\n<div class=\"viewcode-block\" id=\"RobertaForSeqCls\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.RobertaForSeqCls\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:roberta_for_seq_cls&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">RobertaForSeqCls</span><span class=\"p\">(</span><span class=\"n\">SequenceClassification</span><span class=\"p\">,</span> <span class=\"n\">ModelWithoutTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Implementation of Sentence Classification model presented in</span>\n<span class=\"sd\">    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1810.04805)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: used to embed the sequence</span>\n<span class=\"sd\">        num_classes: number of classified classes</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        pretrained_model_name: the name of a pre-trained model</span>\n<span class=\"sd\">        dropout: classification layer dropout</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">num_classes</span><span class=\"p\">,</span> <span class=\"n\">pretrained_model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">RobertaForSeqCls</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_pytorch_transformers</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>  <span class=\"c1\"># for optimizer&#39;s model parameters</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_classes</span> <span class=\"o\">=</span> <span class=\"n\">num_classes</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span> <span class=\"o\">=</span> <span class=\"n\">RobertaModel</span><span class=\"o\">.</span><span class=\"n\">from_pretrained</span><span class=\"p\">(</span>\n            <span class=\"n\">pretrained_model_name</span><span class=\"p\">,</span> <span class=\"n\">cache_dir</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">ROOT</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">),</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">dropout</span><span class=\"p\">),</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"n\">num_classes</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span><span class=\"o\">.</span><span class=\"n\">apply</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">init_weights</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"RobertaForSeqCls.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.RobertaForSeqCls.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">            {</span>\n<span class=\"sd\">                &quot;bert_input&quot;: {</span>\n<span class=\"sd\">                    &quot;feature&quot;: [</span>\n<span class=\"sd\">                        [3, 4, 1, 0, 0, 0, ...],</span>\n<span class=\"sd\">                        ...,</span>\n<span class=\"sd\">                    ]</span>\n<span class=\"sd\">                },</span>\n<span class=\"sd\">            }</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">            {</span>\n<span class=\"sd\">                &quot;class_idx&quot;: [2, 1, 0, 4, 5, ...]</span>\n<span class=\"sd\">                &quot;data_idx&quot;: [2, 4, 5, 7, 2, 1, ...]</span>\n<span class=\"sd\">            }</span>\n<span class=\"sd\">            Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - sequence_embed: embedding vector of the sequence</span>\n<span class=\"sd\">            - logits: representing unnormalized log probabilities of the class.</span>\n\n<span class=\"sd\">            - class_idx: target class idx</span>\n<span class=\"sd\">            - data_idx: data idx</span>\n<span class=\"sd\">            - loss: a scalar loss to be optimized</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">bert_inputs</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">attention_mask</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">bert_inputs</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n        <span class=\"n\">outputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"p\">(</span>\n            <span class=\"n\">bert_inputs</span><span class=\"p\">,</span> <span class=\"n\">token_type_ids</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">attention_mask</span><span class=\"o\">=</span><span class=\"n\">attention_mask</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">sequence_output</span> <span class=\"o\">=</span> <span class=\"n\">outputs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">pooled_output</span> <span class=\"o\">=</span> <span class=\"n\">sequence_output</span><span class=\"p\">[:,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"p\">:]</span>  <span class=\"c1\"># take &lt;s&gt; token (equiv. to [CLS])</span>\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span><span class=\"p\">(</span><span class=\"n\">pooled_output</span><span class=\"p\">)</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;sequence_embed&quot;</span><span class=\"p\">:</span> <span class=\"n\">pooled_output</span><span class=\"p\">,</span> <span class=\"s2\">&quot;logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">logits</span><span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">class_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">class_idx</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span>\n                <span class=\"n\">logits</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_classes</span><span class=\"p\">),</span> <span class=\"n\">class_idx</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>  <span class=\"c1\"># NOTE: DataParallel concat Error</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div>\n\n<div class=\"viewcode-block\" id=\"RobertaForSeqCls.print_examples\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.RobertaForSeqCls.print_examples\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">print_examples</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Print evaluation examples</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            index: data index</span>\n<span class=\"sd\">            inputs: mini-batch inputs</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (sequence id)</span>\n<span class=\"sd\">                - value: dictionary consisting of</span>\n<span class=\"sd\">                    - class_idx</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            print(Sequence, Sequence Tokens, Target Class, Predicted Class)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">][</span><span class=\"n\">index</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">helper</span>\n\n        <span class=\"n\">sequence_a</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_a&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">sequence_a_tokens</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_a_tokens&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">sequence_b</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_b&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">sequence_b_tokens</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_b_tokens&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">target_class_text</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;class_text&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">pred_class_idx</span> <span class=\"o\">=</span> <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_class_text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_class_text_with_idx</span><span class=\"p\">(</span><span class=\"n\">pred_class_idx</span><span class=\"p\">)</span>\n\n        <span class=\"nb\">print</span><span class=\"p\">()</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence a:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_a</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence a Tokens:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_a_tokens</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">sequence_b</span><span class=\"p\">:</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence b:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_b</span><span class=\"p\">)</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence b Tokens:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_b_tokens</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Target:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Class:&quot;</span><span class=\"p\">,</span> <span class=\"n\">target_class_text</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Predict:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Class:&quot;</span><span class=\"p\">,</span> <span class=\"n\">pred_class_text</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">()</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/sequence_classification/structured_self_attention.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.sequence_classification.structured_self_attention &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.sequence_classification.structured_self_attention</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.sequence_classification.structured_self_attention</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.sequence_classification.mixin</span> <span class=\"k\">import</span> <span class=\"n\">SequenceClassification</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules</span> <span class=\"k\">import</span> <span class=\"n\">functional</span> <span class=\"k\">as</span> <span class=\"n\">f</span>\n\n\n<div class=\"viewcode-block\" id=\"StructuredSelfAttention\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:structured_self_attention&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">StructuredSelfAttention</span><span class=\"p\">(</span><span class=\"n\">SequenceClassification</span><span class=\"p\">,</span> <span class=\"n\">ModelWithTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Implementation of model presented in</span>\n<span class=\"sd\">    A Structured Self-attentive Sentence Embedding</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1703.03130)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: used to embed the sequence</span>\n<span class=\"sd\">        num_classes: number of classified classes</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        encoding_rnn_hidden_dim: hidden dimension of rnn (unidirectional)</span>\n<span class=\"sd\">        encoding_rnn_num_layer: the number of rnn layers</span>\n<span class=\"sd\">        encoding_rnn_dropout: rnn dropout probability</span>\n<span class=\"sd\">        attention_dim: attention dimension  # d_a in the paper</span>\n<span class=\"sd\">        num_attention_heads: number of attention heads  # r in the paper</span>\n<span class=\"sd\">        sequence_embed_dim: dimension of sequence embedding</span>\n<span class=\"sd\">        dropout: classification layer dropout</span>\n<span class=\"sd\">        penalization_coefficient: penalty coefficient for frobenius norm</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">token_embedder</span><span class=\"p\">,</span>\n        <span class=\"n\">num_classes</span><span class=\"p\">,</span>\n        <span class=\"n\">encoding_rnn_hidden_dim</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">,</span>\n        <span class=\"n\">encoding_rnn_num_layer</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">encoding_rnn_dropout</span><span class=\"o\">=</span><span class=\"mf\">0.</span><span class=\"p\">,</span>\n        <span class=\"n\">attention_dim</span><span class=\"o\">=</span><span class=\"mi\">350</span><span class=\"p\">,</span>\n        <span class=\"n\">num_attention_heads</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span>\n        <span class=\"n\">sequence_embed_dim</span><span class=\"o\">=</span><span class=\"mi\">2000</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">,</span>\n        <span class=\"n\">penalization_coefficient</span><span class=\"o\">=</span><span class=\"mf\">1.</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">StructuredSelfAttention</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_embedder</span><span class=\"p\">)</span>\n\n        <span class=\"n\">rnn_input_dim</span> <span class=\"o\">=</span> <span class=\"n\">token_embedder</span><span class=\"o\">.</span><span class=\"n\">get_embed_dim</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_classes</span> <span class=\"o\">=</span> <span class=\"n\">num_classes</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">encoding_rnn_hidden_dim</span> <span class=\"o\">=</span> <span class=\"n\">encoding_rnn_hidden_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span>  <span class=\"c1\"># bidirectional</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">attention_dim</span> <span class=\"o\">=</span> <span class=\"n\">attention_dim</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_attention_heads</span> <span class=\"o\">=</span> <span class=\"n\">num_attention_heads</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_dim</span> <span class=\"o\">=</span> <span class=\"n\">sequence_embed_dim</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">dropout</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">penalization_coefficient</span> <span class=\"o\">=</span> <span class=\"n\">penalization_coefficient</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">encoder</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">rnn_input_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">encoding_rnn_hidden_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">encoding_rnn_num_layer</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">encoding_rnn_dropout</span><span class=\"p\">,</span>\n            <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">A</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">encoding_rnn_hidden_dim</span><span class=\"p\">,</span> <span class=\"n\">attention_dim</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">),</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Tanh</span><span class=\"p\">(),</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">attention_dim</span><span class=\"p\">,</span> <span class=\"n\">num_attention_heads</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">),</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fully_connected</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">encoding_rnn_hidden_dim</span> <span class=\"o\">*</span> <span class=\"n\">num_attention_heads</span><span class=\"p\">,</span> <span class=\"n\">sequence_embed_dim</span><span class=\"p\">),</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ReLU</span><span class=\"p\">(),</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">dropout</span><span class=\"p\">),</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">sequence_embed_dim</span><span class=\"p\">,</span> <span class=\"n\">num_classes</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"StructuredSelfAttention.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">            {&quot;sequence&quot;: [0, 3, 4, 1]}</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">            {&quot;class_idx&quot;: 2, &quot;data_idx&quot;: 0}</span>\n<span class=\"sd\">             Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - sequence_embed: embedding vector of the sequence</span>\n<span class=\"sd\">            - logits: representing unnormalized log probabilities of the class.</span>\n\n<span class=\"sd\">            - class_idx: target class idx</span>\n<span class=\"sd\">            - data_idx: data idx</span>\n<span class=\"sd\">            - loss: a scalar loss to be optimized</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">sequence</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Sorted Sequence config (seq_lengths, perm_idx, unperm_idx) for RNN pack_forward</span>\n        <span class=\"n\">sequence_config</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">)</span>\n\n        <span class=\"n\">token_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_embedder</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">)</span>\n\n        <span class=\"n\">token_encodings</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">forward_rnn_with_pack</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">encoder</span><span class=\"p\">,</span> <span class=\"n\">token_embed</span><span class=\"p\">,</span> <span class=\"n\">sequence_config</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># [B, L, encoding_rnn_hidden_dim]</span>\n\n        <span class=\"n\">attention</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">A</span><span class=\"p\">(</span><span class=\"n\">token_encodings</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>  <span class=\"c1\"># [B, num_attention_heads, L]</span>\n\n        <span class=\"n\">sequence_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>  <span class=\"c1\"># [B, L]</span>\n        <span class=\"n\">sequence_mask</span> <span class=\"o\">=</span> <span class=\"n\">sequence_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand_as</span><span class=\"p\">(</span><span class=\"n\">attention</span><span class=\"p\">)</span>\n        <span class=\"n\">attention</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">attention</span><span class=\"p\">,</span> <span class=\"n\">sequence_mask</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mf\">1e-13</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n\n        <span class=\"n\">attended_encodings</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span>\n            <span class=\"n\">attention</span><span class=\"p\">,</span> <span class=\"n\">token_encodings</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># [B, num_attention_heads, sequence_embed_dim]</span>\n        <span class=\"n\">sequence_embed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fully_connected</span><span class=\"p\">(</span>\n            <span class=\"n\">attended_encodings</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">attended_encodings</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># [B, sequence_embed_dim]</span>\n\n        <span class=\"n\">logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span><span class=\"p\">(</span><span class=\"n\">sequence_embed</span><span class=\"p\">)</span>  <span class=\"c1\"># [B, num_classes]</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;sequence_embed&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_embed</span><span class=\"p\">,</span> <span class=\"s2\">&quot;logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">logits</span><span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">class_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;class_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">class_idx</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">logits</span><span class=\"p\">,</span> <span class=\"n\">class_idx</span><span class=\"p\">)</span>\n            <span class=\"n\">loss</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">penalty</span><span class=\"p\">(</span><span class=\"n\">attention</span><span class=\"p\">)</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>  <span class=\"c1\"># NOTE: DataParallel concat Error</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div>\n\n<div class=\"viewcode-block\" id=\"StructuredSelfAttention.penalty\"><a class=\"viewcode-back\" href=\"../../../../claf.model.sequence_classification.html#claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention.penalty\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">penalty</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">attention</span><span class=\"p\">):</span>\n        <span class=\"n\">aa</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span>\n            <span class=\"n\">attention</span><span class=\"p\">,</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>  <span class=\"c1\"># [B, num_attention_heads, num_attention_heads]</span>\n        <span class=\"n\">penalization_term</span> <span class=\"o\">=</span> <span class=\"p\">((</span><span class=\"n\">aa</span> <span class=\"o\">-</span> <span class=\"n\">aa</span><span class=\"o\">.</span><span class=\"n\">new_tensor</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">eye</span><span class=\"p\">(</span><span class=\"n\">aa</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))))</span> <span class=\"o\">**</span> <span class=\"mi\">2</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">()</span> <span class=\"o\">**</span> <span class=\"mf\">0.5</span>\n        <span class=\"k\">return</span> <span class=\"n\">penalization_term</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">penalization_coefficient</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/token_classification/bert.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.token_classification.bert &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.token_classification.bert</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.token_classification.bert</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">BertModel</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithoutTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.token_classification.mixin</span> <span class=\"k\">import</span> <span class=\"n\">TokenClassification</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model</span> <span class=\"k\">import</span> <span class=\"n\">cls_utils</span>\n\n\n<div class=\"viewcode-block\" id=\"BertForTokCls\"><a class=\"viewcode-back\" href=\"../../../../claf.model.token_classification.html#claf.model.token_classification.BertForTokCls\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:bert_for_tok_cls&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">BertForTokCls</span><span class=\"p\">(</span><span class=\"n\">TokenClassification</span><span class=\"p\">,</span> <span class=\"n\">ModelWithoutTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Implementation of Single Sentence Tagging model presented in</span>\n<span class=\"sd\">    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1810.04805)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: used to embed the sequence</span>\n<span class=\"sd\">        num_tags: number of classified tags</span>\n<span class=\"sd\">        ignore_tag_idx: index of the tag to ignore when calculating loss (tag pad value)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        pretrained_model_name: the name of a pre-trained model</span>\n<span class=\"sd\">        dropout: classification layer dropout</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">num_tags</span><span class=\"p\">,</span> <span class=\"n\">ignore_tag_idx</span><span class=\"p\">,</span> <span class=\"n\">pretrained_model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BertForTokCls</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_pytorch_transformers</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>  <span class=\"c1\"># for optimizer&#39;s model parameters</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ignore_tag_idx</span> <span class=\"o\">=</span> <span class=\"n\">ignore_tag_idx</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tags</span> <span class=\"o\">=</span> <span class=\"n\">num_tags</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span> <span class=\"o\">=</span> <span class=\"n\">BertModel</span><span class=\"o\">.</span><span class=\"n\">from_pretrained</span><span class=\"p\">(</span>\n            <span class=\"n\">pretrained_model_name</span><span class=\"p\">,</span> <span class=\"n\">cache_dir</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">ROOT</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">dropout</span><span class=\"p\">),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"n\">num_tags</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span><span class=\"o\">.</span><span class=\"n\">apply</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">init_weights</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">(</span><span class=\"n\">ignore_index</span><span class=\"o\">=</span><span class=\"n\">ignore_tag_idx</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"BertForTokCls.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.token_classification.html#claf.model.token_classification.BertForTokCls.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">            {</span>\n<span class=\"sd\">                &quot;bert_input&quot;: {</span>\n<span class=\"sd\">                    &quot;feature&quot;: [</span>\n<span class=\"sd\">                        [100, 576, 21, 45, 7, 91, 101, 0, 0, ...],</span>\n<span class=\"sd\">                        ...,</span>\n<span class=\"sd\">                    ]</span>\n<span class=\"sd\">                }</span>\n<span class=\"sd\">                &quot;token_type&quot;: {</span>\n<span class=\"sd\">                    &quot;feature&quot;: [</span>\n<span class=\"sd\">                        [0, 0, 0, 0, 0, 0, 0, 0, 0, ...],</span>\n<span class=\"sd\">                        ...,</span>\n<span class=\"sd\">                    ]</span>\n<span class=\"sd\">                },</span>\n<span class=\"sd\">                &quot;tagged_sub_token_idxs&quot;: {</span>\n<span class=\"sd\">                    [</span>\n<span class=\"sd\">                        [1, 3, 4, 0, 0, 0, 0, 0, 0, ...],</span>\n<span class=\"sd\">                        ...,</span>\n<span class=\"sd\">                    ]</span>\n<span class=\"sd\">                }</span>\n<span class=\"sd\">            }</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">            {</span>\n<span class=\"sd\">                &quot;class_idx&quot;: [2, 1, 0, 4, 5, ...]</span>\n<span class=\"sd\">                &quot;data_idx&quot;: [2, 4, 5, 7, 2, 1, ...]</span>\n<span class=\"sd\">            }</span>\n<span class=\"sd\">            Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - sequence_embed: embedding vector of the sequence</span>\n<span class=\"sd\">            - tag_logits: representing unnormalized log probabilities of the tags.</span>\n\n<span class=\"sd\">            - tag_idxs: target class idx</span>\n<span class=\"sd\">            - data_idx: data idx</span>\n<span class=\"sd\">            - loss: a scalar loss to be optimized</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">bert_inputs</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">token_type_ids</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">tagged_sub_token_idxs</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;tagged_sub_token_idxs&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">num_tokens</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;num_tokens&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">attention_mask</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">bert_inputs</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n        <span class=\"n\">outputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"p\">(</span>\n            <span class=\"n\">bert_inputs</span><span class=\"p\">,</span> <span class=\"n\">token_type_ids</span><span class=\"o\">=</span><span class=\"n\">token_type_ids</span><span class=\"p\">,</span> <span class=\"n\">attention_mask</span><span class=\"o\">=</span><span class=\"n\">attention_mask</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">token_encodings</span> <span class=\"o\">=</span> <span class=\"n\">outputs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">pooled_output</span> <span class=\"o\">=</span> <span class=\"n\">outputs</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n\n        <span class=\"n\">tag_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span><span class=\"p\">(</span><span class=\"n\">token_encodings</span><span class=\"p\">)</span>  <span class=\"c1\"># [B, L, num_tags]</span>\n\n        <span class=\"c1\"># gather the logits of the tagged token positions.</span>\n        <span class=\"n\">gather_token_pos_idxs</span> <span class=\"o\">=</span> <span class=\"n\">tagged_sub_token_idxs</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">repeat</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tags</span><span class=\"p\">)</span>\n        <span class=\"n\">token_tag_logits</span> <span class=\"o\">=</span> <span class=\"n\">tag_logits</span><span class=\"o\">.</span><span class=\"n\">gather</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">gather_token_pos_idxs</span><span class=\"p\">)</span>  <span class=\"c1\"># [B, num_tokens, num_tags]</span>\n\n        <span class=\"n\">sliced_token_tag_logits</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">token_tag_logits</span><span class=\"p\">[</span><span class=\"n\">idx</span><span class=\"p\">,</span> <span class=\"p\">:</span><span class=\"n\">n</span><span class=\"p\">,</span> <span class=\"p\">:]</span> <span class=\"k\">for</span> <span class=\"n\">idx</span><span class=\"p\">,</span> <span class=\"n\">n</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">num_tokens</span><span class=\"p\">)]</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;sequence_embed&quot;</span><span class=\"p\">:</span> <span class=\"n\">pooled_output</span><span class=\"p\">,</span> <span class=\"s2\">&quot;tag_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">sliced_token_tag_logits</span><span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">tag_idxs</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">tag_idxs</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">token_tag_logits</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tags</span><span class=\"p\">),</span> <span class=\"n\">tag_idxs</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>  <span class=\"c1\"># NOTE: DataParallel concat Error</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div>\n\n<div class=\"viewcode-block\" id=\"BertForTokCls.print_examples\"><a class=\"viewcode-back\" href=\"../../../../claf.model.token_classification.html#claf.model.token_classification.BertForTokCls.print_examples\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">print_examples</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Print evaluation examples</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            index: data index</span>\n<span class=\"sd\">            inputs: mini-batch inputs</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (sequence id)</span>\n<span class=\"sd\">                - value: dictionary consisting of</span>\n<span class=\"sd\">                    - class_idx</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            print(Sequence, Sequence Tokens, Target Tags, Target Slots, Predicted Tags, Predicted Slots)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">][</span><span class=\"n\">index</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">helper</span>\n        <span class=\"n\">sequence</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">target_tag_texts</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">pred_tag_idxs</span> <span class=\"o\">=</span> <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_tag_texts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_tag_texts_with_idxs</span><span class=\"p\">(</span><span class=\"n\">pred_tag_idxs</span><span class=\"p\">)</span>\n\n        <span class=\"n\">sequence_tokens</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_sub_tokens&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"nb\">print</span><span class=\"p\">()</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence Tokens:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_tokens</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Target:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Tags:&quot;</span><span class=\"p\">,</span> <span class=\"n\">target_tag_texts</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    (Slots)&quot;</span><span class=\"p\">,</span> <span class=\"n\">cls_utils</span><span class=\"o\">.</span><span class=\"n\">get_tag_dict</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">,</span> <span class=\"n\">target_tag_texts</span><span class=\"p\">))</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Predict:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Tags:&quot;</span><span class=\"p\">,</span> <span class=\"n\">pred_tag_texts</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    (Slots)&quot;</span><span class=\"p\">,</span> <span class=\"n\">cls_utils</span><span class=\"o\">.</span><span class=\"n\">get_tag_dict</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">,</span> <span class=\"n\">pred_tag_texts</span><span class=\"p\">))</span>\n        <span class=\"nb\">print</span><span class=\"p\">()</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/token_classification/bert_for_tok_cls.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.token_classification.bert_for_tok_cls &mdash; CLaF 0.1.6 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.1.6\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.token_classification.bert_for_tok_cls</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.token_classification.bert_for_tok_cls</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">BertModel</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.base</span> <span class=\"k\">import</span> <span class=\"n\">ModelWithoutTokenEmbedder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model.token_classification.mixin</span> <span class=\"k\">import</span> <span class=\"n\">TokenClassification</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model</span> <span class=\"k\">import</span> <span class=\"n\">cls_utils</span>\n\n\n<div class=\"viewcode-block\" id=\"BertForTokCls\"><a class=\"viewcode-back\" href=\"../../../../claf.model.token_classification.html#claf.model.token_classification.bert_for_tok_cls.BertForTokCls\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;model:bert_for_tok_cls&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">BertForTokCls</span><span class=\"p\">(</span><span class=\"n\">TokenClassification</span><span class=\"p\">,</span> <span class=\"n\">ModelWithoutTokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Implementation of Single Sentence Tagging model presented in</span>\n<span class=\"sd\">    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1810.04805)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_embedder: used to embed the sequence</span>\n<span class=\"sd\">        num_tags: number of classified tags</span>\n<span class=\"sd\">        ignore_tag_idx: index of the tag to ignore when calculating loss (tag pad value)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        pretrained_model_name: the name of a pre-trained model</span>\n<span class=\"sd\">        dropout: classification layer dropout</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">num_tags</span><span class=\"p\">,</span> <span class=\"n\">ignore_tag_idx</span><span class=\"p\">,</span> <span class=\"n\">pretrained_model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span>\n    <span class=\"p\">):</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BertForTokCls</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>  <span class=\"c1\"># for optimizer&#39;s model parameters</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ignore_tag_idx</span> <span class=\"o\">=</span> <span class=\"n\">ignore_tag_idx</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tags</span> <span class=\"o\">=</span> <span class=\"n\">num_tags</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span> <span class=\"o\">=</span> <span class=\"n\">BertModel</span><span class=\"o\">.</span><span class=\"n\">from_pretrained</span><span class=\"p\">(</span>\n            <span class=\"n\">pretrained_model_name</span><span class=\"p\">,</span> <span class=\"n\">cache_dir</span><span class=\"o\">=</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">ROOT</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sequential</span><span class=\"p\">(</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">dropout</span><span class=\"p\">),</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"n\">num_tags</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span><span class=\"o\">.</span><span class=\"n\">apply</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"o\">.</span><span class=\"n\">init_weights</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">CrossEntropyLoss</span><span class=\"p\">(</span><span class=\"n\">ignore_index</span><span class=\"o\">=</span><span class=\"n\">ignore_tag_idx</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"BertForTokCls.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.model.token_classification.html#claf.model.token_classification.bert_for_tok_cls.BertForTokCls.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">labels</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            features: feature dictionary like below.</span>\n<span class=\"sd\">            {</span>\n<span class=\"sd\">                &quot;bert_input&quot;: {</span>\n<span class=\"sd\">                    &quot;feature&quot;: [</span>\n<span class=\"sd\">                        [100, 576, 21, 45, 7, 91, 101, 0, 0, ...],</span>\n<span class=\"sd\">                        ...,</span>\n<span class=\"sd\">                    ]</span>\n<span class=\"sd\">                }</span>\n<span class=\"sd\">                &quot;token_type&quot;: {</span>\n<span class=\"sd\">                    &quot;feature&quot;: [</span>\n<span class=\"sd\">                        [0, 0, 0, 0, 0, 0, 0, 0, 0, ...],</span>\n<span class=\"sd\">                        ...,</span>\n<span class=\"sd\">                    ]</span>\n<span class=\"sd\">                },</span>\n<span class=\"sd\">                &quot;tagged_sub_token_idxs&quot;: {</span>\n<span class=\"sd\">                    [</span>\n<span class=\"sd\">                        [1, 3, 4, 0, 0, 0, 0, 0, 0, ...],</span>\n<span class=\"sd\">                        ...,</span>\n<span class=\"sd\">                    ]</span>\n<span class=\"sd\">                }</span>\n<span class=\"sd\">            }</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            label: label dictionary like below.</span>\n<span class=\"sd\">            {</span>\n<span class=\"sd\">                &quot;class_idx&quot;: [2, 1, 0, 4, 5, ...]</span>\n<span class=\"sd\">                &quot;data_idx&quot;: [2, 4, 5, 7, 2, 1, ...]</span>\n<span class=\"sd\">            }</span>\n<span class=\"sd\">            Do not calculate loss when there is no label. (inference/predict mode)</span>\n\n<span class=\"sd\">        * Returns: output_dict (dict) consisting of</span>\n<span class=\"sd\">            - sequence_embed: embedding vector of the sequence</span>\n<span class=\"sd\">            - tag_logits: representing unnormalized log probabilities of the tags.</span>\n\n<span class=\"sd\">            - tag_idxs: target class idx</span>\n<span class=\"sd\">            - data_idx: data idx</span>\n<span class=\"sd\">            - loss: a scalar loss to be optimized</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">bert_inputs</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;bert_input&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">token_type_ids</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_type&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">tagged_sub_token_idxs</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;tagged_sub_token_idxs&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">num_tokens</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"s2\">&quot;num_tokens&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;feature&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">attention_mask</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">bert_inputs</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n        <span class=\"n\">outputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_model</span><span class=\"p\">(</span>\n            <span class=\"n\">bert_inputs</span><span class=\"p\">,</span> <span class=\"n\">token_type_ids</span><span class=\"o\">=</span><span class=\"n\">token_type_ids</span><span class=\"p\">,</span> <span class=\"n\">attention_mask</span><span class=\"o\">=</span><span class=\"n\">attention_mask</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">token_encodings</span> <span class=\"o\">=</span> <span class=\"n\">outputs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">pooled_output</span> <span class=\"o\">=</span> <span class=\"n\">outputs</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n\n        <span class=\"n\">tag_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">classifier</span><span class=\"p\">(</span><span class=\"n\">token_encodings</span><span class=\"p\">)</span>  <span class=\"c1\"># [B, L, num_tags]</span>\n\n        <span class=\"c1\"># gather the logits of the tagged token positions.</span>\n        <span class=\"n\">gather_token_pos_idxs</span> <span class=\"o\">=</span> <span class=\"n\">tagged_sub_token_idxs</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">repeat</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tags</span><span class=\"p\">)</span>\n        <span class=\"n\">token_tag_logits</span> <span class=\"o\">=</span> <span class=\"n\">tag_logits</span><span class=\"o\">.</span><span class=\"n\">gather</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">gather_token_pos_idxs</span><span class=\"p\">)</span>  <span class=\"c1\"># [B, num_tokens, num_tags]</span>\n\n        <span class=\"n\">sliced_token_tag_logits</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">token_tag_logits</span><span class=\"p\">[</span><span class=\"n\">idx</span><span class=\"p\">,</span> <span class=\"p\">:</span><span class=\"n\">n</span><span class=\"p\">,</span> <span class=\"p\">:]</span> <span class=\"k\">for</span> <span class=\"n\">idx</span><span class=\"p\">,</span> <span class=\"n\">n</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">num_tokens</span><span class=\"p\">)]</span>\n\n        <span class=\"n\">output_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;sequence_embed&quot;</span><span class=\"p\">:</span> <span class=\"n\">pooled_output</span><span class=\"p\">,</span> <span class=\"s2\">&quot;tag_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">sliced_token_tag_logits</span><span class=\"p\">}</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">labels</span><span class=\"p\">:</span>\n            <span class=\"n\">tag_idxs</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">labels</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">tag_idxs</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data_idx</span>\n\n            <span class=\"c1\"># Loss</span>\n            <span class=\"n\">loss</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">criterion</span><span class=\"p\">(</span><span class=\"n\">token_tag_logits</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_tags</span><span class=\"p\">),</span> <span class=\"n\">tag_idxs</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n            <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;loss&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">loss</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>  <span class=\"c1\"># NOTE: DataParallel concat Error</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_dict</span></div>\n\n<div class=\"viewcode-block\" id=\"BertForTokCls.print_examples\"><a class=\"viewcode-back\" href=\"../../../../claf.model.token_classification.html#claf.model.token_classification.bert_for_tok_cls.BertForTokCls.print_examples\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">print_examples</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Print evaluation examples</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            index: data index</span>\n<span class=\"sd\">            inputs: mini-batch inputs</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (sequence id)</span>\n<span class=\"sd\">                - value: dictionary consisting of</span>\n<span class=\"sd\">                    - class_idx</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            print(Sequence, Sequence Tokens, Target Tags, Target Slots, Predicted Tags, Predicted Slots)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">][</span><span class=\"n\">index</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">helper</span>\n        <span class=\"n\">sequence</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">target_tag_texts</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">pred_tag_idxs</span> <span class=\"o\">=</span> <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_tag_texts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_tag_texts_with_idxs</span><span class=\"p\">(</span><span class=\"n\">pred_tag_idxs</span><span class=\"p\">)</span>\n\n        <span class=\"n\">sequence_tokens</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence_sub_tokens&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"nb\">print</span><span class=\"p\">()</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence Tokens:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence_tokens</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Target:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Tags:&quot;</span><span class=\"p\">,</span> <span class=\"n\">target_tag_texts</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    (Slots)&quot;</span><span class=\"p\">,</span> <span class=\"n\">cls_utils</span><span class=\"o\">.</span><span class=\"n\">get_tag_dict</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">,</span> <span class=\"n\">target_tag_texts</span><span class=\"p\">))</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Predict:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Tags:&quot;</span><span class=\"p\">,</span> <span class=\"n\">pred_tag_texts</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    (Slots)&quot;</span><span class=\"p\">,</span> <span class=\"n\">cls_utils</span><span class=\"o\">.</span><span class=\"n\">get_tag_dict</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">,</span> <span class=\"n\">pred_tag_texts</span><span class=\"p\">))</span>\n        <span class=\"nb\">print</span><span class=\"p\">()</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/model/token_classification/mixin.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.token_classification.mixin &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.model.token_classification.mixin</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.model.token_classification.mixin</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">pathlib</span> <span class=\"k\">import</span> <span class=\"n\">Path</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">pycm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pycm.pycm_obj</span> <span class=\"k\">import</span> <span class=\"n\">pycmVectorError</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">arguments_required</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.utils</span> <span class=\"k\">as</span> <span class=\"nn\">common_utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.model</span> <span class=\"k\">import</span> <span class=\"n\">cls_utils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.metric.classification</span> <span class=\"k\">import</span> <span class=\"n\">macro_f1</span><span class=\"p\">,</span> <span class=\"n\">macro_precision</span><span class=\"p\">,</span> <span class=\"n\">macro_recall</span>\n<span class=\"kn\">from</span> <span class=\"nn\">seqeval.metrics</span> <span class=\"k\">import</span> <span class=\"n\">accuracy_score</span> <span class=\"k\">as</span> <span class=\"n\">conlleval_accuracy</span>\n<span class=\"kn\">from</span> <span class=\"nn\">seqeval.metrics</span> <span class=\"k\">import</span> <span class=\"n\">f1_score</span> <span class=\"k\">as</span> <span class=\"n\">conlleval_f1</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"TokenClassification\"><a class=\"viewcode-back\" href=\"../../../../claf.model.token_classification.html#claf.model.token_classification.mixin.TokenClassification\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">TokenClassification</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot; Token Classification Mixin Class &quot;&quot;&quot;</span>\n\n<div class=\"viewcode-block\" id=\"TokenClassification.make_predictions\"><a class=\"viewcode-back\" href=\"../../../../claf.model.token_classification.html#claf.model.token_classification.mixin.TokenClassification.make_predictions\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_predictions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Make predictions with model&#39;s output_dict</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            output_dict: model&#39;s output dictionary consisting of</span>\n<span class=\"sd\">                - sequence_embed: embedding vector of the sequence</span>\n<span class=\"sd\">                - tag_logits: representing unnormalized log probabilities of the tag</span>\n\n<span class=\"sd\">                - tag_idxs: target tag idxs</span>\n<span class=\"sd\">                - data_idx: data idx</span>\n<span class=\"sd\">                - loss: a scalar loss to be optimized</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (sequence id)</span>\n<span class=\"sd\">                - value: dictionary consisting of</span>\n<span class=\"sd\">                    - tag_idxs</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_indices</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_tag_logits</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_logits&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_tag_idxs</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">argmax</span><span class=\"p\">(</span><span class=\"n\">pred_tag_logit</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">tolist</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">pred_tag_logit</span> <span class=\"ow\">in</span> <span class=\"n\">pred_tag_logits</span>\n        <span class=\"p\">]</span>\n\n        <span class=\"n\">predictions</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()):</span> <span class=\"p\">{</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">:</span> <span class=\"n\">pred_tag_idx</span><span class=\"p\">}</span>\n            <span class=\"k\">for</span> <span class=\"n\">data_idx</span><span class=\"p\">,</span> <span class=\"n\">pred_tag_idx</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">data_indices</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">),</span> <span class=\"n\">pred_tag_idxs</span><span class=\"p\">)</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">predictions</span></div>\n\n    <span class=\"nd\">@arguments_required</span><span class=\"p\">([</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">])</span>\n    <span class=\"k\">def</span> <span class=\"nf\">predict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">output_dict</span><span class=\"p\">,</span> <span class=\"n\">arguments</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Inference by raw_feature</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            output_dict: model&#39;s output dictionary consisting of</span>\n<span class=\"sd\">                - sequence_embed: embedding vector of the sequence</span>\n<span class=\"sd\">                - tag_logits: representing unnormalized log probabilities of the tags.</span>\n<span class=\"sd\">            arguments: arguments dictionary consisting of user_input</span>\n<span class=\"sd\">            helper: dictionary to get the classification result, consisting of</span>\n<span class=\"sd\">                - tag_idx2text: dictionary converting tag_idx to tag_text</span>\n\n<span class=\"sd\">        * Returns: output dict (dict) consisting of</span>\n<span class=\"sd\">            - tag_logits: representing unnormalized log probabilities of the tags</span>\n<span class=\"sd\">            - tag_idxs: predicted tag idxs</span>\n<span class=\"sd\">            - tag_texts: predicted tag texts</span>\n<span class=\"sd\">            - tag_slots: predicted tag slots</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">sequence</span> <span class=\"o\">=</span> <span class=\"n\">arguments</span><span class=\"p\">[</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">tag_logits</span> <span class=\"o\">=</span> <span class=\"n\">output_dict</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_logits&quot;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">tag_idxs</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">tag_logit</span><span class=\"o\">.</span><span class=\"n\">argmax</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">tag_logit</span> <span class=\"ow\">in</span> <span class=\"n\">tag_logits</span><span class=\"p\">]</span>\n        <span class=\"n\">tag_texts</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idx2text&quot;</span><span class=\"p\">][</span><span class=\"n\">tag_idx</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()]</span> <span class=\"k\">for</span> <span class=\"n\">tag_idx</span> <span class=\"ow\">in</span> <span class=\"n\">tag_idxs</span><span class=\"p\">]</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;tag_logits&quot;</span><span class=\"p\">:</span> <span class=\"n\">tag_logits</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">:</span> <span class=\"n\">tag_idxs</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">:</span> <span class=\"n\">tag_texts</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;tag_dict&quot;</span><span class=\"p\">:</span> <span class=\"n\">cls_utils</span><span class=\"o\">.</span><span class=\"n\">get_tag_dict</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">,</span> <span class=\"n\">tag_texts</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n<div class=\"viewcode-block\" id=\"TokenClassification.make_metrics\"><a class=\"viewcode-back\" href=\"../../../../claf.model.token_classification.html#claf.model.token_classification.mixin.TokenClassification.make_metrics\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_metrics</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Make metrics with prediction dictionary</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (sequence id)</span>\n<span class=\"sd\">                - value: dictionary consisting of</span>\n<span class=\"sd\">                    - tag_idxs</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            metrics: metric dictionary consisting of</span>\n<span class=\"sd\">                - &#39;accuracy&#39;: sequence level accuracy</span>\n<span class=\"sd\">                - &#39;tag_accuracy&#39;: tag level accuracy</span>\n<span class=\"sd\">                - &#39;macro_f1&#39;: tag prediction macro(unweighted mean) f1</span>\n<span class=\"sd\">                - &#39;macro_precision&#39;: tag prediction macro(unweighted mean) precision</span>\n<span class=\"sd\">                - &#39;macro_recall&#39;: tag prediction macro(unweighted mean) recall</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">pred_tag_idxs_list</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">target_tag_idxs_list</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"n\">accurate_sequence</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">data_idx</span><span class=\"p\">,</span> <span class=\"n\">pred</span> <span class=\"ow\">in</span> <span class=\"n\">predictions</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">target</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_ground_truth</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"p\">)</span>\n\n            <span class=\"n\">pred_tag_idxs_list</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">pred</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">])</span>\n            <span class=\"n\">target_tag_idxs_list</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">target</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">])</span>\n\n            <span class=\"n\">accurate_sequence</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span>\n                <span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">asarray</span><span class=\"p\">(</span><span class=\"n\">target</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">asarray</span><span class=\"p\">(</span><span class=\"n\">pred</span><span class=\"p\">[</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">]))</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span> <span class=\"k\">else</span> <span class=\"mi\">0</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"n\">pred_tags</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">tag_idx2text</span><span class=\"p\">[</span><span class=\"n\">tag_idx</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">tag_idx</span> <span class=\"ow\">in</span> <span class=\"n\">tag_idxs</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">tag_idxs</span> <span class=\"ow\">in</span> <span class=\"n\">pred_tag_idxs_list</span>\n        <span class=\"p\">]</span>\n        <span class=\"n\">target_tags</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">tag_idx2text</span><span class=\"p\">[</span><span class=\"n\">tag_idx</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">tag_idx</span> <span class=\"ow\">in</span> <span class=\"n\">tag_idxs</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">tag_idxs</span> <span class=\"ow\">in</span> <span class=\"n\">target_tag_idxs_list</span>\n        <span class=\"p\">]</span>\n\n        <span class=\"n\">flat_pred_tags</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">common_utils</span><span class=\"o\">.</span><span class=\"n\">flatten</span><span class=\"p\">(</span><span class=\"n\">pred_tags</span><span class=\"p\">))</span>\n        <span class=\"n\">flat_target_tags</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">common_utils</span><span class=\"o\">.</span><span class=\"n\">flatten</span><span class=\"p\">(</span><span class=\"n\">target_tags</span><span class=\"p\">))</span>\n\n        <span class=\"c1\"># confusion matrix</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">pycm_obj</span> <span class=\"o\">=</span> <span class=\"n\">pycm</span><span class=\"o\">.</span><span class=\"n\">ConfusionMatrix</span><span class=\"p\">(</span><span class=\"n\">actual_vector</span><span class=\"o\">=</span><span class=\"n\">flat_target_tags</span><span class=\"p\">,</span> <span class=\"n\">predict_vector</span><span class=\"o\">=</span><span class=\"n\">flat_pred_tags</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">pycmVectorError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;Number of the classes is lower than 2&quot;</span><span class=\"p\">:</span>\n                <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"s2\">&quot;Number of tags in the batch is 1. Sanity check is highly recommended.&quot;</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"p\">{</span>\n                    <span class=\"s2\">&quot;accuracy&quot;</span><span class=\"p\">:</span> <span class=\"mf\">1.</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;tag_accuracy&quot;</span><span class=\"p\">:</span> <span class=\"mf\">1.</span><span class=\"p\">,</span>\n\n                    <span class=\"s2\">&quot;macro_f1&quot;</span><span class=\"p\">:</span> <span class=\"mf\">1.</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;macro_precision&quot;</span><span class=\"p\">:</span> <span class=\"mf\">1.</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;macro_recall&quot;</span><span class=\"p\">:</span> <span class=\"mf\">1.</span><span class=\"p\">,</span>\n\n                    <span class=\"s2\">&quot;conlleval_accuracy&quot;</span><span class=\"p\">:</span> <span class=\"mf\">1.</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;conlleval_f1&quot;</span><span class=\"p\">:</span> <span class=\"mf\">1.</span><span class=\"p\">,</span>\n                <span class=\"p\">}</span>\n            <span class=\"k\">raise</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">write_predictions</span><span class=\"p\">(</span>\n            <span class=\"p\">{</span><span class=\"s2\">&quot;target&quot;</span><span class=\"p\">:</span> <span class=\"n\">flat_target_tags</span><span class=\"p\">,</span> <span class=\"s2\">&quot;predict&quot;</span><span class=\"p\">:</span> <span class=\"n\">flat_pred_tags</span><span class=\"p\">},</span> <span class=\"n\">pycm_obj</span><span class=\"o\">=</span><span class=\"n\">pycm_obj</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">sequence_accuracy</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">accurate_sequence</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">accurate_sequence</span><span class=\"p\">)</span>\n\n        <span class=\"n\">metrics</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;accuracy&quot;</span><span class=\"p\">:</span> <span class=\"n\">sequence_accuracy</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;tag_accuracy&quot;</span><span class=\"p\">:</span> <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">Overall_ACC</span><span class=\"p\">,</span>\n\n            <span class=\"s2\">&quot;macro_f1&quot;</span><span class=\"p\">:</span> <span class=\"n\">macro_f1</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">),</span>\n            <span class=\"s2\">&quot;macro_precision&quot;</span><span class=\"p\">:</span> <span class=\"n\">macro_precision</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">),</span>\n            <span class=\"s2\">&quot;macro_recall&quot;</span><span class=\"p\">:</span> <span class=\"n\">macro_recall</span><span class=\"p\">(</span><span class=\"n\">pycm_obj</span><span class=\"p\">),</span>\n\n            <span class=\"s2\">&quot;conlleval_accuracy&quot;</span><span class=\"p\">:</span> <span class=\"n\">conlleval_accuracy</span><span class=\"p\">(</span><span class=\"n\">target_tags</span><span class=\"p\">,</span> <span class=\"n\">pred_tags</span><span class=\"p\">),</span>\n            <span class=\"s2\">&quot;conlleval_f1&quot;</span><span class=\"p\">:</span> <span class=\"n\">conlleval_f1</span><span class=\"p\">(</span><span class=\"n\">target_tags</span><span class=\"p\">,</span> <span class=\"n\">pred_tags</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">metrics</span></div>\n\n<div class=\"viewcode-block\" id=\"TokenClassification.write_predictions\"><a class=\"viewcode-back\" href=\"../../../../claf.model.token_classification.html#claf.model.token_classification.mixin.TokenClassification.write_predictions\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">write_predictions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">is_dict</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">pycm_obj</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Override write_predictions() in ModelBase to log confusion matrix</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">TokenClassification</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">write_predictions</span><span class=\"p\">(</span>\n            <span class=\"n\">predictions</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"o\">=</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">is_dict</span><span class=\"o\">=</span><span class=\"n\">is_dict</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">data_type</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;train&quot;</span> <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;valid&quot;</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">pycm_obj</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">stats_file_path</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"s2\">&quot;predictions-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-{self._train_counter.get_display()}-stats&quot;</span>\n            <span class=\"n\">pycm_obj</span><span class=\"o\">.</span><span class=\"n\">save_csv</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log_dir</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;predictions&quot;</span> <span class=\"o\">/</span> <span class=\"n\">stats_file_path</span><span class=\"p\">))</span>\n\n            <span class=\"n\">confusion_matrix_file_path</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n                <span class=\"n\">f</span><span class=\"s2\">&quot;predictions-</span><span class=\"si\">{data_type}</span><span class=\"s2\">-{self._train_counter.get_display()}-confusion_matrix&quot;</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">cls_utils</span><span class=\"o\">.</span><span class=\"n\">write_confusion_matrix_to_csv</span><span class=\"p\">(</span>\n                <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log_dir</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;predictions&quot;</span> <span class=\"o\">/</span> <span class=\"n\">confusion_matrix_file_path</span><span class=\"p\">),</span> <span class=\"n\">pycm_obj</span>\n            <span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"TokenClassification.print_examples\"><a class=\"viewcode-back\" href=\"../../../../claf.model.token_classification.html#claf.model.token_classification.mixin.TokenClassification.print_examples\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">print_examples</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">predictions</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Print evaluation examples</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            index: data index</span>\n<span class=\"sd\">            inputs: mini-batch inputs</span>\n<span class=\"sd\">            predictions: prediction dictionary consisting of</span>\n<span class=\"sd\">                - key: &#39;id&#39; (sequence id)</span>\n<span class=\"sd\">                - value: dictionary consisting of</span>\n<span class=\"sd\">                    - class_idx</span>\n\n<span class=\"sd\">        * Returns:</span>\n<span class=\"sd\">            print(Sequence, Target Tags, Target Slots, Predicted Tags, Predicted Slots)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"n\">data_idx</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"s2\">&quot;labels&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;data_idx&quot;</span><span class=\"p\">][</span><span class=\"n\">index</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n        <span class=\"n\">data_id</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_id</span><span class=\"p\">(</span><span class=\"n\">data_idx</span><span class=\"p\">)</span>\n\n        <span class=\"n\">helper</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">helper</span>\n        <span class=\"n\">sequence</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;sequence&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">target_tag_texts</span> <span class=\"o\">=</span> <span class=\"n\">helper</span><span class=\"p\">[</span><span class=\"s2\">&quot;examples&quot;</span><span class=\"p\">][</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;tag_texts&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">pred_tag_idxs</span> <span class=\"o\">=</span> <span class=\"n\">predictions</span><span class=\"p\">[</span><span class=\"n\">data_id</span><span class=\"p\">][</span><span class=\"s2\">&quot;tag_idxs&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">pred_tag_texts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dataset</span><span class=\"o\">.</span><span class=\"n\">get_tag_texts_with_idxs</span><span class=\"p\">(</span><span class=\"n\">pred_tag_idxs</span><span class=\"p\">)</span>\n\n        <span class=\"nb\">print</span><span class=\"p\">()</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Sequence:&quot;</span><span class=\"p\">,</span> <span class=\"n\">sequence</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Target:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Tags:&quot;</span><span class=\"p\">,</span> <span class=\"n\">target_tag_texts</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    (Slots)&quot;</span><span class=\"p\">,</span> <span class=\"n\">cls_utils</span><span class=\"o\">.</span><span class=\"n\">get_tag_dict</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">,</span> <span class=\"n\">target_tag_texts</span><span class=\"p\">))</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;- Predict:&quot;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    Tags:&quot;</span><span class=\"p\">,</span> <span class=\"n\">pred_tag_texts</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;    (Slots)&quot;</span><span class=\"p\">,</span> <span class=\"n\">cls_utils</span><span class=\"o\">.</span><span class=\"n\">get_tag_dict</span><span class=\"p\">(</span><span class=\"n\">sequence</span><span class=\"p\">,</span> <span class=\"n\">pred_tag_texts</span><span class=\"p\">))</span>\n        <span class=\"nb\">print</span><span class=\"p\">()</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/activation.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.activation &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.activation</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.activation</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n\n<div class=\"viewcode-block\" id=\"get_activation_fn\"><a class=\"viewcode-back\" href=\"../../../claf.modules.html#claf.modules.activation.get_activation_fn\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_activation_fn</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot; PyTorch built-in activation functions &quot;&quot;&quot;</span>\n\n    <span class=\"n\">activation_functions</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;linear&quot;</span><span class=\"p\">:</span> <span class=\"k\">lambda</span><span class=\"p\">:</span> <span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;relu&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ReLU</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;relu6&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ReLU6</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;elu&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ELU</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;prelu&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">PReLU</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;leaky_relu&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LeakyReLU</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;threshold&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Threshold</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;hardtanh&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Hardtanh</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;sigmoid&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Sigmoid</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;tanh&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Tanh</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;log_sigmoid&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LogSigmoid</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;softplus&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Softplus</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;softshrink&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Softshrink</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;softsign&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Softsign</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;tanhshrink&quot;</span><span class=\"p\">:</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Tanhshrink</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">name</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">activation_functions</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n            <span class=\"n\">f</span><span class=\"s2\">&quot;&#39;</span><span class=\"si\">{name}</span><span class=\"s2\">&#39; is not included in activation_functions. use below one. </span><span class=\"se\">\\n</span><span class=\"s2\"> {activation_functions.keys()}&quot;</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">activation_functions</span><span class=\"p\">[</span><span class=\"n\">name</span><span class=\"p\">]</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/attention/bi_attention.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.attention.bi_attention &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.attention.bi_attention</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.attention.bi_attention</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n\n\n<div class=\"viewcode-block\" id=\"BiAttention\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.bi_attention.BiAttention\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">BiAttention</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Attention Flow Layer</span>\n<span class=\"sd\">        in BiDAF (https://arxiv.org/pdf/1611.01603.pdf)</span>\n\n<span class=\"sd\">    The Similarity matrix</span>\n<span class=\"sd\">    Context-to-query Attention (C2Q)</span>\n<span class=\"sd\">    Query-to-context Attention (Q2C)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        model_dim: The number of module dimension</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BiAttention</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_dim</span> <span class=\"o\">=</span> <span class=\"n\">model_dim</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">W</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"mi\">6</span> <span class=\"o\">*</span> <span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"BiAttention.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.bi_attention.BiAttention.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">query</span><span class=\"p\">,</span> <span class=\"n\">query_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">c_mask</span><span class=\"p\">,</span> <span class=\"n\">q</span><span class=\"p\">,</span> <span class=\"n\">q_mask</span> <span class=\"o\">=</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"p\">,</span> <span class=\"n\">query</span><span class=\"p\">,</span> <span class=\"n\">query_mask</span>\n\n        <span class=\"n\">S</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_similiarity_matrix</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">q</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, Q_L)</span>\n        <span class=\"n\">masked_S</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">S</span><span class=\"p\">,</span> <span class=\"n\">query_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n\n        <span class=\"n\">c2q</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_context2query</span><span class=\"p\">(</span><span class=\"n\">S</span><span class=\"p\">,</span> <span class=\"n\">q</span><span class=\"p\">,</span> <span class=\"n\">q_mask</span><span class=\"p\">)</span>\n        <span class=\"n\">q2c</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_query2context</span><span class=\"p\">(</span><span class=\"n\">masked_S</span><span class=\"o\">.</span><span class=\"n\">max</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">c_mask</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># [h; u˜; h◦u˜; h◦h˜] ~ (B, C_L, 8d)</span>\n        <span class=\"n\">G</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">((</span><span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">c2q</span><span class=\"p\">,</span> <span class=\"n\">c</span> <span class=\"o\">*</span> <span class=\"n\">c2q</span><span class=\"p\">,</span> <span class=\"n\">c</span> <span class=\"o\">*</span> <span class=\"n\">q2c</span><span class=\"p\">),</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">G</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_make_similiarity_matrix</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">q</span><span class=\"p\">):</span>\n        <span class=\"c1\"># B: batch_size, C_L: context_maxlen, Q_L: query_maxlen</span>\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">Q_L</span> <span class=\"o\">=</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">matrix_shape</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">Q_L</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n\n        <span class=\"n\">c_aug</span> <span class=\"o\">=</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">matrix_shape</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, Q_L, 2d)</span>\n        <span class=\"n\">q_aug</span> <span class=\"o\">=</span> <span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">matrix_shape</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, Q_L, 2d)</span>\n\n        <span class=\"n\">c_q</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">mul</span><span class=\"p\">(</span><span class=\"n\">c_aug</span><span class=\"p\">,</span> <span class=\"n\">q_aug</span><span class=\"p\">)</span>  <span class=\"c1\"># element-wise multiplication</span>\n\n        <span class=\"n\">concated_vector</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">((</span><span class=\"n\">c_aug</span><span class=\"p\">,</span> <span class=\"n\">q_aug</span><span class=\"p\">,</span> <span class=\"n\">c_q</span><span class=\"p\">),</span> <span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>  <span class=\"c1\"># [h; u; h◦u]</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">W</span><span class=\"p\">(</span><span class=\"n\">concated_vector</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">Q_L</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_context2query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">S</span><span class=\"p\">,</span> <span class=\"n\">q</span><span class=\"p\">,</span> <span class=\"n\">q_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">attention</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">last_dim_masked_softmax</span><span class=\"p\">(</span><span class=\"n\">S</span><span class=\"p\">,</span> <span class=\"n\">q_mask</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, Q_L)</span>\n        <span class=\"n\">c2q</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">attention</span><span class=\"o\">=</span><span class=\"n\">attention</span><span class=\"p\">,</span> <span class=\"n\">matrix</span><span class=\"o\">=</span><span class=\"n\">q</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, 2d)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">c2q</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_query2context</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">S</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">c_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">attention</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">masked_softmax</span><span class=\"p\">(</span><span class=\"n\">S</span><span class=\"p\">,</span> <span class=\"n\">c_mask</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L)</span>\n        <span class=\"n\">q2c</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">attention</span><span class=\"o\">=</span><span class=\"n\">attention</span><span class=\"p\">,</span> <span class=\"n\">matrix</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">q2c</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>  <span class=\"c1\"># (B, C_L, 2d)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/attention/co_attention.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.attention.co_attention &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.attention.co_attention</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.attention.co_attention</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n\n\n<div class=\"viewcode-block\" id=\"CoAttention\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.co_attention.CoAttention\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CoAttention</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    CoAttention encoder</span>\n<span class=\"sd\">        in Dynamic Coattention Networks For Question Answering (https://arxiv.org/abs/1611.01604)</span>\n\n<span class=\"sd\">    check the Figure 2 in paper</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        embed_dim: the number of input embedding dimension</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CoAttention</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">W_0</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">embed_dim</span> <span class=\"o\">*</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"CoAttention.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.co_attention.CoAttention.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">question_embed</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">C</span><span class=\"p\">,</span> <span class=\"n\">Q</span> <span class=\"o\">=</span> <span class=\"n\">context_embed</span><span class=\"p\">,</span> <span class=\"n\">question_embed</span>\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">Q_L</span><span class=\"p\">,</span> <span class=\"n\">D</span> <span class=\"o\">=</span> <span class=\"n\">C</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">C</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">Q</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">Q</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n\n        <span class=\"n\">similarity_matrix_shape</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"n\">Q_L</span><span class=\"p\">,</span> <span class=\"n\">D</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, Q_L, D)</span>\n\n        <span class=\"n\">C_</span> <span class=\"o\">=</span> <span class=\"n\">C</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand_as</span><span class=\"p\">(</span><span class=\"n\">similarity_matrix_shape</span><span class=\"p\">)</span>\n        <span class=\"n\">Q_</span> <span class=\"o\">=</span> <span class=\"n\">Q</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand_as</span><span class=\"p\">(</span><span class=\"n\">similarity_matrix_shape</span><span class=\"p\">)</span>\n        <span class=\"n\">C_Q</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">mul</span><span class=\"p\">(</span><span class=\"n\">C_</span><span class=\"p\">,</span> <span class=\"n\">Q_</span><span class=\"p\">)</span>\n\n        <span class=\"n\">S</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">W_0</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">C_</span><span class=\"p\">,</span> <span class=\"n\">Q_</span><span class=\"p\">,</span> <span class=\"n\">C_Q</span><span class=\"p\">],</span> <span class=\"mi\">3</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, Q_L)</span>\n\n        <span class=\"n\">S_question</span> <span class=\"o\">=</span> <span class=\"n\">S</span>\n        <span class=\"k\">if</span> <span class=\"n\">question_mask</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">S_question</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">S_question</span><span class=\"p\">,</span> <span class=\"n\">question_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n        <span class=\"n\">S_q</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">S_question</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, Q_L)</span>\n\n        <span class=\"n\">S_context</span> <span class=\"o\">=</span> <span class=\"n\">S</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">context_mask</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">S_context</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">S_context</span><span class=\"p\">,</span> <span class=\"n\">context_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n        <span class=\"n\">S_c</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">S_context</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, Q_L, C_L)</span>\n\n        <span class=\"n\">A</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span><span class=\"n\">S_q</span><span class=\"p\">,</span> <span class=\"n\">Q</span><span class=\"p\">)</span>  <span class=\"c1\"># context2query (B, C_L, D)</span>\n        <span class=\"n\">B</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span><span class=\"n\">S_q</span><span class=\"p\">,</span> <span class=\"n\">S_c</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span><span class=\"n\">C</span><span class=\"p\">)</span>  <span class=\"c1\"># query2context (B, Q_L, D)</span>\n        <span class=\"n\">out</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">C</span><span class=\"p\">,</span> <span class=\"n\">A</span><span class=\"p\">,</span> <span class=\"n\">C</span> <span class=\"o\">*</span> <span class=\"n\">A</span><span class=\"p\">,</span> <span class=\"n\">C</span> <span class=\"o\">*</span> <span class=\"n\">B</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">out</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/attention/docqa_attention.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.attention.docqa_attention &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.attention.docqa_attention</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.attention.docqa_attention</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules</span> <span class=\"k\">import</span> <span class=\"n\">initializer</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n\n\n<div class=\"viewcode-block\" id=\"DocQAAttention\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.docqa_attention.DocQAAttention\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DocQAAttention</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Bi-Attention Layer + (Self-Attention)</span>\n<span class=\"sd\">            in DocumentQA (https://arxiv.org/abs/1710.10723)</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            rnn_dim: the number of GRU cell hidden size</span>\n<span class=\"sd\">            linear_dim: the number of linear hidden size</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            self_attn: (bool) self-attention</span>\n<span class=\"sd\">            weight_init: (bool) weight initialization</span>\n\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">rnn_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_dim</span><span class=\"p\">,</span> <span class=\"n\">self_attn</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">weight_init</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">DocQAAttention</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attn</span> <span class=\"o\">=</span> <span class=\"n\">self_attn</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_w</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">rnn_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">key_w</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">rnn_dim</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dot_w</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">randn</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">rnn_dim</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">))</span>\n        <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"o\">.</span><span class=\"n\">xavier_uniform_</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dot_w</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bias</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">([[</span><span class=\"mi\">1</span><span class=\"p\">]]))</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">diag_mask</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">eye</span><span class=\"p\">(</span><span class=\"mi\">5000</span><span class=\"p\">))</span>  <span class=\"c1\"># NOTE: (hard-code) max_sequence_length</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">weight_init</span><span class=\"p\">:</span>\n            <span class=\"n\">initializer</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_w</span><span class=\"p\">)</span>\n            <span class=\"n\">initializer</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">key_w</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"DocQAAttention.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.docqa_attention.DocQAAttention.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">x_mask</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">key_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">S</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_trilinear</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attn</span><span class=\"p\">:</span>\n            <span class=\"n\">seq_length</span> <span class=\"o\">=</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">diag_mask</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">diag_mask</span><span class=\"o\">.</span><span class=\"n\">narrow</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">seq_length</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">narrow</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">seq_length</span><span class=\"p\">)</span>\n            <span class=\"n\">joint_mask</span> <span class=\"o\">=</span> <span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_compute_attention_mask</span><span class=\"p\">(</span><span class=\"n\">x_mask</span><span class=\"p\">,</span> <span class=\"n\">key_mask</span><span class=\"p\">)</span>\n            <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">clamp</span><span class=\"p\">(</span><span class=\"n\">diag_mask</span> <span class=\"o\">+</span> <span class=\"n\">joint_mask</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">masked_S</span> <span class=\"o\">=</span> <span class=\"n\">S</span> <span class=\"o\">+</span> <span class=\"n\">mask</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n            <span class=\"n\">x2key</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_x2key</span><span class=\"p\">(</span><span class=\"n\">masked_S</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">key_mask</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">((</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">x2key</span><span class=\"p\">,</span> <span class=\"n\">x</span> <span class=\"o\">*</span> <span class=\"n\">x2key</span><span class=\"p\">),</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">joint_mask</span> <span class=\"o\">=</span> <span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_compute_attention_mask</span><span class=\"p\">(</span><span class=\"n\">x_mask</span><span class=\"p\">,</span> <span class=\"n\">key_mask</span><span class=\"p\">)</span>\n            <span class=\"n\">masked_S</span> <span class=\"o\">=</span> <span class=\"n\">S</span> <span class=\"o\">+</span> <span class=\"n\">joint_mask</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n            <span class=\"n\">x2key</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_x2key</span><span class=\"p\">(</span><span class=\"n\">masked_S</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">key_mask</span><span class=\"p\">)</span>\n\n            <span class=\"n\">masked_S</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">S</span><span class=\"p\">,</span> <span class=\"n\">key_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n            <span class=\"n\">key2x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_key2x</span><span class=\"p\">(</span><span class=\"n\">masked_S</span><span class=\"o\">.</span><span class=\"n\">max</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">x_mask</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">((</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">x2key</span><span class=\"p\">,</span> <span class=\"n\">x</span> <span class=\"o\">*</span> <span class=\"n\">x2key</span><span class=\"p\">,</span> <span class=\"n\">x</span> <span class=\"o\">*</span> <span class=\"n\">key2x</span><span class=\"p\">),</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_compute_attention_mask</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x_mask</span><span class=\"p\">,</span> <span class=\"n\">key_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">x_mask</span> <span class=\"o\">=</span> <span class=\"n\">x_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"n\">key_mask</span> <span class=\"o\">=</span> <span class=\"n\">key_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">joint_mask</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">mul</span><span class=\"p\">(</span><span class=\"n\">x_mask</span><span class=\"p\">,</span> <span class=\"n\">key_mask</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">joint_mask</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_trilinear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">X_L</span><span class=\"p\">,</span> <span class=\"n\">K_L</span> <span class=\"o\">=</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">key</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">matrix_shape</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">X_L</span><span class=\"p\">,</span> <span class=\"n\">K_L</span><span class=\"p\">)</span>\n        <span class=\"n\">x_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_w</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">matrix_shape</span><span class=\"p\">)</span>\n        <span class=\"n\">key_logits</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">key_w</span><span class=\"p\">(</span><span class=\"n\">key</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">matrix_shape</span><span class=\"p\">)</span>\n\n        <span class=\"n\">x_dots</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">mul</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dot_w</span><span class=\"p\">)</span>\n        <span class=\"n\">x_key</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">matmul</span><span class=\"p\">(</span><span class=\"n\">x_dots</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">))</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">x_logits</span> <span class=\"o\">+</span> <span class=\"n\">key_logits</span> <span class=\"o\">+</span> <span class=\"n\">x_key</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_x2key</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">S</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">key_mask</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">self_attn</span><span class=\"p\">:</span>\n            <span class=\"n\">bias</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">exp</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"p\">)</span>\n            <span class=\"n\">S</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">exp</span><span class=\"p\">(</span><span class=\"n\">S</span><span class=\"p\">)</span>\n            <span class=\"n\">attention</span> <span class=\"o\">=</span> <span class=\"n\">S</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"n\">S</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">keepdim</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">S</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span> <span class=\"o\">+</span> <span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">S</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">attention</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">S</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, Q_L)</span>\n\n        <span class=\"n\">x2key</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">attention</span><span class=\"o\">=</span><span class=\"n\">attention</span><span class=\"p\">,</span> <span class=\"n\">matrix</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L, 2d)</span>\n        <span class=\"k\">return</span> <span class=\"n\">x2key</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_key2x</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">S</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">x_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">attention</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">masked_softmax</span><span class=\"p\">(</span><span class=\"n\">S</span><span class=\"p\">,</span> <span class=\"n\">x_mask</span><span class=\"p\">)</span>  <span class=\"c1\"># (B, C_L)</span>\n        <span class=\"n\">key2x</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">attention</span><span class=\"o\">=</span><span class=\"n\">attention</span><span class=\"p\">,</span> <span class=\"n\">matrix</span><span class=\"o\">=</span><span class=\"n\">x</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">key2x</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>  <span class=\"c1\"># (B, C_L, 2d)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/attention/multi_head_attention.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.attention.multi_head_attention &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.attention.multi_head_attention</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.attention.multi_head_attention</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">math</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n\n\n<div class=\"viewcode-block\" id=\"MultiHeadAttention\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.multi_head_attention.MultiHeadAttention\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">MultiHeadAttention</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Transformer&#39;s Multi-Head Attention</span>\n<span class=\"sd\">        in &quot;Attention is All You Need&quot; (https://arxiv.org/abs/1706.03762)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        num_head: the number of Head</span>\n<span class=\"sd\">        model_dim: the number of model dimension</span>\n<span class=\"sd\">        linear_key_dim: the number of linear key dimemsion</span>\n<span class=\"sd\">        linear_value_dim: the number of linear value dimension</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">num_head</span><span class=\"o\">=</span><span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.1</span><span class=\"p\">,</span> <span class=\"n\">linear_key_dim</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">linear_value_dim</span><span class=\"o\">=</span><span class=\"kc\">None</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">MultiHeadAttention</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">linear_key_dim</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">linear_key_dim</span> <span class=\"o\">=</span> <span class=\"n\">model_dim</span>\n        <span class=\"k\">if</span> <span class=\"n\">linear_value_dim</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">linear_value_dim</span> <span class=\"o\">=</span> <span class=\"n\">model_dim</span>\n\n        <span class=\"k\">assert</span> <span class=\"n\">linear_key_dim</span> <span class=\"o\">%</span> <span class=\"n\">num_head</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n        <span class=\"k\">assert</span> <span class=\"n\">linear_value_dim</span> <span class=\"o\">%</span> <span class=\"n\">num_head</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model_dim</span> <span class=\"o\">=</span> <span class=\"n\">model_dim</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_head</span> <span class=\"o\">=</span> <span class=\"n\">num_head</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">projection</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ModuleList</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span>\n                <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_key_dim</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">),</span>  <span class=\"c1\"># query</span>\n                <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_key_dim</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">),</span>  <span class=\"c1\"># key</span>\n                <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">model_dim</span><span class=\"p\">,</span> <span class=\"n\">linear_value_dim</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">),</span>  <span class=\"c1\"># value</span>\n            <span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">out_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">linear_value_dim</span><span class=\"p\">,</span> <span class=\"n\">model_dim</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">dropout</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span>\n\n<div class=\"viewcode-block\" id=\"MultiHeadAttention.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.multi_head_attention.MultiHeadAttention.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">q</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">q</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_linear_projection</span><span class=\"p\">(</span><span class=\"n\">q</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"p\">)</span>\n        <span class=\"n\">qs</span><span class=\"p\">,</span> <span class=\"n\">ks</span><span class=\"p\">,</span> <span class=\"n\">vs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_split_heads</span><span class=\"p\">(</span><span class=\"n\">q</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"p\">)</span>\n        <span class=\"n\">outputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_scaled_dot_product</span><span class=\"p\">(</span><span class=\"n\">qs</span><span class=\"p\">,</span> <span class=\"n\">ks</span><span class=\"p\">,</span> <span class=\"n\">vs</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"o\">=</span><span class=\"n\">mask</span><span class=\"p\">)</span>\n        <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_concat_heads</span><span class=\"p\">(</span><span class=\"n\">outputs</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">out_linear</span><span class=\"p\">(</span><span class=\"n\">output</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_linear_projection</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">query</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">projection</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">](</span><span class=\"n\">query</span><span class=\"p\">)</span>\n        <span class=\"n\">k</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">projection</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">](</span><span class=\"n\">key</span><span class=\"p\">)</span>\n        <span class=\"n\">v</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">projection</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">](</span><span class=\"n\">value</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">q</span><span class=\"p\">,</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_split_heads</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">query</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"n\">B</span> <span class=\"o\">=</span> <span class=\"n\">query</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n        <span class=\"n\">qs</span><span class=\"p\">,</span> <span class=\"n\">ks</span><span class=\"p\">,</span> <span class=\"n\">vs</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_head</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">//</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_head</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"n\">query</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">]</span>\n        <span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">qs</span><span class=\"p\">,</span> <span class=\"n\">ks</span><span class=\"p\">,</span> <span class=\"n\">vs</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_scaled_dot_product</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">query</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">K_D</span> <span class=\"o\">=</span> <span class=\"n\">query</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">scores</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">matmul</span><span class=\"p\">(</span><span class=\"n\">query</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">))</span> <span class=\"o\">/</span> <span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"n\">K_D</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">mask</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>  <span class=\"c1\"># [B, #H, C_L, D]</span>\n            <span class=\"n\">scores</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">)</span>\n\n        <span class=\"n\">attn</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">attn</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">attn</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">matmul</span><span class=\"p\">(</span><span class=\"n\">attn</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_concat_heads</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">outputs</span><span class=\"p\">):</span>\n        <span class=\"n\">B</span> <span class=\"o\">=</span> <span class=\"n\">outputs</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n        <span class=\"n\">num_head</span><span class=\"p\">,</span> <span class=\"n\">dim</span> <span class=\"o\">=</span> <span class=\"n\">outputs</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">:]</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">outputs</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">contiguous</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_head</span> <span class=\"o\">*</span> <span class=\"n\">dim</span><span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/attention/seq_attention.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.attention.seq_attention &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.attention.seq_attention</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.attention.seq_attention</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"ch\">#!/usr/bin/env python3</span>\n<span class=\"c1\"># Copyright 2017-present, Facebook, Inc.</span>\n<span class=\"c1\"># All rights reserved.</span>\n<span class=\"c1\">#</span>\n<span class=\"c1\"># This source code is licensed under the license found in the</span>\n<span class=\"c1\"># LICENSE file in the root directory of this source tree.</span>\n\n<span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">original code from: https://github.com/facebookresearch/DrQA/blob/master/drqa/reader/layers.py</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n\n<div class=\"viewcode-block\" id=\"SeqAttnMatch\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.seq_attention.SeqAttnMatch\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SeqAttnMatch</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Given sequences X and Y, match sequence Y to each element in X.</span>\n<span class=\"sd\">    * o_i = sum(alpha_j * y_j) for i in X</span>\n<span class=\"sd\">    * alpha_j = softmax(y_j * x_i)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">identity</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SeqAttnMatch</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">identity</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n<div class=\"viewcode-block\" id=\"SeqAttnMatch.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.seq_attention.SeqAttnMatch.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">y_mask</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear</span><span class=\"p\">:</span>\n            <span class=\"n\">x_proj</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)))</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n            <span class=\"n\">x_proj</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">relu</span><span class=\"p\">(</span><span class=\"n\">x_proj</span><span class=\"p\">)</span>\n            <span class=\"n\">y_proj</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)))</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n            <span class=\"n\">y_proj</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">relu</span><span class=\"p\">(</span><span class=\"n\">y_proj</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">x_proj</span> <span class=\"o\">=</span> <span class=\"n\">x</span>\n            <span class=\"n\">y_proj</span> <span class=\"o\">=</span> <span class=\"n\">y</span>\n\n        <span class=\"n\">scores</span> <span class=\"o\">=</span> <span class=\"n\">x_proj</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span><span class=\"n\">y_proj</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n\n        <span class=\"n\">y_mask</span> <span class=\"o\">=</span> <span class=\"n\">y_mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">expand</span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n        <span class=\"n\">scores</span> <span class=\"o\">=</span> <span class=\"n\">scores</span><span class=\"o\">.</span><span class=\"n\">masked_fill</span><span class=\"p\">((</span><span class=\"n\">y_mask</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"o\">-</span><span class=\"mf\">1e30</span><span class=\"p\">)</span>\n\n        <span class=\"n\">alpha_flat</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)),</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">alpha</span> <span class=\"o\">=</span> <span class=\"n\">alpha_flat</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"n\">y</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n\n        <span class=\"n\">matched_seq</span> <span class=\"o\">=</span> <span class=\"n\">alpha</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">matched_seq</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"LinearSeqAttn\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.seq_attention.LinearSeqAttn\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">LinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Self attention over a sequence:</span>\n<span class=\"sd\">    * o_i = softmax(Wx_i) for x_i in X.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">input_size</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">LinearSeqAttn</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">input_size</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"LinearSeqAttn.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.seq_attention.LinearSeqAttn.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">x_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">x_flat</span> <span class=\"o\">=</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">contiguous</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n        <span class=\"n\">scores</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear</span><span class=\"p\">(</span><span class=\"n\">x_flat</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n        <span class=\"n\">scores</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">masked_fill_</span><span class=\"p\">((</span><span class=\"n\">x_mask</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"o\">-</span><span class=\"mf\">1e30</span><span class=\"p\">)</span>\n        <span class=\"n\">alpha</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">alpha</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"BilinearSeqAttn\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.seq_attention.BilinearSeqAttn\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">BilinearSeqAttn</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A bilinear attention layer over a sequence X w.r.t y:</span>\n<span class=\"sd\">    * o_i = softmax(x_i&#39;Wy) for x_i in X.</span>\n<span class=\"sd\">    Optionally don&#39;t normalize output weights.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x_size</span><span class=\"p\">,</span> <span class=\"n\">y_size</span><span class=\"p\">,</span> <span class=\"n\">identity</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">normalize</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BilinearSeqAttn</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">normalize</span> <span class=\"o\">=</span> <span class=\"n\">normalize</span>\n\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">identity</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">y_size</span><span class=\"p\">,</span> <span class=\"n\">x_size</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n<div class=\"viewcode-block\" id=\"BilinearSeqAttn.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.attention.html#claf.modules.attention.seq_attention.BilinearSeqAttn.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">x_mask</span><span class=\"p\">):</span>\n        <span class=\"n\">Wy</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"p\">)</span> <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linear</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span> <span class=\"k\">else</span> <span class=\"n\">y</span>\n        <span class=\"n\">xWy</span> <span class=\"o\">=</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span><span class=\"n\">Wy</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"n\">xWy</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">masked_fill_</span><span class=\"p\">((</span><span class=\"n\">x_mask</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"o\">-</span><span class=\"mf\">1e30</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">normalize</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training</span><span class=\"p\">:</span>\n                <span class=\"n\">alpha</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">log_softmax</span><span class=\"p\">(</span><span class=\"n\">xWy</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">alpha</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">xWy</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">alpha</span> <span class=\"o\">=</span> <span class=\"n\">xWy</span><span class=\"o\">.</span><span class=\"n\">exp</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">alpha</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/conv/depthwise_separable_conv.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.conv.depthwise_separable_conv &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.conv.depthwise_separable_conv</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.conv.depthwise_separable_conv</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.pointwise_conv</span> <span class=\"k\">import</span> <span class=\"n\">PointwiseConv</span>\n\n\n<div class=\"viewcode-block\" id=\"DepSepConv\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.conv.html#claf.modules.conv.depthwise_separable_conv.DepSepConv\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DepSepConv</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Depthwise Separable Convolutions</span>\n<span class=\"sd\">        in Xception: Deep Learning with Depthwise Separable Convolutions (https://arxiv.org/abs/1610.02357)</span>\n\n<span class=\"sd\">    depthwise -&gt; pointwise (1x1 conv)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        input_size: the number of input tensor&#39;s dimension</span>\n<span class=\"sd\">        num_filters: the number of convolution filter</span>\n<span class=\"sd\">        kernel_size: the number of convolution kernel size</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">num_filters</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">kernel_size</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">DepSepConv</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">depthwise</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Conv1d</span><span class=\"p\">(</span>\n            <span class=\"n\">in_channels</span><span class=\"o\">=</span><span class=\"n\">input_size</span><span class=\"p\">,</span>\n            <span class=\"n\">out_channels</span><span class=\"o\">=</span><span class=\"n\">input_size</span><span class=\"p\">,</span>\n            <span class=\"n\">kernel_size</span><span class=\"o\">=</span><span class=\"n\">kernel_size</span><span class=\"p\">,</span>\n            <span class=\"n\">groups</span><span class=\"o\">=</span><span class=\"n\">input_size</span><span class=\"p\">,</span>\n            <span class=\"n\">padding</span><span class=\"o\">=</span><span class=\"n\">kernel_size</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"o\">.</span><span class=\"n\">kaiming_normal_</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">depthwise</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pointwise</span> <span class=\"o\">=</span> <span class=\"n\">PointwiseConv</span><span class=\"p\">(</span><span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">input_size</span><span class=\"p\">,</span> <span class=\"n\">num_filters</span><span class=\"o\">=</span><span class=\"n\">num_filters</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">relu</span>\n\n<div class=\"viewcode-block\" id=\"DepSepConv.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.conv.html#claf.modules.conv.depthwise_separable_conv.DepSepConv.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">):</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">depthwise</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">))</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pointwise</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">))</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">x</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/conv/pointwise_conv.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.conv.pointwise_conv &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.conv.pointwise_conv</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.conv.pointwise_conv</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n\n<div class=\"viewcode-block\" id=\"PointwiseConv\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.conv.html#claf.modules.conv.pointwise_conv.PointwiseConv\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">PointwiseConv</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Pointwise Convolution (1x1 Conv)</span>\n\n<span class=\"sd\">    Convolution 1 Dimension (Faster version)</span>\n<span class=\"sd\">    (cf. https://github.com/huggingface/pytorch-openai-transformer-lm/blob/\\</span>\n<span class=\"sd\">        eafc28abdfadfa0732f03a0fc65805c5bfb2ffe7/model_pytorch.py#L45)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        input_size: the number of input tensor&#39;s dimension</span>\n<span class=\"sd\">        num_filters: the number of convolution filter</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># nf: num_filters, rf: kernel_size, nx: in_channels</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">input_size</span><span class=\"p\">,</span> <span class=\"n\">num_filters</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">PointwiseConv</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kernel_size</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_filters</span> <span class=\"o\">=</span> <span class=\"n\">num_filters</span>\n\n        <span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">empty</span><span class=\"p\">(</span><span class=\"n\">input_size</span><span class=\"p\">,</span> <span class=\"n\">num_filters</span><span class=\"p\">)</span>\n        <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"o\">.</span><span class=\"n\">normal_</span><span class=\"p\">(</span><span class=\"n\">weight</span><span class=\"p\">,</span> <span class=\"n\">std</span><span class=\"o\">=</span><span class=\"mf\">0.02</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">weight</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bias</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"n\">num_filters</span><span class=\"p\">))</span>\n\n<div class=\"viewcode-block\" id=\"PointwiseConv.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.conv.html#claf.modules.conv.pointwise_conv.PointwiseConv.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">):</span>\n        <span class=\"n\">size_out</span> <span class=\"o\">=</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_filters</span><span class=\"p\">,)</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">addmm</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">contiguous</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">)</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">size_out</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">x</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/encoder/lstm_cell_with_projection.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.encoder.lstm_cell_with_projection &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.encoder.lstm_cell_with_projection</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.encoder.lstm_cell_with_projection</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">This code is from allenai/allennlp</span>\n<span class=\"sd\">(https://github.com/allenai/allennlp/blob/master/allennlp/modules/lstm_cell_with_projection.py)</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">itertools</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">typing</span> <span class=\"k\">import</span> <span class=\"n\">Callable</span><span class=\"p\">,</span> <span class=\"n\">List</span><span class=\"p\">,</span> <span class=\"n\">Tuple</span><span class=\"p\">,</span> <span class=\"n\">Union</span><span class=\"p\">,</span> <span class=\"n\">Optional</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">from</span> <span class=\"nn\">torch.nn.utils.rnn</span> <span class=\"k\">import</span> <span class=\"n\">pack_padded_sequence</span><span class=\"p\">,</span> <span class=\"n\">PackedSequence</span>\n\n\n<div class=\"viewcode-block\" id=\"LstmCellWithProjection\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">LstmCellWithProjection</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    An LSTM with Recurrent Dropout and a projected and clipped hidden state and</span>\n<span class=\"sd\">    memory. Note: this implementation is slower than the native Pytorch LSTM because</span>\n<span class=\"sd\">    it cannot make use of CUDNN optimizations for stacked RNNs due to and</span>\n<span class=\"sd\">    variational dropout and the custom nature of the cell state.</span>\n<span class=\"sd\">    Parameters</span>\n<span class=\"sd\">    ----------</span>\n<span class=\"sd\">    input_size : ``int``, required.</span>\n<span class=\"sd\">        The dimension of the inputs to the LSTM.</span>\n<span class=\"sd\">    hidden_size : ``int``, required.</span>\n<span class=\"sd\">        The dimension of the outputs of the LSTM.</span>\n<span class=\"sd\">    cell_size : ``int``, required.</span>\n<span class=\"sd\">        The dimension of the memory cell used for the LSTM.</span>\n<span class=\"sd\">    go_forward: ``bool``, optional (default = True)</span>\n<span class=\"sd\">        The direction in which the LSTM is applied to the sequence.</span>\n<span class=\"sd\">        Forwards by default, or backwards if False.</span>\n<span class=\"sd\">    recurrent_dropout_probability: ``float``, optional (default = 0.0)</span>\n<span class=\"sd\">        The dropout probability to be used in a dropout scheme as stated in</span>\n<span class=\"sd\">        `A Theoretically Grounded Application of Dropout in Recurrent Neural Networks</span>\n<span class=\"sd\">        &lt;https://arxiv.org/abs/1512.05287&gt;`_ . Implementation wise, this simply</span>\n<span class=\"sd\">        applies a fixed dropout mask per sequence to the recurrent connection of the</span>\n<span class=\"sd\">        LSTM.</span>\n<span class=\"sd\">    state_projection_clip_value: ``float``, optional, (default = None)</span>\n<span class=\"sd\">        The magnitude with which to clip the hidden_state after projecting it.</span>\n<span class=\"sd\">    memory_cell_clip_value: ``float``, optional, (default = None)</span>\n<span class=\"sd\">        The magnitude with which to clip the memory cell.</span>\n<span class=\"sd\">    Returns</span>\n<span class=\"sd\">    -------</span>\n<span class=\"sd\">    output_accumulator : ``torch.FloatTensor``</span>\n<span class=\"sd\">        The outputs of the LSTM for each timestep. A tensor of shape</span>\n<span class=\"sd\">        (batch_size, max_timesteps, hidden_size) where for a given batch</span>\n<span class=\"sd\">        element, all outputs past the sequence length for that batch are</span>\n<span class=\"sd\">        zero tensors.</span>\n<span class=\"sd\">    final_state: ``Tuple[torch.FloatTensor, torch.FloatTensor]``</span>\n<span class=\"sd\">        The final (state, memory) states of the LSTM, with shape</span>\n<span class=\"sd\">        (1, batch_size, hidden_size) and  (1, batch_size, cell_size)</span>\n<span class=\"sd\">        respectively. The first dimension is 1 in order to match the Pytorch</span>\n<span class=\"sd\">        API for returning stacked LSTM states.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">input_size</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n        <span class=\"n\">hidden_size</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n        <span class=\"n\">cell_size</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n        <span class=\"n\">go_forward</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">recurrent_dropout_probability</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.0</span><span class=\"p\">,</span>\n        <span class=\"n\">memory_cell_clip_value</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">float</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">state_projection_clip_value</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">float</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">LstmCellWithProjection</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"c1\"># Required to be wrapped with a :class:`PytorchSeq2SeqWrapper`.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_size</span> <span class=\"o\">=</span> <span class=\"n\">input_size</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span> <span class=\"o\">=</span> <span class=\"n\">hidden_size</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span> <span class=\"o\">=</span> <span class=\"n\">cell_size</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">go_forward</span> <span class=\"o\">=</span> <span class=\"n\">go_forward</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">state_projection_clip_value</span> <span class=\"o\">=</span> <span class=\"n\">state_projection_clip_value</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">memory_cell_clip_value</span> <span class=\"o\">=</span> <span class=\"n\">memory_cell_clip_value</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">recurrent_dropout_probability</span> <span class=\"o\">=</span> <span class=\"n\">recurrent_dropout_probability</span>\n\n        <span class=\"c1\"># We do the projections for all the gates all at once.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_linearity</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">input_size</span><span class=\"p\">,</span> <span class=\"mi\">4</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">state_linearity</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"mi\">4</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Additional projection matrix for making the hidden state smaller.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">state_projection</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">cell_size</span><span class=\"p\">,</span> <span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reset_parameters</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"LstmCellWithProjection.reset_parameters\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection.reset_parameters\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">reset_parameters</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Use sensible default initializations for parameters.</span>\n        <span class=\"n\">block_orthogonal</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_linearity</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_size</span><span class=\"p\">])</span>\n        <span class=\"n\">block_orthogonal</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">state_linearity</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">])</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">state_linearity</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">fill_</span><span class=\"p\">(</span><span class=\"mf\">0.0</span><span class=\"p\">)</span>\n        <span class=\"c1\"># Initialize forget gate biases to 1.0 as per An Empirical</span>\n        <span class=\"c1\"># Exploration of Recurrent Network Architectures, (Jozefowicz, 2015).</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">state_linearity</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span> <span class=\"p\">:</span> <span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">fill_</span><span class=\"p\">(</span><span class=\"mf\">1.0</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"LstmCellWithProjection.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>  <span class=\"c1\"># pylint: disable=arguments-differ</span>\n        <span class=\"n\">inputs</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">,</span>\n        <span class=\"n\">batch_lengths</span><span class=\"p\">:</span> <span class=\"n\">List</span><span class=\"p\">[</span><span class=\"nb\">int</span><span class=\"p\">],</span>\n        <span class=\"n\">initial_state</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">]]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Parameters</span>\n<span class=\"sd\">        ----------</span>\n<span class=\"sd\">        inputs : ``torch.FloatTensor``, required.</span>\n<span class=\"sd\">            A tensor of shape (batch_size, num_timesteps, input_size)</span>\n<span class=\"sd\">            to apply the LSTM over.</span>\n<span class=\"sd\">        batch_lengths : ``List[int]``, required.</span>\n<span class=\"sd\">            A list of length batch_size containing the lengths of the sequences in batch.</span>\n<span class=\"sd\">        initial_state : ``Tuple[torch.Tensor, torch.Tensor]``, optional, (default = None)</span>\n<span class=\"sd\">            A tuple (state, memory) representing the initial hidden state and memory</span>\n<span class=\"sd\">            of the LSTM. The ``state`` has shape (1, batch_size, hidden_size) and the</span>\n<span class=\"sd\">            ``memory`` has shape (1, batch_size, cell_size).</span>\n<span class=\"sd\">        Returns</span>\n<span class=\"sd\">        -------</span>\n<span class=\"sd\">        output_accumulator : ``torch.FloatTensor``</span>\n<span class=\"sd\">            The outputs of the LSTM for each timestep. A tensor of shape</span>\n<span class=\"sd\">            (batch_size, max_timesteps, hidden_size) where for a given batch</span>\n<span class=\"sd\">            element, all outputs past the sequence length for that batch are</span>\n<span class=\"sd\">            zero tensors.</span>\n<span class=\"sd\">        final_state : ``Tuple[``torch.FloatTensor, torch.FloatTensor]``</span>\n<span class=\"sd\">            A tuple (state, memory) representing the initial hidden state and memory</span>\n<span class=\"sd\">            of the LSTM. The ``state`` has shape (1, batch_size, hidden_size) and the</span>\n<span class=\"sd\">            ``memory`` has shape (1, batch_size, cell_size).</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">batch_size</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">total_timesteps</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n\n        <span class=\"n\">output_accumulator</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">new_zeros</span><span class=\"p\">(</span><span class=\"n\">batch_size</span><span class=\"p\">,</span> <span class=\"n\">total_timesteps</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">initial_state</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">full_batch_previous_memory</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">new_zeros</span><span class=\"p\">(</span><span class=\"n\">batch_size</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)</span>\n            <span class=\"n\">full_batch_previous_state</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">new_zeros</span><span class=\"p\">(</span><span class=\"n\">batch_size</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">full_batch_previous_state</span> <span class=\"o\">=</span> <span class=\"n\">initial_state</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n            <span class=\"n\">full_batch_previous_memory</span> <span class=\"o\">=</span> <span class=\"n\">initial_state</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n        <span class=\"n\">current_length_index</span> <span class=\"o\">=</span> <span class=\"n\">batch_size</span> <span class=\"o\">-</span> <span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">go_forward</span> <span class=\"k\">else</span> <span class=\"mi\">0</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">recurrent_dropout_probability</span> <span class=\"o\">&gt;</span> <span class=\"mf\">0.0</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training</span><span class=\"p\">:</span>\n            <span class=\"n\">dropout_mask</span> <span class=\"o\">=</span> <span class=\"n\">get_dropout_mask</span><span class=\"p\">(</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">recurrent_dropout_probability</span><span class=\"p\">,</span> <span class=\"n\">full_batch_previous_state</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">dropout_mask</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">timestep</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">total_timesteps</span><span class=\"p\">):</span>\n            <span class=\"c1\"># The index depends on which end we start.</span>\n            <span class=\"n\">index</span> <span class=\"o\">=</span> <span class=\"n\">timestep</span> <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">go_forward</span> <span class=\"k\">else</span> <span class=\"n\">total_timesteps</span> <span class=\"o\">-</span> <span class=\"n\">timestep</span> <span class=\"o\">-</span> <span class=\"mi\">1</span>\n\n            <span class=\"c1\"># What we are doing here is finding the index into the batch dimension</span>\n            <span class=\"c1\"># which we need to use for this timestep, because the sequences have</span>\n            <span class=\"c1\"># variable length, so once the index is greater than the length of this</span>\n            <span class=\"c1\"># particular batch sequence, we no longer need to do the computation for</span>\n            <span class=\"c1\"># this sequence. The key thing to recognise here is that the batch inputs</span>\n            <span class=\"c1\"># must be _ordered_ by length from longest (first in batch) to shortest</span>\n            <span class=\"c1\"># (last) so initially, we are going forwards with every sequence and as we</span>\n            <span class=\"c1\"># pass the index at which the shortest elements of the batch finish,</span>\n            <span class=\"c1\"># we stop picking them up for the computation.</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">go_forward</span><span class=\"p\">:</span>\n                <span class=\"k\">while</span> <span class=\"n\">batch_lengths</span><span class=\"p\">[</span><span class=\"n\">current_length_index</span><span class=\"p\">]</span> <span class=\"o\">&lt;=</span> <span class=\"n\">index</span><span class=\"p\">:</span>\n                    <span class=\"n\">current_length_index</span> <span class=\"o\">-=</span> <span class=\"mi\">1</span>\n            <span class=\"c1\"># If we&#39;re going backwards, we are _picking up_ more indices.</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"c1\"># First conditional: Are we already at the maximum number of elements in the batch?</span>\n                <span class=\"c1\"># Second conditional: Does the next shortest sequence beyond the current batch</span>\n                <span class=\"c1\"># index require computation use this timestep?</span>\n                <span class=\"k\">while</span> <span class=\"p\">(</span>\n                    <span class=\"n\">current_length_index</span> <span class=\"o\">&lt;</span> <span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">batch_lengths</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n                    <span class=\"ow\">and</span> <span class=\"n\">batch_lengths</span><span class=\"p\">[</span><span class=\"n\">current_length_index</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">&gt;</span> <span class=\"n\">index</span>\n                <span class=\"p\">):</span>\n                    <span class=\"n\">current_length_index</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n\n            <span class=\"c1\"># Actually get the slices of the batch which we</span>\n            <span class=\"c1\"># need for the computation at this timestep.</span>\n            <span class=\"c1\"># shape (batch_size, cell_size)</span>\n            <span class=\"n\">previous_memory</span> <span class=\"o\">=</span> <span class=\"n\">full_batch_previous_memory</span><span class=\"p\">[</span><span class=\"mi\">0</span> <span class=\"p\">:</span> <span class=\"n\">current_length_index</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">clone</span><span class=\"p\">()</span>\n            <span class=\"c1\"># Shape (batch_size, hidden_size)</span>\n            <span class=\"n\">previous_state</span> <span class=\"o\">=</span> <span class=\"n\">full_batch_previous_state</span><span class=\"p\">[</span><span class=\"mi\">0</span> <span class=\"p\">:</span> <span class=\"n\">current_length_index</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">clone</span><span class=\"p\">()</span>\n            <span class=\"c1\"># Shape (batch_size, input_size)</span>\n            <span class=\"n\">timestep_input</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"p\">[</span><span class=\"mi\">0</span> <span class=\"p\">:</span> <span class=\"n\">current_length_index</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">]</span>\n\n            <span class=\"c1\"># Do the projections for all the gates all at once.</span>\n            <span class=\"c1\"># Both have shape (batch_size, 4 * cell_size)</span>\n            <span class=\"n\">projected_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_linearity</span><span class=\"p\">(</span><span class=\"n\">timestep_input</span><span class=\"p\">)</span>\n            <span class=\"n\">projected_state</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">state_linearity</span><span class=\"p\">(</span><span class=\"n\">previous_state</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># Main LSTM equations using relevant chunks of the big linear</span>\n            <span class=\"c1\"># projections of the hidden state and inputs.</span>\n            <span class=\"n\">input_gate</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sigmoid</span><span class=\"p\">(</span>\n                <span class=\"n\">projected_input</span><span class=\"p\">[:,</span> <span class=\"p\">(</span><span class=\"mi\">0</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)]</span>\n                <span class=\"o\">+</span> <span class=\"n\">projected_state</span><span class=\"p\">[:,</span> <span class=\"p\">(</span><span class=\"mi\">0</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)]</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">forget_gate</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sigmoid</span><span class=\"p\">(</span>\n                <span class=\"n\">projected_input</span><span class=\"p\">[:,</span> <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)]</span>\n                <span class=\"o\">+</span> <span class=\"n\">projected_state</span><span class=\"p\">[:,</span> <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)]</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">memory_init</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">tanh</span><span class=\"p\">(</span>\n                <span class=\"n\">projected_input</span><span class=\"p\">[:,</span> <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">3</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)]</span>\n                <span class=\"o\">+</span> <span class=\"n\">projected_state</span><span class=\"p\">[:,</span> <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">3</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)]</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">output_gate</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sigmoid</span><span class=\"p\">(</span>\n                <span class=\"n\">projected_input</span><span class=\"p\">[:,</span> <span class=\"p\">(</span><span class=\"mi\">3</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">4</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)]</span>\n                <span class=\"o\">+</span> <span class=\"n\">projected_state</span><span class=\"p\">[:,</span> <span class=\"p\">(</span><span class=\"mi\">3</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">4</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">)]</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">memory</span> <span class=\"o\">=</span> <span class=\"n\">input_gate</span> <span class=\"o\">*</span> <span class=\"n\">memory_init</span> <span class=\"o\">+</span> <span class=\"n\">forget_gate</span> <span class=\"o\">*</span> <span class=\"n\">previous_memory</span>\n\n            <span class=\"c1\"># Here is the non-standard part of this LSTM cell; first, we clip the</span>\n            <span class=\"c1\"># memory cell, then we project the output of the timestep to a smaller size</span>\n            <span class=\"c1\"># and again clip it.</span>\n\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">memory_cell_clip_value</span><span class=\"p\">:</span>\n                <span class=\"c1\"># pylint: disable=invalid-unary-operand-type</span>\n                <span class=\"n\">memory</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">clamp</span><span class=\"p\">(</span>\n                    <span class=\"n\">memory</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">memory_cell_clip_value</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">memory_cell_clip_value</span>\n                <span class=\"p\">)</span>\n\n            <span class=\"c1\"># shape (current_length_index, cell_size)</span>\n            <span class=\"n\">pre_projection_timestep_output</span> <span class=\"o\">=</span> <span class=\"n\">output_gate</span> <span class=\"o\">*</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">tanh</span><span class=\"p\">(</span><span class=\"n\">memory</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># shape (current_length_index, hidden_size)</span>\n            <span class=\"n\">timestep_output</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">state_projection</span><span class=\"p\">(</span><span class=\"n\">pre_projection_timestep_output</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">state_projection_clip_value</span><span class=\"p\">:</span>\n                <span class=\"c1\"># pylint: disable=invalid-unary-operand-type</span>\n                <span class=\"n\">timestep_output</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">clamp</span><span class=\"p\">(</span>\n                    <span class=\"n\">timestep_output</span><span class=\"p\">,</span>\n                    <span class=\"o\">-</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">state_projection_clip_value</span><span class=\"p\">,</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">state_projection_clip_value</span><span class=\"p\">,</span>\n                <span class=\"p\">)</span>\n\n            <span class=\"c1\"># Only do dropout if the dropout prob is &gt; 0.0 and we are in training mode.</span>\n            <span class=\"k\">if</span> <span class=\"n\">dropout_mask</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"n\">timestep_output</span> <span class=\"o\">=</span> <span class=\"n\">timestep_output</span> <span class=\"o\">*</span> <span class=\"n\">dropout_mask</span><span class=\"p\">[</span><span class=\"mi\">0</span> <span class=\"p\">:</span> <span class=\"n\">current_length_index</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n\n            <span class=\"c1\"># We&#39;ve been doing computation with less than the full batch, so here we create a new</span>\n            <span class=\"c1\"># variable for the the whole batch at this timestep and insert the result for the</span>\n            <span class=\"c1\"># relevant elements of the batch into it.</span>\n            <span class=\"n\">full_batch_previous_memory</span> <span class=\"o\">=</span> <span class=\"n\">full_batch_previous_memory</span><span class=\"o\">.</span><span class=\"n\">clone</span><span class=\"p\">()</span>\n            <span class=\"n\">full_batch_previous_state</span> <span class=\"o\">=</span> <span class=\"n\">full_batch_previous_state</span><span class=\"o\">.</span><span class=\"n\">clone</span><span class=\"p\">()</span>\n            <span class=\"n\">full_batch_previous_memory</span><span class=\"p\">[</span><span class=\"mi\">0</span> <span class=\"p\">:</span> <span class=\"n\">current_length_index</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">memory</span>\n            <span class=\"n\">full_batch_previous_state</span><span class=\"p\">[</span><span class=\"mi\">0</span> <span class=\"p\">:</span> <span class=\"n\">current_length_index</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">timestep_output</span>\n            <span class=\"n\">output_accumulator</span><span class=\"p\">[</span><span class=\"mi\">0</span> <span class=\"p\">:</span> <span class=\"n\">current_length_index</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">timestep_output</span>\n\n        <span class=\"c1\"># Mimic the pytorch API by returning state in the following shape:</span>\n        <span class=\"c1\"># (num_layers * num_directions, batch_size, ...). As this</span>\n        <span class=\"c1\"># LSTM cell cannot be stacked, the first dimension here is just 1.</span>\n        <span class=\"n\">final_state</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"n\">full_batch_previous_state</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span>\n            <span class=\"n\">full_batch_previous_memory</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">output_accumulator</span><span class=\"p\">,</span> <span class=\"n\">final_state</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"get_dropout_mask\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.get_dropout_mask\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_dropout_mask</span><span class=\"p\">(</span>\n    <span class=\"n\">dropout_probability</span><span class=\"p\">:</span> <span class=\"nb\">float</span><span class=\"p\">,</span> <span class=\"n\">tensor_for_masking</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span>\n<span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Computes and returns an element-wise dropout mask for a given tensor, where</span>\n<span class=\"sd\">    each element in the mask is dropped out with probability dropout_probability.</span>\n<span class=\"sd\">    Note that the mask is NOT applied to the tensor - the tensor is passed to retain</span>\n<span class=\"sd\">    the correct CUDA tensor type for the mask.</span>\n<span class=\"sd\">    Parameters</span>\n<span class=\"sd\">    ----------</span>\n<span class=\"sd\">    dropout_probability : float, required.</span>\n<span class=\"sd\">        Probability of dropping a dimension of the input.</span>\n<span class=\"sd\">    tensor_for_masking : torch.Tensor, required.</span>\n<span class=\"sd\">    Returns</span>\n<span class=\"sd\">    -------</span>\n<span class=\"sd\">    A torch.FloatTensor consisting of the binary mask scaled by 1/ (1 - dropout_probability).</span>\n<span class=\"sd\">    This scaling ensures expected values and variances of the output of applying this mask</span>\n<span class=\"sd\">     and the original tensor are the same.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">binary_mask</span> <span class=\"o\">=</span> <span class=\"n\">tensor_for_masking</span><span class=\"o\">.</span><span class=\"n\">new_tensor</span><span class=\"p\">(</span>\n        <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"n\">tensor_for_masking</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span> <span class=\"o\">&gt;</span> <span class=\"n\">dropout_probability</span>\n    <span class=\"p\">)</span>\n    <span class=\"c1\"># Scale mask by 1/keep_prob to preserve output statistics.</span>\n    <span class=\"n\">dropout_mask</span> <span class=\"o\">=</span> <span class=\"n\">binary_mask</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">div</span><span class=\"p\">(</span><span class=\"mf\">1.0</span> <span class=\"o\">-</span> <span class=\"n\">dropout_probability</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">dropout_mask</span></div>\n\n\n<div class=\"viewcode-block\" id=\"block_orthogonal\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.block_orthogonal\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">block_orthogonal</span><span class=\"p\">(</span>\n    <span class=\"n\">tensor</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">split_sizes</span><span class=\"p\">:</span> <span class=\"n\">List</span><span class=\"p\">[</span><span class=\"nb\">int</span><span class=\"p\">],</span> <span class=\"n\">gain</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">1.0</span>\n<span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kc\">None</span><span class=\"p\">:</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    An initializer which allows initializing model parameters in &quot;blocks&quot;. This is helpful</span>\n<span class=\"sd\">    in the case of recurrent models which use multiple gates applied to linear projections,</span>\n<span class=\"sd\">    which can be computed efficiently if they are concatenated together. However, they are</span>\n<span class=\"sd\">    separate parameters which should be initialized independently.</span>\n<span class=\"sd\">    Parameters</span>\n<span class=\"sd\">    ----------</span>\n<span class=\"sd\">    tensor : ``torch.Tensor``, required.</span>\n<span class=\"sd\">        A tensor to initialize.</span>\n<span class=\"sd\">    split_sizes : List[int], required.</span>\n<span class=\"sd\">        A list of length ``tensor.ndim()`` specifying the size of the</span>\n<span class=\"sd\">        blocks along that particular dimension. E.g. ``[10, 20]`` would</span>\n<span class=\"sd\">        result in the tensor being split into chunks of size 10 along the</span>\n<span class=\"sd\">        first dimension and 20 along the second.</span>\n<span class=\"sd\">    gain : float, optional (default = 1.0)</span>\n<span class=\"sd\">        The gain (scaling) applied to the orthogonal initialization.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">data</span>\n    <span class=\"n\">sizes</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">())</span>\n    <span class=\"k\">if</span> <span class=\"nb\">any</span><span class=\"p\">([</span><span class=\"n\">a</span> <span class=\"o\">%</span> <span class=\"n\">b</span> <span class=\"o\">!=</span> <span class=\"mi\">0</span> <span class=\"k\">for</span> <span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">sizes</span><span class=\"p\">,</span> <span class=\"n\">split_sizes</span><span class=\"p\">)]):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n            <span class=\"s2\">&quot;tensor dimensions must be divisible by their respective &quot;</span>\n            <span class=\"s2\">&quot;split_sizes. Found size: </span><span class=\"si\">{}</span><span class=\"s2\"> and split_sizes: </span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">sizes</span><span class=\"p\">,</span> <span class=\"n\">split_sizes</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n    <span class=\"n\">indexes</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">max_size</span><span class=\"p\">,</span> <span class=\"n\">split</span><span class=\"p\">))</span> <span class=\"k\">for</span> <span class=\"n\">max_size</span><span class=\"p\">,</span> <span class=\"n\">split</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">sizes</span><span class=\"p\">,</span> <span class=\"n\">split_sizes</span><span class=\"p\">)]</span>\n    <span class=\"c1\"># Iterate over all possible blocks within the tensor.</span>\n    <span class=\"k\">for</span> <span class=\"n\">block_start_indices</span> <span class=\"ow\">in</span> <span class=\"n\">itertools</span><span class=\"o\">.</span><span class=\"n\">product</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">indexes</span><span class=\"p\">):</span>\n        <span class=\"c1\"># A list of tuples containing the index to start at for this block</span>\n        <span class=\"c1\"># and the appropriate step size (i.e split_size[i] for dimension i).</span>\n        <span class=\"n\">index_and_step_tuples</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">block_start_indices</span><span class=\"p\">,</span> <span class=\"n\">split_sizes</span><span class=\"p\">)</span>\n        <span class=\"c1\"># This is a tuple of slices corresponding to:</span>\n        <span class=\"c1\"># tensor[index: index + step_size, ...]. This is</span>\n        <span class=\"c1\"># required because we could have an arbitrary number</span>\n        <span class=\"c1\"># of dimensions. The actual slices we need are the</span>\n        <span class=\"c1\"># start_index: start_index + step for each dimension in the tensor.</span>\n        <span class=\"n\">block_slice</span> <span class=\"o\">=</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span><span class=\"nb\">slice</span><span class=\"p\">(</span><span class=\"n\">start_index</span><span class=\"p\">,</span> <span class=\"n\">start_index</span> <span class=\"o\">+</span> <span class=\"n\">step</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">start_index</span><span class=\"p\">,</span> <span class=\"n\">step</span> <span class=\"ow\">in</span> <span class=\"n\">index_and_step_tuples</span><span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">block_slice</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"o\">.</span><span class=\"n\">orthogonal_</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"p\">[</span><span class=\"n\">block_slice</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">contiguous</span><span class=\"p\">(),</span> <span class=\"n\">gain</span><span class=\"o\">=</span><span class=\"n\">gain</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"sort_batch_by_length\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.sort_batch_by_length\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">sort_batch_by_length</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">sequence_lengths</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Sort a batch first tensor by some specified lengths.</span>\n<span class=\"sd\">    Parameters</span>\n<span class=\"sd\">    ----------</span>\n<span class=\"sd\">    tensor : torch.FloatTensor, required.</span>\n<span class=\"sd\">        A batch first Pytorch tensor.</span>\n<span class=\"sd\">    sequence_lengths : torch.LongTensor, required.</span>\n<span class=\"sd\">        A tensor representing the lengths of some dimension of the tensor which</span>\n<span class=\"sd\">        we want to sort by.</span>\n<span class=\"sd\">    Returns</span>\n<span class=\"sd\">    -------</span>\n<span class=\"sd\">    sorted_tensor : torch.FloatTensor</span>\n<span class=\"sd\">        The original tensor sorted along the batch dimension with respect to sequence_lengths.</span>\n<span class=\"sd\">    sorted_sequence_lengths : torch.LongTensor</span>\n<span class=\"sd\">        The original sequence_lengths sorted by decreasing size.</span>\n<span class=\"sd\">    restoration_indices : torch.LongTensor</span>\n<span class=\"sd\">        Indices into the sorted_tensor such that</span>\n<span class=\"sd\">        ``sorted_tensor.index_select(0, restoration_indices) == original_tensor``</span>\n<span class=\"sd\">    permuation_index : torch.LongTensor</span>\n<span class=\"sd\">        The indices used to sort the tensor. This is useful if you want to sort many</span>\n<span class=\"sd\">        tensors using the same ordering.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">sequence_lengths</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Both the tensor and sequence lengths must be torch.Tensors.&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">sorted_sequence_lengths</span><span class=\"p\">,</span> <span class=\"n\">permutation_index</span> <span class=\"o\">=</span> <span class=\"n\">sequence_lengths</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">descending</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">sorted_tensor</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">index_select</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">permutation_index</span><span class=\"p\">)</span>\n\n    <span class=\"n\">index_range</span> <span class=\"o\">=</span> <span class=\"n\">sequence_lengths</span><span class=\"o\">.</span><span class=\"n\">new_tensor</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">sequence_lengths</span><span class=\"p\">)))</span>\n    <span class=\"c1\"># This is the equivalent of zipping with index, sorting by the original</span>\n    <span class=\"c1\"># sequence lengths and returning the now sorted indices.</span>\n    <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">reverse_mapping</span> <span class=\"o\">=</span> <span class=\"n\">permutation_index</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">descending</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">restoration_indices</span> <span class=\"o\">=</span> <span class=\"n\">index_range</span><span class=\"o\">.</span><span class=\"n\">index_select</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">reverse_mapping</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">sorted_tensor</span><span class=\"p\">,</span> <span class=\"n\">sorted_sequence_lengths</span><span class=\"p\">,</span> <span class=\"n\">restoration_indices</span><span class=\"p\">,</span> <span class=\"n\">permutation_index</span></div>\n\n\n<span class=\"c1\"># We have two types here for the state, because storing the state in something</span>\n<span class=\"c1\"># which is Iterable (like a tuple, below), is helpful for internal manipulation</span>\n<span class=\"c1\"># - however, the states are consumed as either Tensors or a Tuple of Tensors, so</span>\n<span class=\"c1\"># returning them in this format is unhelpful.</span>\n<span class=\"n\">RnnState</span> <span class=\"o\">=</span> <span class=\"n\">Union</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">]]</span>  <span class=\"c1\"># pylint: disable=invalid-name</span>\n<span class=\"n\">RnnStateStorage</span> <span class=\"o\">=</span> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"o\">...</span><span class=\"p\">]</span>  <span class=\"c1\"># pylint: disable=invalid-name</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_EncoderBase</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"c1\"># pylint: disable=abstract-method</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This abstract class serves as a base for the 3 ``Encoder`` abstractions in AllenNLP.</span>\n<span class=\"sd\">    - :class:`~allennlp.modules.seq2seq_encoders.Seq2SeqEncoders`</span>\n<span class=\"sd\">    - :class:`~allennlp.modules.seq2vec_encoders.Seq2VecEncoders`</span>\n<span class=\"sd\">    Additionally, this class provides functionality for sorting sequences by length</span>\n<span class=\"sd\">    so they can be consumed by Pytorch RNN classes, which require their inputs to be</span>\n<span class=\"sd\">    sorted by length. Finally, it also provides optional statefulness to all of it&#39;s</span>\n<span class=\"sd\">    subclasses by allowing the caching and retrieving of the hidden states of RNNs.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">stateful</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">_EncoderBase</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stateful</span> <span class=\"o\">=</span> <span class=\"n\">stateful</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">RnnStateStorage</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">sort_and_run_forward</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">module</span><span class=\"p\">:</span> <span class=\"n\">Callable</span><span class=\"p\">[</span>\n            <span class=\"p\">[</span><span class=\"n\">PackedSequence</span><span class=\"p\">,</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">RnnState</span><span class=\"p\">]],</span>\n            <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">Union</span><span class=\"p\">[</span><span class=\"n\">PackedSequence</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">],</span> <span class=\"n\">RnnState</span><span class=\"p\">],</span>\n        <span class=\"p\">],</span>\n        <span class=\"n\">inputs</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span>\n        <span class=\"n\">mask</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span>\n        <span class=\"n\">hidden_state</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">RnnState</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        This function exists because Pytorch RNNs require that their inputs be sorted</span>\n<span class=\"sd\">        before being passed as input. As all of our Seq2xxxEncoders use this functionality,</span>\n<span class=\"sd\">        it is provided in a base class. This method can be called on any module which</span>\n<span class=\"sd\">        takes as input a ``PackedSequence`` and some ``hidden_state``, which can either be a</span>\n<span class=\"sd\">        tuple of tensors or a tensor.</span>\n<span class=\"sd\">        As all of our Seq2xxxEncoders have different return types, we return `sorted`</span>\n<span class=\"sd\">        outputs from the module, which is called directly. Additionally, we return the</span>\n<span class=\"sd\">        indices into the batch dimension required to restore the tensor to it&#39;s correct,</span>\n<span class=\"sd\">        unsorted order and the number of valid batch elements (i.e the number of elements</span>\n<span class=\"sd\">        in the batch which are not completely masked). This un-sorting and re-padding</span>\n<span class=\"sd\">        of the module outputs is left to the subclasses because their outputs have different</span>\n<span class=\"sd\">        types and handling them smoothly here is difficult.</span>\n<span class=\"sd\">        Parameters</span>\n<span class=\"sd\">        ----------</span>\n<span class=\"sd\">        module : ``Callable[[PackedSequence, Optional[RnnState]],</span>\n<span class=\"sd\">                            Tuple[Union[PackedSequence, torch.Tensor], RnnState]]``, required.</span>\n<span class=\"sd\">            A function to run on the inputs. In most cases, this is a ``torch.nn.Module``.</span>\n<span class=\"sd\">        inputs : ``torch.Tensor``, required.</span>\n<span class=\"sd\">            A tensor of shape ``(batch_size, sequence_length, embedding_size)`` representing</span>\n<span class=\"sd\">            the inputs to the Encoder.</span>\n<span class=\"sd\">        mask : ``torch.Tensor``, required.</span>\n<span class=\"sd\">            A tensor of shape ``(batch_size, sequence_length)``, representing masked and</span>\n<span class=\"sd\">            non-masked elements of the sequence for each element in the batch.</span>\n<span class=\"sd\">        hidden_state : ``Optional[RnnState]``, (default = None).</span>\n<span class=\"sd\">            A single tensor of shape (num_layers, batch_size, hidden_size) representing the</span>\n<span class=\"sd\">            state of an RNN with or a tuple of</span>\n<span class=\"sd\">            tensors of shapes (num_layers, batch_size, hidden_size) and</span>\n<span class=\"sd\">            (num_layers, batch_size, memory_size), representing the hidden state and memory</span>\n<span class=\"sd\">            state of an LSTM-like RNN.</span>\n<span class=\"sd\">        Returns</span>\n<span class=\"sd\">        -------</span>\n<span class=\"sd\">        module_output : ``Union[torch.Tensor, PackedSequence]``.</span>\n<span class=\"sd\">            A Tensor or PackedSequence representing the output of the Pytorch Module.</span>\n<span class=\"sd\">            The batch size dimension will be equal to ``num_valid``, as sequences of zero</span>\n<span class=\"sd\">            length are clipped off before the module is called, as Pytorch cannot handle</span>\n<span class=\"sd\">            zero length sequences.</span>\n<span class=\"sd\">        final_states : ``Optional[RnnState]``</span>\n<span class=\"sd\">            A Tensor representing the hidden state of the Pytorch Module. This can either</span>\n<span class=\"sd\">            be a single tensor of shape (num_layers, num_valid, hidden_size), for instance in</span>\n<span class=\"sd\">            the case of a GRU, or a tuple of tensors, such as those required for an LSTM.</span>\n<span class=\"sd\">        restoration_indices : ``torch.LongTensor``</span>\n<span class=\"sd\">            A tensor of shape ``(batch_size,)``, describing the re-indexing required to transform</span>\n<span class=\"sd\">            the outputs back to their original batch order.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># In some circumstances you may have sequences of zero length. ``pack_padded_sequence``</span>\n        <span class=\"c1\"># requires all sequence lengths to be &gt; 0, so remove sequences of zero length before</span>\n        <span class=\"c1\"># calling self._module, then fill with zeros.</span>\n\n        <span class=\"c1\"># First count how many sequences are empty.</span>\n        <span class=\"n\">batch_size</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n        <span class=\"n\">num_valid</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">mask</span><span class=\"p\">[:,</span> <span class=\"mi\">0</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">int</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n\n        <span class=\"n\">sequence_lengths</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">sorted_inputs</span><span class=\"p\">,</span> <span class=\"n\">sorted_sequence_lengths</span><span class=\"p\">,</span> <span class=\"n\">restoration_indices</span><span class=\"p\">,</span> <span class=\"n\">sorting_indices</span> <span class=\"o\">=</span> <span class=\"n\">sort_batch_by_length</span><span class=\"p\">(</span>\n            <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">sequence_lengths</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># Now create a PackedSequence with only the non-empty, sorted sequences.</span>\n        <span class=\"n\">packed_sequence_input</span> <span class=\"o\">=</span> <span class=\"n\">pack_padded_sequence</span><span class=\"p\">(</span>\n            <span class=\"n\">sorted_inputs</span><span class=\"p\">[:</span><span class=\"n\">num_valid</span><span class=\"p\">,</span> <span class=\"p\">:,</span> <span class=\"p\">:],</span>\n            <span class=\"n\">sorted_sequence_lengths</span><span class=\"p\">[:</span><span class=\"n\">num_valid</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">tolist</span><span class=\"p\">(),</span>\n            <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"c1\"># Prepare the initial states.</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stateful</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">hidden_state</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"n\">initial_states</span> <span class=\"o\">=</span> <span class=\"n\">hidden_state</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">hidden_state</span><span class=\"p\">,</span> <span class=\"nb\">tuple</span><span class=\"p\">):</span>\n                <span class=\"n\">initial_states</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                    <span class=\"n\">state</span><span class=\"o\">.</span><span class=\"n\">index_select</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">sorting_indices</span><span class=\"p\">)[:,</span> <span class=\"p\">:</span><span class=\"n\">num_valid</span><span class=\"p\">,</span> <span class=\"p\">:]</span><span class=\"o\">.</span><span class=\"n\">contiguous</span><span class=\"p\">()</span>\n                    <span class=\"k\">for</span> <span class=\"n\">state</span> <span class=\"ow\">in</span> <span class=\"n\">hidden_state</span>\n                <span class=\"p\">]</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">initial_states</span> <span class=\"o\">=</span> <span class=\"n\">hidden_state</span><span class=\"o\">.</span><span class=\"n\">index_select</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">sorting_indices</span><span class=\"p\">)[</span>\n                    <span class=\"p\">:,</span> <span class=\"p\">:</span><span class=\"n\">num_valid</span><span class=\"p\">,</span> <span class=\"p\">:</span>\n                <span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">contiguous</span><span class=\"p\">()</span>\n\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">initial_states</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_initial_states</span><span class=\"p\">(</span><span class=\"n\">batch_size</span><span class=\"p\">,</span> <span class=\"n\">num_valid</span><span class=\"p\">,</span> <span class=\"n\">sorting_indices</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Actually call the module on the sorted PackedSequence.</span>\n        <span class=\"n\">module_output</span><span class=\"p\">,</span> <span class=\"n\">final_states</span> <span class=\"o\">=</span> <span class=\"n\">module</span><span class=\"p\">(</span><span class=\"n\">packed_sequence_input</span><span class=\"p\">,</span> <span class=\"n\">initial_states</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">module_output</span><span class=\"p\">,</span> <span class=\"n\">final_states</span><span class=\"p\">,</span> <span class=\"n\">restoration_indices</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_initial_states</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">batch_size</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">num_valid</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span> <span class=\"n\">sorting_indices</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">LongTensor</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">RnnState</span><span class=\"p\">]:</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns an initial state for use in an RNN. Additionally, this method handles</span>\n<span class=\"sd\">        the batch size changing across calls by mutating the state to append initial states</span>\n<span class=\"sd\">        for new elements in the batch. Finally, it also handles sorting the states</span>\n<span class=\"sd\">        with respect to the sequence lengths of elements in the batch and removing rows</span>\n<span class=\"sd\">        which are completely padded. Importantly, this `mutates` the state if the</span>\n<span class=\"sd\">        current batch size is larger than when it was previously called.</span>\n<span class=\"sd\">        Parameters</span>\n<span class=\"sd\">        ----------</span>\n<span class=\"sd\">        batch_size : ``int``, required.</span>\n<span class=\"sd\">            The batch size can change size across calls to stateful RNNs, so we need</span>\n<span class=\"sd\">            to know if we need to expand or shrink the states before returning them.</span>\n<span class=\"sd\">            Expanded states will be set to zero.</span>\n<span class=\"sd\">        num_valid : ``int``, required.</span>\n<span class=\"sd\">            The batch may contain completely padded sequences which get removed before</span>\n<span class=\"sd\">            the sequence is passed through the encoder. We also need to clip these off</span>\n<span class=\"sd\">            of the state too.</span>\n<span class=\"sd\">        sorting_indices ``torch.LongTensor``, required.</span>\n<span class=\"sd\">            Pytorch RNNs take sequences sorted by length. When we return the states to be</span>\n<span class=\"sd\">            used for a given call to ``module.forward``, we need the states to match up to</span>\n<span class=\"sd\">            the sorted sequences, so before returning them, we sort the states using the</span>\n<span class=\"sd\">            same indices used to sort the sequences.</span>\n<span class=\"sd\">        Returns</span>\n<span class=\"sd\">        -------</span>\n<span class=\"sd\">        This method has a complex return type because it has to deal with the first time it</span>\n<span class=\"sd\">        is called, when it has no state, and the fact that types of RNN have heterogeneous</span>\n<span class=\"sd\">        states.</span>\n<span class=\"sd\">        If it is the first time the module has been called, it returns ``None``, regardless</span>\n<span class=\"sd\">        of the type of the ``Module``.</span>\n<span class=\"sd\">        Otherwise, for LSTMs, it returns a tuple of ``torch.Tensors`` with shape</span>\n<span class=\"sd\">        ``(num_layers, num_valid, state_size)`` and ``(num_layers, num_valid, memory_size)``</span>\n<span class=\"sd\">        respectively, or for GRUs, it returns a single ``torch.Tensor`` of shape</span>\n<span class=\"sd\">        ``(num_layers, num_valid, state_size)``.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># We don&#39;t know the state sizes the first time calling forward,</span>\n        <span class=\"c1\"># so we let the module define what it&#39;s initial hidden state looks like.</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n        <span class=\"c1\"># Otherwise, we have some previous states.</span>\n        <span class=\"k\">if</span> <span class=\"n\">batch_size</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">):</span>\n            <span class=\"c1\"># This batch is larger than the all previous states.</span>\n            <span class=\"c1\"># If so, resize the states.</span>\n            <span class=\"n\">num_states_to_concat</span> <span class=\"o\">=</span> <span class=\"n\">batch_size</span> <span class=\"o\">-</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">resized_states</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"c1\"># state has shape (num_layers, batch_size, hidden_size)</span>\n            <span class=\"k\">for</span> <span class=\"n\">state</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span><span class=\"p\">:</span>\n                <span class=\"c1\"># This _must_ be inside the loop because some</span>\n                <span class=\"c1\"># RNNs have states with different last dimension sizes.</span>\n                <span class=\"n\">zeros</span> <span class=\"o\">=</span> <span class=\"n\">state</span><span class=\"o\">.</span><span class=\"n\">new_zeros</span><span class=\"p\">(</span><span class=\"n\">state</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">num_states_to_concat</span><span class=\"p\">,</span> <span class=\"n\">state</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">))</span>\n                <span class=\"n\">resized_states</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">state</span><span class=\"p\">,</span> <span class=\"n\">zeros</span><span class=\"p\">],</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span> <span class=\"o\">=</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">resized_states</span><span class=\"p\">)</span>\n            <span class=\"n\">correctly_shaped_states</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span>\n\n        <span class=\"k\">elif</span> <span class=\"n\">batch_size</span> <span class=\"o\">&lt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">):</span>\n            <span class=\"c1\"># This batch is smaller than the previous one.</span>\n            <span class=\"n\">correctly_shaped_states</span> <span class=\"o\">=</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">state</span><span class=\"p\">[:,</span> <span class=\"p\">:</span><span class=\"n\">batch_size</span><span class=\"p\">,</span> <span class=\"p\">:]</span> <span class=\"k\">for</span> <span class=\"n\">state</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">correctly_shaped_states</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span>\n\n        <span class=\"c1\"># At this point, our states are of shape (num_layers, batch_size, hidden_size).</span>\n        <span class=\"c1\"># However, the encoder uses sorted sequences and additionally removes elements</span>\n        <span class=\"c1\"># of the batch which are fully padded. We need the states to match up to these</span>\n        <span class=\"c1\"># sorted and filtered sequences, so we do that in the next two blocks before</span>\n        <span class=\"c1\"># returning the state/s.</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"c1\"># GRUs only have a single state. This `unpacks` it from the</span>\n            <span class=\"c1\"># tuple and returns the tensor directly.</span>\n            <span class=\"n\">correctly_shaped_state</span> <span class=\"o\">=</span> <span class=\"n\">correctly_shaped_states</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n            <span class=\"n\">sorted_state</span> <span class=\"o\">=</span> <span class=\"n\">correctly_shaped_state</span><span class=\"o\">.</span><span class=\"n\">index_select</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">sorting_indices</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">sorted_state</span><span class=\"p\">[:,</span> <span class=\"p\">:</span><span class=\"n\">num_valid</span><span class=\"p\">,</span> <span class=\"p\">:]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># LSTMs have a state tuple of (state, memory).</span>\n            <span class=\"n\">sorted_states</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                <span class=\"n\">state</span><span class=\"o\">.</span><span class=\"n\">index_select</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">sorting_indices</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">state</span> <span class=\"ow\">in</span> <span class=\"n\">correctly_shaped_states</span>\n            <span class=\"p\">]</span>\n            <span class=\"k\">return</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">state</span><span class=\"p\">[:,</span> <span class=\"p\">:</span><span class=\"n\">num_valid</span><span class=\"p\">,</span> <span class=\"p\">:]</span> <span class=\"k\">for</span> <span class=\"n\">state</span> <span class=\"ow\">in</span> <span class=\"n\">sorted_states</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_update_states</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">final_states</span><span class=\"p\">:</span> <span class=\"n\">RnnStateStorage</span><span class=\"p\">,</span> <span class=\"n\">restoration_indices</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">LongTensor</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        After the RNN has run forward, the states need to be updated.</span>\n<span class=\"sd\">        This method just sets the state to the updated new state, performing</span>\n<span class=\"sd\">        several pieces of book-keeping along the way - namely, unsorting the</span>\n<span class=\"sd\">        states and ensuring that the states of completely padded sequences are</span>\n<span class=\"sd\">        not updated. Finally, it also detaches the state variable from the</span>\n<span class=\"sd\">        computational graph, such that the graph can be garbage collected after</span>\n<span class=\"sd\">        each batch iteration.</span>\n<span class=\"sd\">        Parameters</span>\n<span class=\"sd\">        ----------</span>\n<span class=\"sd\">        final_states : ``RnnStateStorage``, required.</span>\n<span class=\"sd\">            The hidden states returned as output from the RNN.</span>\n<span class=\"sd\">        restoration_indices : ``torch.LongTensor``, required.</span>\n<span class=\"sd\">            The indices that invert the sorting used in ``sort_and_run_forward``</span>\n<span class=\"sd\">            to order the states with respect to the lengths of the sequences in</span>\n<span class=\"sd\">            the batch.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># TODO(Mark): seems weird to sort here, but append zeros in the subclasses.</span>\n        <span class=\"c1\"># which way around is best?</span>\n        <span class=\"n\">new_unsorted_states</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">state</span><span class=\"o\">.</span><span class=\"n\">index_select</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">restoration_indices</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">state</span> <span class=\"ow\">in</span> <span class=\"n\">final_states</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"c1\"># We don&#39;t already have states, so just set the</span>\n            <span class=\"c1\"># ones we receive to be the current state.</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span> <span class=\"o\">=</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">state</span><span class=\"o\">.</span><span class=\"n\">data</span> <span class=\"k\">for</span> <span class=\"n\">state</span> <span class=\"ow\">in</span> <span class=\"n\">new_unsorted_states</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Now we&#39;ve sorted the states back so that they correspond to the original</span>\n            <span class=\"c1\"># indices, we need to figure out what states we need to update, because if we</span>\n            <span class=\"c1\"># didn&#39;t use a state for a particular row, we want to preserve its state.</span>\n            <span class=\"c1\"># Thankfully, the rows which are all zero in the state correspond exactly</span>\n            <span class=\"c1\"># to those which aren&#39;t used, so we create masks of shape (new_batch_size,),</span>\n            <span class=\"c1\"># denoting which states were used in the RNN computation.</span>\n            <span class=\"n\">current_state_batch_size</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">new_state_batch_size</span> <span class=\"o\">=</span> <span class=\"n\">final_states</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"c1\"># Masks for the unused states of shape (1, new_batch_size, 1)</span>\n            <span class=\"n\">used_new_rows_mask</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                <span class=\"p\">(</span><span class=\"n\">state</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"p\">:,</span> <span class=\"p\">:]</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"mf\">0.0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">new_state_batch_size</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n                <span class=\"k\">for</span> <span class=\"n\">state</span> <span class=\"ow\">in</span> <span class=\"n\">new_unsorted_states</span>\n            <span class=\"p\">]</span>\n            <span class=\"n\">new_states</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"k\">if</span> <span class=\"n\">current_state_batch_size</span> <span class=\"o\">&gt;</span> <span class=\"n\">new_state_batch_size</span><span class=\"p\">:</span>\n                <span class=\"c1\"># The new state is smaller than the old one,</span>\n                <span class=\"c1\"># so just update the indices which we used.</span>\n                <span class=\"k\">for</span> <span class=\"n\">old_state</span><span class=\"p\">,</span> <span class=\"n\">new_state</span><span class=\"p\">,</span> <span class=\"n\">used_mask</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span><span class=\"p\">,</span> <span class=\"n\">new_unsorted_states</span><span class=\"p\">,</span> <span class=\"n\">used_new_rows_mask</span>\n                <span class=\"p\">):</span>\n                    <span class=\"c1\"># zero out all rows in the previous state</span>\n                    <span class=\"c1\"># which _were_ used in the current state.</span>\n                    <span class=\"n\">masked_old_state</span> <span class=\"o\">=</span> <span class=\"n\">old_state</span><span class=\"p\">[:,</span> <span class=\"p\">:</span><span class=\"n\">new_state_batch_size</span><span class=\"p\">,</span> <span class=\"p\">:]</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">used_mask</span><span class=\"p\">)</span>\n                    <span class=\"c1\"># The old state is larger, so update the relevant parts of it.</span>\n                    <span class=\"n\">old_state</span><span class=\"p\">[:,</span> <span class=\"p\">:</span><span class=\"n\">new_state_batch_size</span><span class=\"p\">,</span> <span class=\"p\">:]</span> <span class=\"o\">=</span> <span class=\"n\">new_state</span> <span class=\"o\">+</span> <span class=\"n\">masked_old_state</span>\n                    <span class=\"n\">new_states</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">old_state</span><span class=\"o\">.</span><span class=\"n\">detach</span><span class=\"p\">())</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"c1\"># The states are the same size, so we just have to</span>\n                <span class=\"c1\"># deal with the possibility that some rows weren&#39;t used.</span>\n                <span class=\"n\">new_states</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n                <span class=\"k\">for</span> <span class=\"n\">old_state</span><span class=\"p\">,</span> <span class=\"n\">new_state</span><span class=\"p\">,</span> <span class=\"n\">used_mask</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span><span class=\"p\">,</span> <span class=\"n\">new_unsorted_states</span><span class=\"p\">,</span> <span class=\"n\">used_new_rows_mask</span>\n                <span class=\"p\">):</span>\n                    <span class=\"c1\"># zero out all rows which _were_ used in the current state.</span>\n                    <span class=\"n\">masked_old_state</span> <span class=\"o\">=</span> <span class=\"n\">old_state</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">used_mask</span><span class=\"p\">)</span>\n                    <span class=\"c1\"># The old state is larger, so update the relevant parts of it.</span>\n                    <span class=\"n\">new_state</span> <span class=\"o\">+=</span> <span class=\"n\">masked_old_state</span>\n                    <span class=\"n\">new_states</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">new_state</span><span class=\"o\">.</span><span class=\"n\">detach</span><span class=\"p\">())</span>\n\n            <span class=\"c1\"># It looks like there should be another case handled here - when</span>\n            <span class=\"c1\"># the current_state_batch_size &lt; new_state_batch_size. However,</span>\n            <span class=\"c1\"># this never happens, because the states themeselves are mutated</span>\n            <span class=\"c1\"># by appending zeros when calling _get_inital_states, meaning that</span>\n            <span class=\"c1\"># the new states are either of equal size, or smaller, in the case</span>\n            <span class=\"c1\"># that there are some unused elements (zero-length) for the RNN computation.</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span> <span class=\"o\">=</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">new_states</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">reset_states</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_states</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/encoder/positional.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.encoder.positional &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.encoder.positional</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.encoder.positional</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">math</span>\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n\n<div class=\"viewcode-block\" id=\"PositionalEncoding\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.encoder.html#claf.modules.encoder.positional.PositionalEncoding\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">PositionalEncoding</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Positional Encoding</span>\n<span class=\"sd\">        in &quot;Attention is All You Need&quot; (https://arxiv.org/abs/1706.03762)</span>\n\n<span class=\"sd\">    The use of relative position is possible because sin(x+y) and cos(x+y) can be</span>\n<span class=\"sd\">    expressed in terms of y, sin(x) and cos(x).</span>\n\n<span class=\"sd\">    (cf. https://github.com/tensorflow/tensor2tensor/blob/42c3f377f441e5a0f431127d63e71414ead291c4/\\</span>\n<span class=\"sd\">        tensor2tensor/layers/common_attention.py#L388)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        embed_dim: the number of embedding dimension</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        max_len: the number of maximum sequence length</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2000</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">PositionalEncoding</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"n\">signal_sinusoid</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_get_timing_signal</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">register_buffer</span><span class=\"p\">(</span><span class=\"s2\">&quot;position_encoding&quot;</span><span class=\"p\">,</span> <span class=\"n\">signal_sinusoid</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_get_timing_signal</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">length</span><span class=\"p\">,</span> <span class=\"n\">channels</span><span class=\"p\">,</span> <span class=\"n\">min_timescale</span><span class=\"o\">=</span><span class=\"mf\">1.0</span><span class=\"p\">,</span> <span class=\"n\">max_timescale</span><span class=\"o\">=</span><span class=\"mf\">1.0e4</span><span class=\"p\">):</span>\n        <span class=\"n\">position</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"n\">length</span><span class=\"p\">)</span>\n        <span class=\"n\">num_timescales</span> <span class=\"o\">=</span> <span class=\"n\">channels</span> <span class=\"o\">//</span> <span class=\"mi\">2</span>\n        <span class=\"n\">log_timescale_increment</span> <span class=\"o\">=</span> <span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span>\n            <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">max_timescale</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">min_timescale</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">num_timescales</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">inv_timescales</span> <span class=\"o\">=</span> <span class=\"n\">min_timescale</span> <span class=\"o\">*</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">exp</span><span class=\"p\">(</span>\n            <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"n\">num_timescales</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">astype</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"o\">-</span><span class=\"n\">log_timescale_increment</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">scaled_time</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">expand_dims</span><span class=\"p\">(</span><span class=\"n\">position</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">expand_dims</span><span class=\"p\">(</span><span class=\"n\">inv_timescales</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">)</span>\n\n        <span class=\"n\">signal</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">concatenate</span><span class=\"p\">([</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">scaled_time</span><span class=\"p\">),</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">cos</span><span class=\"p\">(</span><span class=\"n\">scaled_time</span><span class=\"p\">)],</span> <span class=\"n\">axis</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">signal</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pad</span><span class=\"p\">(</span><span class=\"n\">signal</span><span class=\"p\">,</span> <span class=\"p\">[[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">channels</span> <span class=\"o\">%</span> <span class=\"mi\">2</span><span class=\"p\">]],</span> <span class=\"s2\">&quot;constant&quot;</span><span class=\"p\">,</span> <span class=\"n\">constant_values</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mf\">0.0</span><span class=\"p\">,</span> <span class=\"mf\">0.0</span><span class=\"p\">])</span>\n        <span class=\"n\">signal</span> <span class=\"o\">=</span> <span class=\"n\">signal</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">length</span><span class=\"p\">,</span> <span class=\"n\">channels</span><span class=\"p\">])</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">from_numpy</span><span class=\"p\">(</span><span class=\"n\">signal</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">type</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"PositionalEncoding.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.encoder.html#claf.modules.encoder.positional.PositionalEncoding.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">):</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">position_encoding</span><span class=\"p\">[:,</span> <span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)]</span>\n        <span class=\"k\">return</span> <span class=\"n\">x</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/functional.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.functional &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.functional</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.functional</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    some functional codes from allennlp: https://github.com/allenai/allennlp</span>\n\n<span class=\"sd\">    - add_masked_value : replace_masked_values (allennlp)</span>\n<span class=\"sd\">    - get_mask_from_tokens : get_mask_from_tokens (allennlp)</span>\n<span class=\"sd\">    - last_dim_masked_softmax : last_dim_masked_softmax (allennlp)</span>\n<span class=\"sd\">    - masked_softmax : masked_softmax (allennlp)</span>\n<span class=\"sd\">    - weighted_sum : weighted_sum (allennlp)</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n<span class=\"kn\">from</span> <span class=\"nn\">torch.nn.utils.rnn</span> <span class=\"k\">import</span> <span class=\"n\">pack_padded_sequence</span><span class=\"p\">,</span> <span class=\"n\">pad_packed_sequence</span>\n\n\n<div class=\"viewcode-block\" id=\"add_masked_value\"><a class=\"viewcode-back\" href=\"../../../claf.modules.html#claf.modules.functional.add_masked_value\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_masked_value</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"o\">=-</span><span class=\"mf\">1e7</span><span class=\"p\">):</span>\n    <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n    <span class=\"n\">one_minus_mask</span> <span class=\"o\">=</span> <span class=\"mf\">1.0</span> <span class=\"o\">-</span> <span class=\"n\">mask</span>\n    <span class=\"n\">values_to_add</span> <span class=\"o\">=</span> <span class=\"n\">value</span> <span class=\"o\">*</span> <span class=\"n\">one_minus_mask</span>\n    <span class=\"k\">return</span> <span class=\"n\">tensor</span> <span class=\"o\">*</span> <span class=\"n\">mask</span> <span class=\"o\">+</span> <span class=\"n\">values_to_add</span></div>\n\n\n<div class=\"viewcode-block\" id=\"get_mask_from_tokens\"><a class=\"viewcode-back\" href=\"../../../claf.modules.html#claf.modules.functional.get_mask_from_tokens\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">):</span>\n    <span class=\"n\">tensor_dims</span> <span class=\"o\">=</span> <span class=\"p\">[(</span><span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">(),</span> <span class=\"n\">tensor</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">tensor</span> <span class=\"ow\">in</span> <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()]</span>\n    <span class=\"n\">tensor_dims</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">(</span><span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span>\n\n    <span class=\"n\">smallest_dim</span> <span class=\"o\">=</span> <span class=\"n\">tensor_dims</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"k\">if</span> <span class=\"n\">smallest_dim</span> <span class=\"o\">==</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n        <span class=\"n\">token_tensor</span> <span class=\"o\">=</span> <span class=\"n\">tensor_dims</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">token_tensor</span> <span class=\"o\">!=</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"n\">smallest_dim</span> <span class=\"o\">==</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n        <span class=\"n\">character_tensor</span> <span class=\"o\">=</span> <span class=\"n\">tensor_dims</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"p\">((</span><span class=\"n\">character_tensor</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Expected a tensor with dimension 2 or 3, found </span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">smallest_dim</span><span class=\"p\">))</span></div>\n\n\n<div class=\"viewcode-block\" id=\"last_dim_masked_softmax\"><a class=\"viewcode-back\" href=\"../../../claf.modules.html#claf.modules.functional.last_dim_masked_softmax\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">last_dim_masked_softmax</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">):</span>\n    <span class=\"n\">x_shape</span> <span class=\"o\">=</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()</span>\n    <span class=\"n\">reshaped_x</span> <span class=\"o\">=</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n\n    <span class=\"k\">while</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">()</span> <span class=\"o\">&lt;</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">():</span>\n        <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">expand_as</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">contiguous</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n    <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n\n    <span class=\"n\">reshaped_result</span> <span class=\"o\">=</span> <span class=\"n\">masked_softmax</span><span class=\"p\">(</span><span class=\"n\">reshaped_x</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">reshaped_result</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">x_shape</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"masked_softmax\"><a class=\"viewcode-back\" href=\"../../../claf.modules.html#claf.modules.functional.masked_softmax\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">masked_softmax</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">mask</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;mask can&#39;t be None.&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span><span class=\"n\">x</span> <span class=\"o\">*</span> <span class=\"n\">mask</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">output</span> <span class=\"o\">*</span> <span class=\"n\">mask</span>\n    <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">output</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"n\">output</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">keepdim</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mf\">1e-13</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">output</span></div>\n\n\n<div class=\"viewcode-block\" id=\"weighted_sum\"><a class=\"viewcode-back\" href=\"../../../claf.modules.html#claf.modules.functional.weighted_sum\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">weighted_sum</span><span class=\"p\">(</span><span class=\"n\">attention</span><span class=\"p\">,</span> <span class=\"n\">matrix</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">if</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"mi\">2</span> <span class=\"ow\">and</span> <span class=\"n\">matrix</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span><span class=\"n\">matrix</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"mi\">3</span> <span class=\"ow\">and</span> <span class=\"n\">matrix</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">bmm</span><span class=\"p\">(</span><span class=\"n\">matrix</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n            <span class=\"n\">f</span><span class=\"s2\">&quot;attention dim {attention.dim()} and matrix dim {matrix.dim()} operation not support. (2, 3) and (3, 3) are available dimemsion.&quot;</span>\n        <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"masked_zero\"><a class=\"viewcode-back\" href=\"../../../claf.modules.html#claf.modules.functional.masked_zero\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">masked_zero</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot; Tensor masking operation &quot;&quot;&quot;</span>\n    <span class=\"k\">while</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">()</span> <span class=\"o\">&lt;</span> <span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">():</span>\n        <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">):</span>\n        <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">ByteTensor</span><span class=\"p\">):</span>\n        <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">byte</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">LongTensor</span><span class=\"p\">):</span>\n        <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">tensor</span> <span class=\"o\">*</span> <span class=\"n\">mask</span></div>\n\n\n<div class=\"viewcode-block\" id=\"masked_log_softmax\"><a class=\"viewcode-back\" href=\"../../../claf.modules.html#claf.modules.functional.masked_log_softmax\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">masked_log_softmax</span><span class=\"p\">(</span><span class=\"n\">vector</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">if</span> <span class=\"n\">mask</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">vector</span> <span class=\"o\">=</span> <span class=\"n\">vector</span> <span class=\"o\">+</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">functional</span><span class=\"o\">.</span><span class=\"n\">log_softmax</span><span class=\"p\">(</span><span class=\"n\">vector</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"get_sorted_seq_config\"><a class=\"viewcode-back\" href=\"../../../claf.modules.html#claf.modules.functional.get_sorted_seq_config\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_sorted_seq_config</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">pad_index</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">):</span>\n    <span class=\"n\">tensor_dims</span> <span class=\"o\">=</span> <span class=\"p\">[(</span><span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">dim</span><span class=\"p\">(),</span> <span class=\"n\">tensor</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">tensor</span> <span class=\"ow\">in</span> <span class=\"n\">features</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()]</span>\n    <span class=\"n\">tensor_dims</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">(</span><span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span>\n\n    <span class=\"n\">smallest_dim</span> <span class=\"o\">=</span> <span class=\"n\">tensor_dims</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"k\">if</span> <span class=\"n\">smallest_dim</span> <span class=\"o\">==</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n        <span class=\"n\">token_tensor</span> <span class=\"o\">=</span> <span class=\"n\">tensor_dims</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;features smallest_dim must be `2` ([B, S_L]) &quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">seq_lengths</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">token_tensor</span> <span class=\"o\">&gt;</span> <span class=\"n\">pad_index</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"n\">seq_lengths</span><span class=\"p\">,</span> <span class=\"n\">perm_idx</span> <span class=\"o\">=</span> <span class=\"n\">seq_lengths</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">descending</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">unperm_idx</span> <span class=\"o\">=</span> <span class=\"n\">perm_idx</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;seq_lengths&quot;</span><span class=\"p\">:</span> <span class=\"n\">seq_lengths</span><span class=\"p\">,</span> <span class=\"s2\">&quot;perm_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">perm_idx</span><span class=\"p\">,</span> <span class=\"s2\">&quot;unperm_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">unperm_idx</span><span class=\"p\">}</span></div>\n\n\n<div class=\"viewcode-block\" id=\"forward_rnn_with_pack\"><a class=\"viewcode-back\" href=\"../../../claf.modules.html#claf.modules.functional.forward_rnn_with_pack\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">forward_rnn_with_pack</span><span class=\"p\">(</span><span class=\"n\">rnn_module</span><span class=\"p\">,</span> <span class=\"n\">tensor</span><span class=\"p\">,</span> <span class=\"n\">seq_config</span><span class=\"p\">):</span>\n    <span class=\"n\">sorted_tensor</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span><span class=\"p\">[</span><span class=\"n\">seq_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;perm_idx&quot;</span><span class=\"p\">]]</span>\n    <span class=\"n\">packed_input</span> <span class=\"o\">=</span> <span class=\"n\">pack_padded_sequence</span><span class=\"p\">(</span><span class=\"n\">sorted_tensor</span><span class=\"p\">,</span> <span class=\"n\">seq_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;seq_lengths&quot;</span><span class=\"p\">],</span> <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">packed_output</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"n\">rnn_module</span><span class=\"p\">(</span><span class=\"n\">packed_input</span><span class=\"p\">)</span>\n    <span class=\"n\">output</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"n\">pad_packed_sequence</span><span class=\"p\">(</span><span class=\"n\">packed_output</span><span class=\"p\">,</span> <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">output</span><span class=\"p\">[</span><span class=\"n\">seq_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;unperm_idx&quot;</span><span class=\"p\">]]</span>  <span class=\"c1\"># restore origin order</span>\n    <span class=\"k\">return</span> <span class=\"n\">output</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/initializer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.initializer &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.initializer</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.initializer</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"weight\"><a class=\"viewcode-back\" href=\"../../../claf.modules.html#claf.modules.initializer.weight\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">weight</span><span class=\"p\">(</span><span class=\"n\">module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    weight initialization (according to module type)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        module: torch.nn.Module</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">module</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n        <span class=\"k\">for</span> <span class=\"n\">m</span> <span class=\"ow\">in</span> <span class=\"n\">module</span><span class=\"p\">:</span>\n            <span class=\"n\">weight</span><span class=\"p\">(</span><span class=\"n\">m</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">module</span><span class=\"p\">,</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Conv2d</span><span class=\"p\">):</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;initializing Conv Layer&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"o\">.</span><span class=\"n\">uniform_</span><span class=\"p\">(</span><span class=\"n\">module</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">)</span>\n\n    <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">module</span><span class=\"p\">,</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">):</span>\n        <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"o\">.</span><span class=\"n\">xavier_uniform_</span><span class=\"p\">(</span><span class=\"n\">module</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">)</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Initializing Linear Layer&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">module</span><span class=\"p\">,</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">GRU</span><span class=\"p\">):</span>\n        <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"o\">.</span><span class=\"n\">normal_</span><span class=\"p\">(</span><span class=\"n\">module</span><span class=\"o\">.</span><span class=\"n\">weight_hh_l0</span><span class=\"p\">,</span> <span class=\"n\">std</span><span class=\"o\">=</span><span class=\"mf\">0.05</span><span class=\"p\">)</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Initializing GRU Layer&quot;</span><span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/layer/highway.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.layer.highway &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.layer.highway</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.layer.highway</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules.activation</span> <span class=\"k\">import</span> <span class=\"n\">get_activation_fn</span>\n\n\n<div class=\"viewcode-block\" id=\"Highway\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.layer.html#claf.modules.layer.highway.Highway\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Highway</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Highway Networks (https://arxiv.org/abs/1505.00387)</span>\n<span class=\"sd\">    https://github.com/allenai/allennlp/blob/master/allennlp/modules/highway.py</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        input_size: The number of expected features in the input `x`</span>\n<span class=\"sd\">        num_layers: The number of Highway layers.</span>\n<span class=\"sd\">        activation: Activation Function (ReLU is default)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">input_size</span><span class=\"p\">,</span> <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">activation</span><span class=\"o\">=</span><span class=\"s2\">&quot;relu&quot;</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">Highway</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span> <span class=\"o\">=</span> <span class=\"n\">activation</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">activation</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">str</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span> <span class=\"o\">=</span> <span class=\"n\">get_activation_fn</span><span class=\"p\">(</span><span class=\"n\">activation</span><span class=\"p\">)()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_layers</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ModuleList</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">input_size</span><span class=\"p\">,</span> <span class=\"n\">input_size</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">_</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">num_layers</span><span class=\"p\">)]</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">layer</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_layers</span><span class=\"p\">:</span>\n            <span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"p\">[</span><span class=\"n\">input_size</span><span class=\"p\">:]</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">fill_</span><span class=\"p\">(</span>\n                <span class=\"mi\">1</span>\n            <span class=\"p\">)</span>  <span class=\"c1\"># should bias the highway layer to just carry its input forward.</span>\n\n<div class=\"viewcode-block\" id=\"Highway.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.layer.html#claf.modules.layer.highway.Highway.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">):</span>\n        <span class=\"n\">current_input</span> <span class=\"o\">=</span> <span class=\"n\">x</span>\n        <span class=\"k\">for</span> <span class=\"n\">layer</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_layers</span><span class=\"p\">:</span>\n            <span class=\"n\">projected_input</span> <span class=\"o\">=</span> <span class=\"n\">layer</span><span class=\"p\">(</span><span class=\"n\">current_input</span><span class=\"p\">)</span>\n            <span class=\"n\">linear_part</span> <span class=\"o\">=</span> <span class=\"n\">current_input</span>\n\n            <span class=\"n\">nonlinear_part</span><span class=\"p\">,</span> <span class=\"n\">gate</span> <span class=\"o\">=</span> <span class=\"n\">projected_input</span><span class=\"o\">.</span><span class=\"n\">chunk</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">nonlinear_part</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span><span class=\"p\">(</span><span class=\"n\">nonlinear_part</span><span class=\"p\">)</span>\n            <span class=\"n\">gate</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sigmoid</span><span class=\"p\">(</span><span class=\"n\">gate</span><span class=\"p\">)</span>\n\n            <span class=\"n\">current_input</span> <span class=\"o\">=</span> <span class=\"n\">gate</span> <span class=\"o\">*</span> <span class=\"n\">linear_part</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">gate</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"n\">nonlinear_part</span>\n        <span class=\"k\">return</span> <span class=\"n\">current_input</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/layer/normalization.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.layer.normalization &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.layer.normalization</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.layer.normalization</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n\n<div class=\"viewcode-block\" id=\"LayerNorm\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.layer.html#claf.modules.layer.normalization.LayerNorm\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">LayerNorm</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Layer Normalization</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1607.06450)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">normalized_shape</span><span class=\"p\">,</span> <span class=\"n\">eps</span><span class=\"o\">=</span><span class=\"mf\">1e-5</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">LayerNorm</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">gamma</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">ones</span><span class=\"p\">(</span><span class=\"n\">normalized_shape</span><span class=\"p\">))</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">beta</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"n\">normalized_shape</span><span class=\"p\">))</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">eps</span> <span class=\"o\">=</span> <span class=\"n\">eps</span>\n\n<div class=\"viewcode-block\" id=\"LayerNorm.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.layer.html#claf.modules.layer.normalization.LayerNorm.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">):</span>\n        <span class=\"n\">mean</span> <span class=\"o\">=</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">mean</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">keepdim</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"n\">std</span> <span class=\"o\">=</span> <span class=\"n\">x</span><span class=\"o\">.</span><span class=\"n\">std</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">keepdim</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">gamma</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">x</span> <span class=\"o\">-</span> <span class=\"n\">mean</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"n\">std</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">eps</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">beta</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/layer/positionwise.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.layer.positionwise &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.layer.positionwise</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.layer.positionwise</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules.conv</span> <span class=\"k\">import</span> <span class=\"n\">PointwiseConv</span>\n\n\n<div class=\"viewcode-block\" id=\"PositionwiseFeedForward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.layer.html#claf.modules.layer.positionwise.PositionwiseFeedForward\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">PositionwiseFeedForward</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Pointwise Feed-Forward Layer</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        input_size: the number of input size</span>\n<span class=\"sd\">        hidden_size: the number of hidden size</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        dropout: the probability of dropout</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">input_size</span><span class=\"p\">,</span> <span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.1</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">PositionwiseFeedForward</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pointwise_conv1</span> <span class=\"o\">=</span> <span class=\"n\">PointwiseConv</span><span class=\"p\">(</span><span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">input_size</span><span class=\"p\">,</span> <span class=\"n\">num_filters</span><span class=\"o\">=</span><span class=\"n\">hidden_size</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pointwise_conv2</span> <span class=\"o\">=</span> <span class=\"n\">PointwiseConv</span><span class=\"p\">(</span><span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"n\">num_filters</span><span class=\"o\">=</span><span class=\"n\">input_size</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">relu</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"PositionwiseFeedForward.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.layer.html#claf.modules.layer.positionwise.PositionwiseFeedForward.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">):</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pointwise_conv1</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pointwise_conv2</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">x</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/layer/residual.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.layer.residual &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.layer.residual</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.layer.residual</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules.layer.normalization</span> <span class=\"k\">import</span> <span class=\"n\">LayerNorm</span>\n\n\n<div class=\"viewcode-block\" id=\"ResidualConnection\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.layer.html#claf.modules.layer.residual.ResidualConnection\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ResidualConnection</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    ResidualConnection</span>\n<span class=\"sd\">        in Deep Residual Learning for Image Recognition (https://arxiv.org/abs/1512.03385)</span>\n\n<span class=\"sd\">    =&gt; f(x) + x</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        dim: the number of dimension</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        layer_dropout: layer dropout probability (stochastic depth)</span>\n<span class=\"sd\">        dropout: dropout probability</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"p\">,</span> <span class=\"n\">layer_dropout</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">layernorm</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">ResidualConnection</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">survival</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"n\">layer_dropout</span> <span class=\"o\">&lt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">survival</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">([</span><span class=\"n\">layer_dropout</span><span class=\"p\">])</span>\n        <span class=\"k\">if</span> <span class=\"n\">layernorm</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">norm</span> <span class=\"o\">=</span> <span class=\"n\">LayerNorm</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">norm</span> <span class=\"o\">=</span> <span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span>\n\n<div class=\"viewcode-block\" id=\"ResidualConnection.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.layer.html#claf.modules.layer.residual.ResidualConnection.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">sub_layer_fn</span><span class=\"p\">):</span>\n        <span class=\"c1\"># implementation of stochastic depth</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">survival</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">survival_prob</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">bernoulli</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">survival</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">item</span><span class=\"p\">()</span>\n            <span class=\"k\">if</span> <span class=\"n\">survival_prob</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"n\">sub_layer_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">norm</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">))</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">x</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"n\">sub_layer_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">norm</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">))</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/modules/layer/scalar_mix.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.layer.scalar_mix &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.modules.layer.scalar_mix</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.modules.layer.scalar_mix</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">This code is from allenai/allennlp</span>\n<span class=\"sd\">(https://github.com/allenai/allennlp/blob/master/allennlp/modules/scalar_mix.py)</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">typing</span> <span class=\"k\">import</span> <span class=\"n\">List</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">from</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">import</span> <span class=\"n\">ParameterList</span><span class=\"p\">,</span> <span class=\"n\">Parameter</span>\n\n\n<div class=\"viewcode-block\" id=\"ScalarMix\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.layer.html#claf.modules.layer.scalar_mix.ScalarMix\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ScalarMix</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Computes a parameterised scalar mixture of N tensors, ``mixture = gamma * sum(s_k * tensor_k)``</span>\n<span class=\"sd\">    where ``s = softmax(w)``, with ``w`` and ``gamma`` scalar parameters.</span>\n<span class=\"sd\">    In addition, if ``do_layer_norm=True`` then apply layer normalization to each tensor</span>\n<span class=\"sd\">    before weighting.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">mixture_size</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n        <span class=\"n\">do_layer_norm</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">initial_scalar_parameters</span><span class=\"p\">:</span> <span class=\"n\">List</span><span class=\"p\">[</span><span class=\"nb\">float</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">trainable</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">ScalarMix</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mixture_size</span> <span class=\"o\">=</span> <span class=\"n\">mixture_size</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">do_layer_norm</span> <span class=\"o\">=</span> <span class=\"n\">do_layer_norm</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">initial_scalar_parameters</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">initial_scalar_parameters</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mf\">0.0</span><span class=\"p\">]</span> <span class=\"o\">*</span> <span class=\"n\">mixture_size</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">initial_scalar_parameters</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"n\">mixture_size</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;Length of initial_scalar_parameters </span><span class=\"si\">{}</span><span class=\"s2\"> differs &quot;</span>\n                <span class=\"s2\">&quot;from mixture_size </span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">initial_scalar_parameters</span><span class=\"p\">,</span> <span class=\"n\">mixture_size</span><span class=\"p\">)</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">scalar_parameters</span> <span class=\"o\">=</span> <span class=\"n\">ParameterList</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span>\n                <span class=\"n\">Parameter</span><span class=\"p\">(</span>\n                    <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">([</span><span class=\"n\">initial_scalar_parameters</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]]),</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"n\">trainable</span>\n                <span class=\"p\">)</span>\n                <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">mixture_size</span><span class=\"p\">)</span>\n            <span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">gamma</span> <span class=\"o\">=</span> <span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">([</span><span class=\"mf\">1.0</span><span class=\"p\">]),</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"n\">trainable</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"ScalarMix.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.modules.layer.html#claf.modules.layer.scalar_mix.ScalarMix.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">tensors</span><span class=\"p\">:</span> <span class=\"n\">List</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">],</span>  <span class=\"c1\"># pylint: disable=arguments-differ</span>\n        <span class=\"n\">mask</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">:</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Compute a weighted average of the ``tensors``.  The input tensors an be any shape</span>\n<span class=\"sd\">        with at least two dimensions, but must all be the same shape.</span>\n<span class=\"sd\">        When ``do_layer_norm=True``, the ``mask`` is required input.  If the ``tensors`` are</span>\n<span class=\"sd\">        dimensioned  ``(dim_0, ..., dim_{n-1}, dim_n)``, then the ``mask`` is dimensioned</span>\n<span class=\"sd\">        ``(dim_0, ..., dim_{n-1})``, as in the typical case with ``tensors`` of shape</span>\n<span class=\"sd\">        ``(batch_size, timesteps, dim)`` and ``mask`` of shape ``(batch_size, timesteps)``.</span>\n<span class=\"sd\">        When ``do_layer_norm=False`` the ``mask`` is ignored.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tensors</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mixture_size</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;</span><span class=\"si\">{}</span><span class=\"s2\"> tensors were passed, but the module was initialized to &quot;</span>\n                <span class=\"s2\">&quot;mix </span><span class=\"si\">{}</span><span class=\"s2\"> tensors.&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tensors</span><span class=\"p\">),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mixture_size</span><span class=\"p\">)</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">_do_layer_norm</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"p\">,</span> <span class=\"n\">broadcast_mask</span><span class=\"p\">,</span> <span class=\"n\">num_elements_not_masked</span><span class=\"p\">):</span>\n            <span class=\"n\">tensor_masked</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span> <span class=\"o\">*</span> <span class=\"n\">broadcast_mask</span>\n            <span class=\"n\">mean</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">tensor_masked</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"n\">num_elements_not_masked</span>\n            <span class=\"n\">variance</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n                <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(((</span><span class=\"n\">tensor_masked</span> <span class=\"o\">-</span> <span class=\"n\">mean</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"n\">broadcast_mask</span><span class=\"p\">)</span> <span class=\"o\">**</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"n\">num_elements_not_masked</span>\n            <span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">tensor</span> <span class=\"o\">-</span> <span class=\"n\">mean</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"n\">variance</span> <span class=\"o\">+</span> <span class=\"mf\">1E-12</span><span class=\"p\">)</span>\n\n        <span class=\"n\">normed_weights</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">functional</span><span class=\"o\">.</span><span class=\"n\">softmax</span><span class=\"p\">(</span>\n            <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">parameter</span> <span class=\"k\">for</span> <span class=\"n\">parameter</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">scalar_parameters</span><span class=\"p\">]),</span> <span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">0</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">normed_weights</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"n\">normed_weights</span><span class=\"p\">,</span> <span class=\"n\">split_size_or_sections</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">do_layer_norm</span><span class=\"p\">:</span>\n            <span class=\"n\">pieces</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"k\">for</span> <span class=\"n\">weight</span><span class=\"p\">,</span> <span class=\"n\">tensor</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">normed_weights</span><span class=\"p\">,</span> <span class=\"n\">tensors</span><span class=\"p\">):</span>\n                <span class=\"n\">pieces</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">weight</span> <span class=\"o\">*</span> <span class=\"n\">tensor</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">gamma</span> <span class=\"o\">*</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">pieces</span><span class=\"p\">)</span>\n\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">mask_float</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n            <span class=\"n\">broadcast_mask</span> <span class=\"o\">=</span> <span class=\"n\">mask_float</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">input_dim</span> <span class=\"o\">=</span> <span class=\"n\">tensors</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">num_elements_not_masked</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">mask_float</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"n\">input_dim</span>\n\n            <span class=\"n\">pieces</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"k\">for</span> <span class=\"n\">weight</span><span class=\"p\">,</span> <span class=\"n\">tensor</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">normed_weights</span><span class=\"p\">,</span> <span class=\"n\">tensors</span><span class=\"p\">):</span>\n                <span class=\"n\">pieces</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span>\n                    <span class=\"n\">weight</span> <span class=\"o\">*</span> <span class=\"n\">_do_layer_norm</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"p\">,</span> <span class=\"n\">broadcast_mask</span><span class=\"p\">,</span> <span class=\"n\">num_elements_not_masked</span><span class=\"p\">)</span>\n                <span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">gamma</span> <span class=\"o\">*</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">pieces</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/cove.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.cove &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.cove</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.cove</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">This code is from salesforce/cove</span>\n<span class=\"sd\">(https://github.com/salesforce/cove/blob/master/cove/encoder.py)</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">from</span> <span class=\"nn\">torch</span> <span class=\"k\">import</span> <span class=\"n\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span><span class=\"p\">,</span> <span class=\"n\">DataHandler</span>\n\n\n<div class=\"viewcode-block\" id=\"MTLSTM\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.cove.MTLSTM\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">MTLSTM</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">word_embedding</span><span class=\"p\">,</span> <span class=\"n\">pretrained_path</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">residual_embeddings</span><span class=\"o\">=</span><span class=\"kc\">False</span>\n    <span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Initialize an MTLSTM.</span>\n\n<span class=\"sd\">        Arguments:</span>\n<span class=\"sd\">            n_vocab (bool): If not None, initialize MTLSTM with an embedding matrix with n_vocab vectors</span>\n<span class=\"sd\">            vectors (Float Tensor): If not None, initiapize embedding matrix with specified vectors</span>\n<span class=\"sd\">            residual_embedding (bool): If True, concatenate the input embeddings with MTLSTM outputs during forward</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">MTLSTM</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_embedding</span> <span class=\"o\">=</span> <span class=\"n\">word_embedding</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">rnn</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">LSTM</span><span class=\"p\">(</span><span class=\"mi\">300</span><span class=\"p\">,</span> <span class=\"mi\">300</span><span class=\"p\">,</span> <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">bidirectional</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"n\">data_handler</span> <span class=\"o\">=</span> <span class=\"n\">DataHandler</span><span class=\"p\">(</span><span class=\"n\">cache_path</span><span class=\"o\">=</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">PRETRAINED_VECTOR</span><span class=\"p\">)</span>\n        <span class=\"n\">cove_weight_path</span> <span class=\"o\">=</span> <span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">pretrained_path</span><span class=\"p\">,</span> <span class=\"n\">return_path</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"o\">.</span><span class=\"n\">is_available</span><span class=\"p\">():</span>\n            <span class=\"n\">checkpoint</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">cove_weight_path</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">checkpoint</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">cove_weight_path</span><span class=\"p\">,</span> <span class=\"n\">map_location</span><span class=\"o\">=</span><span class=\"s2\">&quot;cpu&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">rnn</span><span class=\"o\">.</span><span class=\"n\">load_state_dict</span><span class=\"p\">(</span><span class=\"n\">checkpoint</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">residual_embeddings</span> <span class=\"o\">=</span> <span class=\"n\">residual_embeddings</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"n\">requires_grad</span>\n\n<div class=\"viewcode-block\" id=\"MTLSTM.forward\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.cove.MTLSTM.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;A pretrained MT-LSTM (McCann et. al. 2017).</span>\n<span class=\"sd\">        This LSTM was trained with 300d 840B GloVe on the WMT 2017 machine translation dataset.</span>\n\n<span class=\"sd\">        Arguments:</span>\n<span class=\"sd\">            inputs (Tensor): If MTLSTM handles embedding, a Long Tensor of size (batch_size, timesteps).</span>\n<span class=\"sd\">                             Otherwise, a Float Tensor of size (batch_size, timesteps, features).</span>\n<span class=\"sd\">            lengths (Long Tensor): (batch_size, lengths) lenghts of each sequence for handling padding</span>\n<span class=\"sd\">            hidden (Float Tensor): initial hidden state of the LSTM</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">embedded_inputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_embedding</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">)</span>\n        <span class=\"n\">encoded_inputs</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">rnn</span><span class=\"p\">(</span><span class=\"n\">embedded_inputs</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span><span class=\"p\">:</span>\n            <span class=\"n\">encoded_inputs</span><span class=\"o\">.</span><span class=\"n\">detach</span><span class=\"p\">()</span>\n\n        <span class=\"n\">outputs</span> <span class=\"o\">=</span> <span class=\"n\">encoded_inputs</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">residual_embeddings</span><span class=\"p\">:</span>\n            <span class=\"n\">outputs</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">embedded_inputs</span><span class=\"p\">,</span> <span class=\"n\">encoded_inputs</span><span class=\"p\">],</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">outputs</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/elmo.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.elmo &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.elmo</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.elmo</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">This code is from allenai/allennlp</span>\n<span class=\"sd\">(https://github.com/allenai/allennlp/blob/master/allennlp/modules/elmo.py)</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">from</span> <span class=\"nn\">typing</span> <span class=\"k\">import</span> <span class=\"n\">Union</span><span class=\"p\">,</span> <span class=\"n\">List</span><span class=\"p\">,</span> <span class=\"n\">Dict</span><span class=\"p\">,</span> <span class=\"n\">Any</span><span class=\"p\">,</span> <span class=\"n\">Optional</span><span class=\"p\">,</span> <span class=\"n\">Tuple</span>\n<span class=\"kn\">import</span> <span class=\"nn\">warnings</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">from</span> <span class=\"nn\">torch.nn.utils.rnn</span> <span class=\"k\">import</span> <span class=\"n\">PackedSequence</span><span class=\"p\">,</span> <span class=\"n\">pad_packed_sequence</span>\n<span class=\"kn\">from</span> <span class=\"nn\">torch.nn.modules</span> <span class=\"k\">import</span> <span class=\"n\">Dropout</span>\n\n\n<span class=\"k\">with</span> <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">catch_warnings</span><span class=\"p\">():</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">filterwarnings</span><span class=\"p\">(</span><span class=\"s2\">&quot;ignore&quot;</span><span class=\"p\">,</span> <span class=\"n\">category</span><span class=\"o\">=</span><span class=\"ne\">FutureWarning</span><span class=\"p\">)</span>\n    <span class=\"kn\">import</span> <span class=\"nn\">h5py</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules.layer</span> <span class=\"k\">import</span> <span class=\"n\">Highway</span><span class=\"p\">,</span> <span class=\"n\">ScalarMix</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules.encoder</span> <span class=\"k\">import</span> <span class=\"n\">_EncoderBase</span><span class=\"p\">,</span> <span class=\"n\">LstmCellWithProjection</span>\n\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>  <span class=\"c1\"># pylint: disable=invalid-name</span>\n\n<span class=\"c1\"># pylint: disable=attribute-defined-outside-init</span>\n\n\n<div class=\"viewcode-block\" id=\"Elmo\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.elmo.Elmo\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Elmo</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Compute ELMo representations using a pre-trained bidirectional language model.</span>\n<span class=\"sd\">    See &quot;Deep contextualized word representations&quot;, Peters et al. for details.</span>\n<span class=\"sd\">    This module takes character id input and computes ``num_output_representations`` different layers</span>\n<span class=\"sd\">    of ELMo representations.  Typically ``num_output_representations`` is 1 or 2.  For example, in</span>\n<span class=\"sd\">    the case of the SRL model in the above paper, ``num_output_representations=1`` where ELMo was included at</span>\n<span class=\"sd\">    the input token representation layer.  In the case of the SQuAD model, ``num_output_representations=2``</span>\n<span class=\"sd\">    as ELMo was also included at the GRU output layer.</span>\n<span class=\"sd\">    In the implementation below, we learn separate scalar weights for each output layer,</span>\n<span class=\"sd\">    but only run the biLM once on each input sequence for efficiency.</span>\n<span class=\"sd\">    Parameters</span>\n<span class=\"sd\">    ----------</span>\n<span class=\"sd\">    options_file : ``str``, required.</span>\n<span class=\"sd\">        ELMo JSON options file</span>\n<span class=\"sd\">    weight_file : ``str``, required.</span>\n<span class=\"sd\">        ELMo hdf5 weight file</span>\n<span class=\"sd\">    num_output_representations: ``int``, required.</span>\n<span class=\"sd\">        The number of ELMo representation layers to output.</span>\n<span class=\"sd\">    requires_grad: ``bool``, optional</span>\n<span class=\"sd\">        If True, compute gradient of ELMo parameters for fine tuning.</span>\n<span class=\"sd\">    do_layer_norm : ``bool``, optional, (default=False).</span>\n<span class=\"sd\">        Should we apply layer normalization (passed to ``ScalarMix``)?</span>\n<span class=\"sd\">    dropout : ``float``, optional, (default = 0.5).</span>\n<span class=\"sd\">        The dropout to be applied to the ELMo representations.</span>\n<span class=\"sd\">    vocab_to_cache : ``List[str]``, optional, (default = 0.5).</span>\n<span class=\"sd\">        A list of words to pre-compute and cache character convolutions</span>\n<span class=\"sd\">        for. If you use this option, Elmo expects that you pass word</span>\n<span class=\"sd\">        indices of shape (batch_size, timesteps) to forward, instead</span>\n<span class=\"sd\">        of character indices. If you use this option and pass a word which</span>\n<span class=\"sd\">        wasn&#39;t pre-cached, this will break.</span>\n<span class=\"sd\">    module : ``torch.nn.Module``, optional, (default = None).</span>\n<span class=\"sd\">        If provided, then use this module instead of the pre-trained ELMo biLM.</span>\n<span class=\"sd\">        If using this option, then pass ``None`` for both ``options_file``</span>\n<span class=\"sd\">        and ``weight_file``.  The module must provide a public attribute</span>\n<span class=\"sd\">        ``num_layers`` with the number of internal layers and its ``forward``</span>\n<span class=\"sd\">        method must return a ``dict`` with ``activations`` and ``mask`` keys</span>\n<span class=\"sd\">        (see `_ElmoBilm`` for an example).  Note that ``requires_grad`` is also</span>\n<span class=\"sd\">        ignored with this option.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">options_file</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">,</span>\n        <span class=\"n\">weight_file</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">,</span>\n        <span class=\"n\">num_output_representations</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n        <span class=\"n\">requires_grad</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">do_layer_norm</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.5</span><span class=\"p\">,</span>\n        <span class=\"n\">vocab_to_cache</span><span class=\"p\">:</span> <span class=\"n\">List</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">module</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">Elmo</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Initializing ELMo&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">module</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">options_file</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span> <span class=\"ow\">or</span> <span class=\"n\">weight_file</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Don&#39;t provide options_file or weight_file with module&quot;</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_elmo_lstm</span> <span class=\"o\">=</span> <span class=\"n\">module</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_elmo_lstm</span> <span class=\"o\">=</span> <span class=\"n\">_ElmoBiLm</span><span class=\"p\">(</span>\n                <span class=\"n\">options_file</span><span class=\"p\">,</span>\n                <span class=\"n\">weight_file</span><span class=\"p\">,</span>\n                <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"n\">requires_grad</span><span class=\"p\">,</span>\n                <span class=\"n\">vocab_to_cache</span><span class=\"o\">=</span><span class=\"n\">vocab_to_cache</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_has_cached_vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab_to_cache</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dropout</span> <span class=\"o\">=</span> <span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_scalar_mixes</span><span class=\"p\">:</span> <span class=\"n\">Any</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">num_output_representations</span><span class=\"p\">):</span>\n            <span class=\"n\">scalar_mix</span> <span class=\"o\">=</span> <span class=\"n\">ScalarMix</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_elmo_lstm</span><span class=\"o\">.</span><span class=\"n\">num_layers</span><span class=\"p\">,</span> <span class=\"n\">do_layer_norm</span><span class=\"o\">=</span><span class=\"n\">do_layer_norm</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add_module</span><span class=\"p\">(</span><span class=\"s2\">&quot;scalar_mix_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">),</span> <span class=\"n\">scalar_mix</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_scalar_mixes</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">scalar_mix</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Elmo.get_output_dim\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.elmo.Elmo.get_output_dim\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_elmo_lstm</span><span class=\"o\">.</span><span class=\"n\">get_output_dim</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"Elmo.forward\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.elmo.Elmo.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">inputs</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span>\n        <span class=\"n\">word_inputs</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>  <span class=\"c1\"># pylint: disable=arguments-differ</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">Dict</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">Union</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">List</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">]]]:</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Parameters</span>\n<span class=\"sd\">        ----------</span>\n<span class=\"sd\">        inputs: ``torch.Tensor``, required.</span>\n<span class=\"sd\">        Shape ``(batch_size, timesteps, 50)`` of character ids representing the current batch.</span>\n<span class=\"sd\">        word_inputs : ``torch.Tensor``, required.</span>\n<span class=\"sd\">            If you passed a cached vocab, you can in addition pass a tensor of shape</span>\n<span class=\"sd\">            ``(batch_size, timesteps)``, which represent word ids which have been pre-cached.</span>\n<span class=\"sd\">        Returns</span>\n<span class=\"sd\">        -------</span>\n<span class=\"sd\">        Dict with keys:</span>\n<span class=\"sd\">        ``&#39;elmo_representations&#39;``: ``List[torch.Tensor]``</span>\n<span class=\"sd\">            A ``num_output_representations`` list of ELMo representations for the input sequence.</span>\n<span class=\"sd\">            Each representation is shape ``(batch_size, timesteps, embedding_dim)``</span>\n<span class=\"sd\">        ``&#39;mask&#39;``:  ``torch.Tensor``</span>\n<span class=\"sd\">            Shape ``(batch_size, timesteps)`` long tensor with sequence mask.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># reshape the input if needed</span>\n        <span class=\"n\">original_shape</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">original_shape</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n            <span class=\"n\">timesteps</span><span class=\"p\">,</span> <span class=\"n\">num_characters</span> <span class=\"o\">=</span> <span class=\"n\">original_shape</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">:]</span>\n            <span class=\"n\">reshaped_inputs</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">timesteps</span><span class=\"p\">,</span> <span class=\"n\">num_characters</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">reshaped_inputs</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">word_inputs</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">original_word_size</span> <span class=\"o\">=</span> <span class=\"n\">word_inputs</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_has_cached_vocab</span> <span class=\"ow\">and</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">original_word_size</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n                <span class=\"n\">reshaped_word_inputs</span> <span class=\"o\">=</span> <span class=\"n\">word_inputs</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">original_word_size</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n                <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span>\n                    <span class=\"s2\">&quot;Word inputs were passed to ELMo but it does not have a cached vocab.&quot;</span>\n                <span class=\"p\">)</span>\n                <span class=\"n\">reshaped_word_inputs</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">reshaped_word_inputs</span> <span class=\"o\">=</span> <span class=\"n\">word_inputs</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">reshaped_word_inputs</span> <span class=\"o\">=</span> <span class=\"n\">word_inputs</span>\n\n        <span class=\"c1\"># run the biLM</span>\n        <span class=\"n\">bilm_output</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_elmo_lstm</span><span class=\"p\">(</span><span class=\"n\">reshaped_inputs</span><span class=\"p\">,</span> <span class=\"n\">reshaped_word_inputs</span><span class=\"p\">)</span>\n        <span class=\"n\">layer_activations</span> <span class=\"o\">=</span> <span class=\"n\">bilm_output</span><span class=\"p\">[</span><span class=\"s2\">&quot;activations&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">mask_with_bos_eos</span> <span class=\"o\">=</span> <span class=\"n\">bilm_output</span><span class=\"p\">[</span><span class=\"s2\">&quot;mask&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># compute the elmo representations</span>\n        <span class=\"n\">representations</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_scalar_mixes</span><span class=\"p\">)):</span>\n            <span class=\"n\">scalar_mix</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s2\">&quot;scalar_mix_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">))</span>\n            <span class=\"n\">representation_with_bos_eos</span> <span class=\"o\">=</span> <span class=\"n\">scalar_mix</span><span class=\"p\">(</span><span class=\"n\">layer_activations</span><span class=\"p\">,</span> <span class=\"n\">mask_with_bos_eos</span><span class=\"p\">)</span>\n            <span class=\"n\">representation_without_bos_eos</span><span class=\"p\">,</span> <span class=\"n\">mask_without_bos_eos</span> <span class=\"o\">=</span> <span class=\"n\">remove_sentence_boundaries</span><span class=\"p\">(</span>\n                <span class=\"n\">representation_with_bos_eos</span><span class=\"p\">,</span> <span class=\"n\">mask_with_bos_eos</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">representations</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_dropout</span><span class=\"p\">(</span><span class=\"n\">representation_without_bos_eos</span><span class=\"p\">))</span>\n\n        <span class=\"c1\"># reshape if necessary</span>\n        <span class=\"k\">if</span> <span class=\"n\">word_inputs</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span> <span class=\"ow\">and</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">original_word_size</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n            <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask_without_bos_eos</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">original_word_size</span><span class=\"p\">)</span>\n            <span class=\"n\">elmo_representations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                <span class=\"n\">representation</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">original_word_size</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,))</span>\n                <span class=\"k\">for</span> <span class=\"n\">representation</span> <span class=\"ow\">in</span> <span class=\"n\">representations</span>\n            <span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">original_shape</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n            <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask_without_bos_eos</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">original_shape</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n            <span class=\"n\">elmo_representations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                <span class=\"n\">representation</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">original_shape</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,))</span>\n                <span class=\"k\">for</span> <span class=\"n\">representation</span> <span class=\"ow\">in</span> <span class=\"n\">representations</span>\n            <span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">mask_without_bos_eos</span>\n            <span class=\"n\">elmo_representations</span> <span class=\"o\">=</span> <span class=\"n\">representations</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;elmo_representations&quot;</span><span class=\"p\">:</span> <span class=\"n\">elmo_representations</span><span class=\"p\">,</span> <span class=\"s2\">&quot;mask&quot;</span><span class=\"p\">:</span> <span class=\"n\">mask</span><span class=\"p\">}</span></div>\n\n<div class=\"viewcode-block\" id=\"Elmo.from_params\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.elmo.Elmo.from_params\">[docs]</a>    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span> <span class=\"nf\">from_params</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"s2\">&quot;Elmo&quot;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Add files to archive</span>\n        <span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">add_file_to_archive</span><span class=\"p\">(</span><span class=\"s2\">&quot;options_file&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">add_file_to_archive</span><span class=\"p\">(</span><span class=\"s2\">&quot;weight_file&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">options_file</span> <span class=\"o\">=</span> <span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;options_file&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">weight_file</span> <span class=\"o\">=</span> <span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;weight_file&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;requires_grad&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">num_output_representations</span> <span class=\"o\">=</span> <span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_output_representations&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">do_layer_norm</span> <span class=\"o\">=</span> <span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">pop_bool</span><span class=\"p\">(</span><span class=\"s2\">&quot;do_layer_norm&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">pop_float</span><span class=\"p\">(</span><span class=\"s2\">&quot;dropout&quot;</span><span class=\"p\">,</span> <span class=\"mf\">0.5</span><span class=\"p\">)</span>\n        <span class=\"n\">params</span><span class=\"o\">.</span><span class=\"n\">assert_empty</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">cls</span><span class=\"p\">(</span>\n            <span class=\"n\">options_file</span><span class=\"o\">=</span><span class=\"n\">options_file</span><span class=\"p\">,</span>\n            <span class=\"n\">weight_file</span><span class=\"o\">=</span><span class=\"n\">weight_file</span><span class=\"p\">,</span>\n            <span class=\"n\">num_output_representations</span><span class=\"o\">=</span><span class=\"n\">num_output_representations</span><span class=\"p\">,</span>\n            <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"n\">requires_grad</span><span class=\"p\">,</span>\n            <span class=\"n\">do_layer_norm</span><span class=\"o\">=</span><span class=\"n\">do_layer_norm</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"remove_sentence_boundaries\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.elmo.remove_sentence_boundaries\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">remove_sentence_boundaries</span><span class=\"p\">(</span>\n    <span class=\"n\">tensor</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span>\n<span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">]:</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Remove begin/end of sentence embeddings from the batch of sentences.</span>\n<span class=\"sd\">    Given a batch of sentences with size ``(batch_size, timesteps, dim)``</span>\n<span class=\"sd\">    this returns a tensor of shape ``(batch_size, timesteps - 2, dim)`` after removing</span>\n<span class=\"sd\">    the beginning and end sentence markers.  The sentences are assumed to be padded on the right,</span>\n<span class=\"sd\">    with the beginning of each sentence assumed to occur at index 0 (i.e., ``mask[:, 0]`` is assumed</span>\n<span class=\"sd\">    to be 1).</span>\n<span class=\"sd\">    Returns both the new tensor and updated mask.</span>\n<span class=\"sd\">    This function is the inverse of ``add_sentence_boundary_token_ids``.</span>\n<span class=\"sd\">    Parameters</span>\n<span class=\"sd\">    ----------</span>\n<span class=\"sd\">    tensor : ``torch.Tensor``</span>\n<span class=\"sd\">        A tensor of shape ``(batch_size, timesteps, dim)``</span>\n<span class=\"sd\">    mask : ``torch.Tensor``</span>\n<span class=\"sd\">         A tensor of shape ``(batch_size, timesteps)``</span>\n<span class=\"sd\">    Returns</span>\n<span class=\"sd\">    -------</span>\n<span class=\"sd\">    tensor_without_boundary_tokens : ``torch.Tensor``</span>\n<span class=\"sd\">        The tensor after removing the boundary tokens of shape ``(batch_size, timesteps - 2, dim)``</span>\n<span class=\"sd\">    new_mask : ``torch.Tensor``</span>\n<span class=\"sd\">        The new mask for the tensor of shape ``(batch_size, timesteps - 2)``.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># TODO: matthewp, profile this transfer</span>\n    <span class=\"n\">sequence_lengths</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">detach</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">cpu</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">numpy</span><span class=\"p\">()</span>\n    <span class=\"n\">tensor_shape</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">shape</span><span class=\"p\">)</span>\n    <span class=\"n\">new_shape</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">tensor_shape</span><span class=\"p\">)</span>\n    <span class=\"n\">new_shape</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">tensor_shape</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mi\">2</span>\n    <span class=\"n\">tensor_without_boundary_tokens</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">new_zeros</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">new_shape</span><span class=\"p\">)</span>\n    <span class=\"n\">new_mask</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">new_zeros</span><span class=\"p\">((</span><span class=\"n\">new_shape</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">new_shape</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]),</span> <span class=\"n\">dtype</span><span class=\"o\">=</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">sequence_lengths</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">j</span> <span class=\"o\">&gt;</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n            <span class=\"n\">tensor_without_boundary_tokens</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"n\">j</span> <span class=\"o\">-</span> <span class=\"mi\">2</span><span class=\"p\">),</span> <span class=\"p\">:]</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"mi\">1</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"n\">j</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">),</span> <span class=\"p\">:]</span>\n            <span class=\"n\">new_mask</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"n\">j</span> <span class=\"o\">-</span> <span class=\"mi\">2</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">tensor_without_boundary_tokens</span><span class=\"p\">,</span> <span class=\"n\">new_mask</span></div>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_ElmoBiLm</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Run a pre-trained bidirectional language model, outputing the activations at each</span>\n<span class=\"sd\">    layer for weighting together into an ELMo representation (with</span>\n<span class=\"sd\">    ``allennlp.modules.seq2seq_encoders.Elmo``).  This is a lower level class, useful</span>\n<span class=\"sd\">    for advanced uses, but most users should use ``allennlp.modules.seq2seq_encoders.Elmo``</span>\n<span class=\"sd\">    directly.</span>\n<span class=\"sd\">    Parameters</span>\n<span class=\"sd\">    ----------</span>\n<span class=\"sd\">    options_file : ``str``</span>\n<span class=\"sd\">        ELMo JSON options file</span>\n<span class=\"sd\">    weight_file : ``str``</span>\n<span class=\"sd\">        ELMo hdf5 weight file</span>\n<span class=\"sd\">    requires_grad: ``bool``, optional</span>\n<span class=\"sd\">        If True, compute gradient of ELMo parameters for fine tuning.</span>\n<span class=\"sd\">    vocab_to_cache : ``List[str]``, optional, (default = 0.5).</span>\n<span class=\"sd\">        A list of words to pre-compute and cache character convolutions</span>\n<span class=\"sd\">        for. If you use this option, _ElmoBiLm expects that you pass word</span>\n<span class=\"sd\">        indices of shape (batch_size, timesteps) to forward, instead</span>\n<span class=\"sd\">        of character indices. If you use this option and pass a word which</span>\n<span class=\"sd\">        wasn&#39;t pre-cached, this will break.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">options_file</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">,</span>\n        <span class=\"n\">weight_file</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">,</span>\n        <span class=\"n\">requires_grad</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">vocab_to_cache</span><span class=\"p\">:</span> <span class=\"n\">List</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">_ElmoBiLm</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_token_embedder</span> <span class=\"o\">=</span> <span class=\"n\">_ElmoCharacterEncoder</span><span class=\"p\">(</span>\n            <span class=\"n\">options_file</span><span class=\"p\">,</span> <span class=\"n\">weight_file</span><span class=\"p\">,</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"n\">requires_grad</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_requires_grad</span> <span class=\"o\">=</span> <span class=\"n\">requires_grad</span>\n        <span class=\"k\">if</span> <span class=\"n\">requires_grad</span> <span class=\"ow\">and</span> <span class=\"n\">vocab_to_cache</span><span class=\"p\">:</span>\n            <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;You are fine tuning ELMo and caching char CNN word vectors. &quot;</span>\n                <span class=\"s2\">&quot;This behaviour is not guaranteed to be well defined, particularly. &quot;</span>\n                <span class=\"s2\">&quot;if not all of your inputs will occur in the vocabulary cache.&quot;</span>\n            <span class=\"p\">)</span>\n        <span class=\"c1\"># This is an embedding, used to look up cached</span>\n        <span class=\"c1\"># word vectors built from character level cnn embeddings.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_word_embedding</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_bos_embedding</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_eos_embedding</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">options_file</span><span class=\"p\">,</span> <span class=\"s2\">&quot;r&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fin</span><span class=\"p\">:</span>\n            <span class=\"n\">options</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">fin</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">options</span><span class=\"p\">[</span><span class=\"s2\">&quot;lstm&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;use_skip_connections&quot;</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;We only support pretrained biLMs with residual connections&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_elmo_lstm</span> <span class=\"o\">=</span> <span class=\"n\">ElmoLstm</span><span class=\"p\">(</span>\n            <span class=\"n\">input_size</span><span class=\"o\">=</span><span class=\"n\">options</span><span class=\"p\">[</span><span class=\"s2\">&quot;lstm&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;projection_dim&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">hidden_size</span><span class=\"o\">=</span><span class=\"n\">options</span><span class=\"p\">[</span><span class=\"s2\">&quot;lstm&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;projection_dim&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">cell_size</span><span class=\"o\">=</span><span class=\"n\">options</span><span class=\"p\">[</span><span class=\"s2\">&quot;lstm&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;dim&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">num_layers</span><span class=\"o\">=</span><span class=\"n\">options</span><span class=\"p\">[</span><span class=\"s2\">&quot;lstm&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;n_layers&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">memory_cell_clip_value</span><span class=\"o\">=</span><span class=\"n\">options</span><span class=\"p\">[</span><span class=\"s2\">&quot;lstm&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;cell_clip&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">state_projection_clip_value</span><span class=\"o\">=</span><span class=\"n\">options</span><span class=\"p\">[</span><span class=\"s2\">&quot;lstm&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;proj_clip&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"n\">requires_grad</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_elmo_lstm</span><span class=\"o\">.</span><span class=\"n\">load_weights</span><span class=\"p\">(</span><span class=\"n\">weight_file</span><span class=\"p\">)</span>\n        <span class=\"c1\"># Number of representation layers including context independent layer</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_layers</span> <span class=\"o\">=</span> <span class=\"n\">options</span><span class=\"p\">[</span><span class=\"s2\">&quot;lstm&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;n_layers&quot;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_token_embedder</span><span class=\"o\">.</span><span class=\"n\">get_output_dim</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">inputs</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span>\n        <span class=\"n\">word_inputs</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>  <span class=\"c1\"># pylint: disable=arguments-differ</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">Dict</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">Union</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">List</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">]]]:</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Parameters</span>\n<span class=\"sd\">        ----------</span>\n<span class=\"sd\">        inputs: ``torch.Tensor``, required.</span>\n<span class=\"sd\">            Shape ``(batch_size, timesteps, 50)`` of character ids representing the current batch.</span>\n<span class=\"sd\">        word_inputs : ``torch.Tensor``, required.</span>\n<span class=\"sd\">            If you passed a cached vocab, you can in addition pass a tensor of shape ``(batch_size, timesteps)``,</span>\n<span class=\"sd\">            which represent word ids which have been pre-cached.</span>\n<span class=\"sd\">        Returns</span>\n<span class=\"sd\">        -------</span>\n<span class=\"sd\">        Dict with keys:</span>\n<span class=\"sd\">        ``&#39;activations&#39;``: ``List[torch.Tensor]``</span>\n<span class=\"sd\">            A list of activations at each layer of the network, each of shape</span>\n<span class=\"sd\">            ``(batch_size, timesteps + 2, embedding_dim)``</span>\n<span class=\"sd\">        ``&#39;mask&#39;``:  ``torch.Tensor``</span>\n<span class=\"sd\">            Shape ``(batch_size, timesteps + 2)`` long tensor with sequence mask.</span>\n<span class=\"sd\">        Note that the output tensors all include additional special begin and end of sequence</span>\n<span class=\"sd\">        markers.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_word_embedding</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span> <span class=\"ow\">and</span> <span class=\"n\">word_inputs</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">mask_without_bos_eos</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">word_inputs</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n                <span class=\"c1\"># The character cnn part is cached - just look it up.</span>\n                <span class=\"n\">embedded_inputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_word_embedding</span><span class=\"p\">(</span><span class=\"n\">word_inputs</span><span class=\"p\">)</span>  <span class=\"c1\"># type: ignore</span>\n                <span class=\"c1\"># shape (batch_size, timesteps + 2, embedding_dim)</span>\n                <span class=\"n\">type_representation</span><span class=\"p\">,</span> <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">add_sentence_boundary_token_ids</span><span class=\"p\">(</span>\n                    <span class=\"n\">embedded_inputs</span><span class=\"p\">,</span> <span class=\"n\">mask_without_bos_eos</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_bos_embedding</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_eos_embedding</span>\n                <span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"ne\">RuntimeError</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Back off to running the character convolutions,</span>\n                <span class=\"c1\"># as we might not have the words in the cache.</span>\n                <span class=\"n\">token_embedding</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_token_embedder</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">)</span>\n                <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">token_embedding</span><span class=\"p\">[</span><span class=\"s2\">&quot;mask&quot;</span><span class=\"p\">]</span>\n                <span class=\"n\">type_representation</span> <span class=\"o\">=</span> <span class=\"n\">token_embedding</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_embedding&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">token_embedding</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_token_embedder</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">)</span>\n            <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"n\">token_embedding</span><span class=\"p\">[</span><span class=\"s2\">&quot;mask&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">type_representation</span> <span class=\"o\">=</span> <span class=\"n\">token_embedding</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_embedding&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">lstm_outputs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_elmo_lstm</span><span class=\"p\">(</span><span class=\"n\">type_representation</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Prepare the output.  The first layer is duplicated.</span>\n        <span class=\"c1\"># Because of minor differences in how masking is applied depending</span>\n        <span class=\"c1\"># on whether the char cnn layers are cached, we&#39;ll be defensive and</span>\n        <span class=\"c1\"># multiply by the mask here. It&#39;s not strictly necessary, as the</span>\n        <span class=\"c1\"># mask passed on is correct, but the values in the padded areas</span>\n        <span class=\"c1\"># of the char cnn representations can change.</span>\n        <span class=\"n\">output_tensors</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">type_representation</span><span class=\"p\">,</span> <span class=\"n\">type_representation</span><span class=\"p\">],</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"o\">*</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"p\">]</span>\n        <span class=\"k\">for</span> <span class=\"n\">layer_activations</span> <span class=\"ow\">in</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">chunk</span><span class=\"p\">(</span><span class=\"n\">lstm_outputs</span><span class=\"p\">,</span> <span class=\"n\">lstm_outputs</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">):</span>\n            <span class=\"n\">output_tensors</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">layer_activations</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">))</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;activations&quot;</span><span class=\"p\">:</span> <span class=\"n\">output_tensors</span><span class=\"p\">,</span> <span class=\"s2\">&quot;mask&quot;</span><span class=\"p\">:</span> <span class=\"n\">mask</span><span class=\"p\">}</span>\n\n\n<div class=\"viewcode-block\" id=\"add_sentence_boundary_token_ids\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.elmo.add_sentence_boundary_token_ids\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_sentence_boundary_token_ids</span><span class=\"p\">(</span>\n    <span class=\"n\">tensor</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">sentence_begin_token</span><span class=\"p\">:</span> <span class=\"n\">Any</span><span class=\"p\">,</span> <span class=\"n\">sentence_end_token</span><span class=\"p\">:</span> <span class=\"n\">Any</span>\n<span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">]:</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Add begin/end of sentence tokens to the batch of sentences.</span>\n<span class=\"sd\">    Given a batch of sentences with size ``(batch_size, timesteps)`` or</span>\n<span class=\"sd\">    ``(batch_size, timesteps, dim)`` this returns a tensor of shape</span>\n<span class=\"sd\">    ``(batch_size, timesteps + 2)`` or ``(batch_size, timesteps + 2, dim)`` respectively.</span>\n<span class=\"sd\">    Returns both the new tensor and updated mask.</span>\n<span class=\"sd\">    Parameters</span>\n<span class=\"sd\">    ----------</span>\n<span class=\"sd\">    tensor : ``torch.Tensor``</span>\n<span class=\"sd\">        A tensor of shape ``(batch_size, timesteps)`` or ``(batch_size, timesteps, dim)``</span>\n<span class=\"sd\">    mask : ``torch.Tensor``</span>\n<span class=\"sd\">         A tensor of shape ``(batch_size, timesteps)``</span>\n<span class=\"sd\">    sentence_begin_token: Any (anything that can be broadcast in torch for assignment)</span>\n<span class=\"sd\">        For 2D input, a scalar with the &lt;S&gt; id. For 3D input, a tensor with length dim.</span>\n<span class=\"sd\">    sentence_end_token: Any (anything that can be broadcast in torch for assignment)</span>\n<span class=\"sd\">        For 2D input, a scalar with the &lt;/S&gt; id. For 3D input, a tensor with length dim.</span>\n<span class=\"sd\">    Returns</span>\n<span class=\"sd\">    -------</span>\n<span class=\"sd\">    tensor_with_boundary_tokens : ``torch.Tensor``</span>\n<span class=\"sd\">        The tensor with the appended and prepended boundary tokens. If the input was 2D,</span>\n<span class=\"sd\">        it has shape (batch_size, timesteps + 2) and if the input was 3D, it has shape</span>\n<span class=\"sd\">        (batch_size, timesteps + 2, dim).</span>\n<span class=\"sd\">    new_mask : ``torch.Tensor``</span>\n<span class=\"sd\">        The new mask for the tensor, taking into account the appended tokens</span>\n<span class=\"sd\">        marking the beginning and end of the sentence.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># TODO: matthewp, profile this transfer</span>\n    <span class=\"n\">sequence_lengths</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">detach</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">cpu</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">numpy</span><span class=\"p\">()</span>\n    <span class=\"n\">tensor_shape</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">shape</span><span class=\"p\">)</span>\n    <span class=\"n\">new_shape</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">tensor_shape</span><span class=\"p\">)</span>\n    <span class=\"n\">new_shape</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">tensor_shape</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mi\">2</span>\n    <span class=\"n\">tensor_with_boundary_tokens</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">new_zeros</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">new_shape</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tensor_shape</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n        <span class=\"n\">tensor_with_boundary_tokens</span><span class=\"p\">[:,</span> <span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span>\n        <span class=\"n\">tensor_with_boundary_tokens</span><span class=\"p\">[:,</span> <span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">sentence_begin_token</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">sequence_lengths</span><span class=\"p\">):</span>\n            <span class=\"n\">tensor_with_boundary_tokens</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">j</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">sentence_end_token</span>\n        <span class=\"n\">new_mask</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">tensor_with_boundary_tokens</span> <span class=\"o\">!=</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tensor_shape</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n        <span class=\"n\">tensor_with_boundary_tokens</span><span class=\"p\">[:,</span> <span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"p\">:]</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">sequence_lengths</span><span class=\"p\">):</span>\n            <span class=\"n\">tensor_with_boundary_tokens</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"p\">:]</span> <span class=\"o\">=</span> <span class=\"n\">sentence_begin_token</span>\n            <span class=\"n\">tensor_with_boundary_tokens</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">j</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"p\">:]</span> <span class=\"o\">=</span> <span class=\"n\">sentence_end_token</span>\n        <span class=\"n\">new_mask</span> <span class=\"o\">=</span> <span class=\"p\">((</span><span class=\"n\">tensor_with_boundary_tokens</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;add_sentence_boundary_token_ids only accepts 2D and 3D input&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">tensor_with_boundary_tokens</span><span class=\"p\">,</span> <span class=\"n\">new_mask</span></div>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_make_bos_eos</span><span class=\"p\">(</span>\n    <span class=\"n\">character</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n    <span class=\"n\">padding_character</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n    <span class=\"n\">beginning_of_word_character</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n    <span class=\"n\">end_of_word_character</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n    <span class=\"n\">max_word_length</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n<span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"n\">char_ids</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">padding_character</span><span class=\"p\">]</span> <span class=\"o\">*</span> <span class=\"n\">max_word_length</span>\n    <span class=\"n\">char_ids</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">beginning_of_word_character</span>\n    <span class=\"n\">char_ids</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">character</span>\n    <span class=\"n\">char_ids</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">end_of_word_character</span>\n    <span class=\"k\">return</span> <span class=\"n\">char_ids</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_ElmoCharacterEncoder</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Compute context sensitive token representation using pretrained biLM.</span>\n<span class=\"sd\">    This embedder has input character ids of size (batch_size, sequence_length, 50)</span>\n<span class=\"sd\">    and returns (batch_size, sequence_length + 2, embedding_dim), where embedding_dim</span>\n<span class=\"sd\">    is specified in the options file (typically 512).</span>\n<span class=\"sd\">    We add special entries at the beginning and end of each sequence corresponding</span>\n<span class=\"sd\">    to &lt;S&gt; and &lt;/S&gt;, the beginning and end of sentence tokens.</span>\n<span class=\"sd\">    Note: this is a lower level class useful for advanced usage.  Most users should</span>\n<span class=\"sd\">    use ``ElmoTokenEmbedder`` or ``allennlp.modules.Elmo`` instead.</span>\n<span class=\"sd\">    Parameters</span>\n<span class=\"sd\">    ----------</span>\n<span class=\"sd\">    options_file : ``str``</span>\n<span class=\"sd\">        ELMo JSON options file</span>\n<span class=\"sd\">    weight_file : ``str``</span>\n<span class=\"sd\">        ELMo hdf5 weight file</span>\n<span class=\"sd\">    requires_grad: ``bool``, optional</span>\n<span class=\"sd\">        If True, compute gradient of ELMo parameters for fine tuning.</span>\n<span class=\"sd\">    The relevant section of the options file is something like:</span>\n<span class=\"sd\">    .. example-code::</span>\n<span class=\"sd\">        .. code-block:: python</span>\n<span class=\"sd\">            {&#39;char_cnn&#39;: {</span>\n<span class=\"sd\">                &#39;activation&#39;: &#39;relu&#39;,</span>\n<span class=\"sd\">                &#39;embedding&#39;: {&#39;dim&#39;: 4},</span>\n<span class=\"sd\">                &#39;filters&#39;: [[1, 4], [2, 8], [3, 16], [4, 32], [5, 64]],</span>\n<span class=\"sd\">                &#39;max_characters_per_token&#39;: 50,</span>\n<span class=\"sd\">                &#39;n_characters&#39;: 262,</span>\n<span class=\"sd\">                &#39;n_highway&#39;: 2</span>\n<span class=\"sd\">                }</span>\n<span class=\"sd\">            }</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">options_file</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">weight_file</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">requires_grad</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">_ElmoCharacterEncoder</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">options_file</span><span class=\"p\">,</span> <span class=\"s2\">&quot;r&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fin</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_options</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"n\">fin</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_weight_file</span> <span class=\"o\">=</span> <span class=\"n\">weight_file</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">output_dim</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;lstm&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;projection_dim&quot;</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"n\">requires_grad</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_load_weights</span><span class=\"p\">()</span>\n\n        <span class=\"n\">max_word_length</span> <span class=\"o\">=</span> <span class=\"mi\">50</span>\n\n        <span class=\"c1\"># char ids 0-255 come from utf-8 encoding bytes</span>\n        <span class=\"c1\"># assign 256-300 to special chars</span>\n        <span class=\"n\">beginning_of_sentence_character</span> <span class=\"o\">=</span> <span class=\"mi\">256</span>  <span class=\"c1\"># &lt;begin sentence&gt;</span>\n        <span class=\"n\">end_of_sentence_character</span> <span class=\"o\">=</span> <span class=\"mi\">257</span>  <span class=\"c1\"># &lt;end sentence&gt;</span>\n        <span class=\"n\">beginning_of_word_character</span> <span class=\"o\">=</span> <span class=\"mi\">258</span>  <span class=\"c1\"># &lt;begin word&gt;</span>\n        <span class=\"n\">end_of_word_character</span> <span class=\"o\">=</span> <span class=\"mi\">259</span>  <span class=\"c1\"># &lt;end word&gt;</span>\n        <span class=\"n\">padding_character</span> <span class=\"o\">=</span> <span class=\"mi\">260</span>  <span class=\"c1\"># &lt;padding&gt;</span>\n\n        <span class=\"n\">beginning_of_sentence_characters</span> <span class=\"o\">=</span> <span class=\"n\">_make_bos_eos</span><span class=\"p\">(</span>\n            <span class=\"n\">beginning_of_sentence_character</span><span class=\"p\">,</span>\n            <span class=\"n\">padding_character</span><span class=\"p\">,</span>\n            <span class=\"n\">beginning_of_word_character</span><span class=\"p\">,</span>\n            <span class=\"n\">end_of_word_character</span><span class=\"p\">,</span>\n            <span class=\"n\">max_word_length</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">end_of_sentence_characters</span> <span class=\"o\">=</span> <span class=\"n\">_make_bos_eos</span><span class=\"p\">(</span>\n            <span class=\"n\">end_of_sentence_character</span><span class=\"p\">,</span>\n            <span class=\"n\">padding_character</span><span class=\"p\">,</span>\n            <span class=\"n\">beginning_of_word_character</span><span class=\"p\">,</span>\n            <span class=\"n\">end_of_word_character</span><span class=\"p\">,</span>\n            <span class=\"n\">max_word_length</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># Cache the arrays for use in forward -- +1 due to masking.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_beginning_of_sentence_characters</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">from_numpy</span><span class=\"p\">(</span>\n            <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">(</span><span class=\"n\">beginning_of_sentence_characters</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_end_of_sentence_characters</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">from_numpy</span><span class=\"p\">(</span>\n            <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">(</span><span class=\"n\">end_of_sentence_characters</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">output_dim</span>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">Dict</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">]:</span>  <span class=\"c1\"># pylint: disable=arguments-differ</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Compute context insensitive token embeddings for ELMo representations.</span>\n<span class=\"sd\">        Parameters</span>\n<span class=\"sd\">        ----------</span>\n<span class=\"sd\">        inputs: ``torch.Tensor``</span>\n<span class=\"sd\">            Shape ``(batch_size, sequence_length, 50)`` of character ids representing the</span>\n<span class=\"sd\">            current batch.</span>\n<span class=\"sd\">        Returns</span>\n<span class=\"sd\">        -------</span>\n<span class=\"sd\">        Dict with keys:</span>\n<span class=\"sd\">        ``&#39;token_embedding&#39;``: ``torch.Tensor``</span>\n<span class=\"sd\">            Shape ``(batch_size, sequence_length + 2, embedding_dim)`` tensor with context</span>\n<span class=\"sd\">            insensitive token representations.</span>\n<span class=\"sd\">        ``&#39;mask&#39;``:  ``torch.Tensor``</span>\n<span class=\"sd\">            Shape ``(batch_size, sequence_length + 2)`` long tensor with sequence mask.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># Add BOS/EOS</span>\n        <span class=\"n\">mask</span> <span class=\"o\">=</span> <span class=\"p\">((</span><span class=\"n\">inputs</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n        <span class=\"n\">character_ids_with_bos_eos</span><span class=\"p\">,</span> <span class=\"n\">mask_with_bos_eos</span> <span class=\"o\">=</span> <span class=\"n\">add_sentence_boundary_token_ids</span><span class=\"p\">(</span>\n            <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_beginning_of_sentence_characters</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_end_of_sentence_characters</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># the character id embedding</span>\n        <span class=\"n\">max_chars_per_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;char_cnn&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;max_characters_per_token&quot;</span><span class=\"p\">]</span>\n        <span class=\"c1\"># (batch_size * sequence_length, max_chars_per_token, embed_dim)</span>\n        <span class=\"n\">character_embedding</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">functional</span><span class=\"o\">.</span><span class=\"n\">embedding</span><span class=\"p\">(</span>\n            <span class=\"n\">character_ids_with_bos_eos</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">max_chars_per_token</span><span class=\"p\">),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_char_embedding_weights</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># run convolutions</span>\n        <span class=\"n\">cnn_options</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;char_cnn&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">cnn_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;activation&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;tanh&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">activation</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">functional</span><span class=\"o\">.</span><span class=\"n\">tanh</span>\n        <span class=\"k\">elif</span> <span class=\"n\">cnn_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;activation&quot;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;relu&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">activation</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">functional</span><span class=\"o\">.</span><span class=\"n\">relu</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Unknown activation&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># (batch_size * sequence_length, embed_dim, max_chars_per_token)</span>\n        <span class=\"n\">character_embedding</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">character_embedding</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"n\">convs</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_convolutions</span><span class=\"p\">)):</span>\n            <span class=\"n\">conv</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s2\">&quot;char_conv_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">))</span>\n            <span class=\"n\">convolved</span> <span class=\"o\">=</span> <span class=\"n\">conv</span><span class=\"p\">(</span><span class=\"n\">character_embedding</span><span class=\"p\">)</span>\n            <span class=\"c1\"># (batch_size * sequence_length, n_filters for this width)</span>\n            <span class=\"n\">convolved</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">max</span><span class=\"p\">(</span><span class=\"n\">convolved</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">convolved</span> <span class=\"o\">=</span> <span class=\"n\">activation</span><span class=\"p\">(</span><span class=\"n\">convolved</span><span class=\"p\">)</span>\n            <span class=\"n\">convs</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">convolved</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># (batch_size * sequence_length, n_filters)</span>\n        <span class=\"n\">token_embedding</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"n\">convs</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># apply the highway layers (batch_size * sequence_length, n_filters)</span>\n        <span class=\"n\">token_embedding</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_highways</span><span class=\"p\">(</span><span class=\"n\">token_embedding</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># final projection  (batch_size * sequence_length, embedding_dim)</span>\n        <span class=\"n\">token_embedding</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_projection</span><span class=\"p\">(</span><span class=\"n\">token_embedding</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># reshape to (batch_size, sequence_length, embedding_dim)</span>\n        <span class=\"n\">batch_size</span><span class=\"p\">,</span> <span class=\"n\">sequence_length</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"n\">character_ids_with_bos_eos</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;mask&quot;</span><span class=\"p\">:</span> <span class=\"n\">mask_with_bos_eos</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;token_embedding&quot;</span><span class=\"p\">:</span> <span class=\"n\">token_embedding</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">batch_size</span><span class=\"p\">,</span> <span class=\"n\">sequence_length</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_load_weights</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_load_char_embedding</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_load_cnn_weights</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_load_highway</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_load_projection</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_load_char_embedding</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">with</span> <span class=\"n\">h5py</span><span class=\"o\">.</span><span class=\"n\">File</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_weight_file</span><span class=\"p\">,</span> <span class=\"s2\">&quot;r&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fin</span><span class=\"p\">:</span>\n            <span class=\"n\">char_embed_weights</span> <span class=\"o\">=</span> <span class=\"n\">fin</span><span class=\"p\">[</span><span class=\"s2\">&quot;char_embed&quot;</span><span class=\"p\">][</span><span class=\"o\">...</span><span class=\"p\">]</span>\n\n        <span class=\"n\">weights</span> <span class=\"o\">=</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span>\n            <span class=\"p\">(</span><span class=\"n\">char_embed_weights</span><span class=\"o\">.</span><span class=\"n\">shape</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">char_embed_weights</span><span class=\"o\">.</span><span class=\"n\">shape</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]),</span> <span class=\"n\">dtype</span><span class=\"o\">=</span><span class=\"s2\">&quot;float32&quot;</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">weights</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:,</span> <span class=\"p\">:]</span> <span class=\"o\">=</span> <span class=\"n\">char_embed_weights</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_char_embedding_weights</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span>\n            <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">weights</span><span class=\"p\">),</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_load_cnn_weights</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">cnn_options</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;char_cnn&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">filters</span> <span class=\"o\">=</span> <span class=\"n\">cnn_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;filters&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">char_embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">cnn_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;embedding&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;dim&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"n\">convolutions</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">width</span><span class=\"p\">,</span> <span class=\"n\">num</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">filters</span><span class=\"p\">):</span>\n            <span class=\"n\">conv</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Conv1d</span><span class=\"p\">(</span>\n                <span class=\"n\">in_channels</span><span class=\"o\">=</span><span class=\"n\">char_embed_dim</span><span class=\"p\">,</span> <span class=\"n\">out_channels</span><span class=\"o\">=</span><span class=\"n\">num</span><span class=\"p\">,</span> <span class=\"n\">kernel_size</span><span class=\"o\">=</span><span class=\"n\">width</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">True</span>\n            <span class=\"p\">)</span>\n            <span class=\"c1\"># load the weights</span>\n            <span class=\"k\">with</span> <span class=\"n\">h5py</span><span class=\"o\">.</span><span class=\"n\">File</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_weight_file</span><span class=\"p\">,</span> <span class=\"s2\">&quot;r&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fin</span><span class=\"p\">:</span>\n                <span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"n\">fin</span><span class=\"p\">[</span><span class=\"s2\">&quot;CNN&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;W_cnn_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)][</span><span class=\"o\">...</span><span class=\"p\">]</span>\n                <span class=\"n\">bias</span> <span class=\"o\">=</span> <span class=\"n\">fin</span><span class=\"p\">[</span><span class=\"s2\">&quot;CNN&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;b_cnn_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)][</span><span class=\"o\">...</span><span class=\"p\">]</span>\n\n            <span class=\"n\">w_reshaped</span> <span class=\"o\">=</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"n\">axis</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">axes</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">))</span>\n            <span class=\"k\">if</span> <span class=\"n\">w_reshaped</span><span class=\"o\">.</span><span class=\"n\">shape</span> <span class=\"o\">!=</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">conv</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">shape</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Invalid weight file&quot;</span><span class=\"p\">)</span>\n            <span class=\"n\">conv</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">copy_</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">w_reshaped</span><span class=\"p\">))</span>\n            <span class=\"n\">conv</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">copy_</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">bias</span><span class=\"p\">))</span>\n\n            <span class=\"n\">conv</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span>\n            <span class=\"n\">conv</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span>\n\n            <span class=\"n\">convolutions</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">conv</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add_module</span><span class=\"p\">(</span><span class=\"s2\">&quot;char_conv_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">),</span> <span class=\"n\">conv</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_convolutions</span> <span class=\"o\">=</span> <span class=\"n\">convolutions</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_load_highway</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># pylint: disable=protected-access</span>\n        <span class=\"c1\"># the highway layers have same dimensionality as the number of cnn filters</span>\n        <span class=\"n\">cnn_options</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;char_cnn&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">filters</span> <span class=\"o\">=</span> <span class=\"n\">cnn_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;filters&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">n_filters</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"n\">filters</span><span class=\"p\">)</span>\n        <span class=\"n\">n_highway</span> <span class=\"o\">=</span> <span class=\"n\">cnn_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;n_highway&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># create the layers, and load the weights</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_highways</span> <span class=\"o\">=</span> <span class=\"n\">Highway</span><span class=\"p\">(</span><span class=\"n\">n_filters</span><span class=\"p\">,</span> <span class=\"n\">n_highway</span><span class=\"p\">,</span> <span class=\"n\">activation</span><span class=\"o\">=</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">functional</span><span class=\"o\">.</span><span class=\"n\">relu</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">n_highway</span><span class=\"p\">):</span>\n            <span class=\"c1\"># The AllenNLP highway is one matrix multplication with concatenation of</span>\n            <span class=\"c1\"># transform and carry weights.</span>\n            <span class=\"k\">with</span> <span class=\"n\">h5py</span><span class=\"o\">.</span><span class=\"n\">File</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_weight_file</span><span class=\"p\">,</span> <span class=\"s2\">&quot;r&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fin</span><span class=\"p\">:</span>\n                <span class=\"c1\"># The weights are transposed due to multiplication order assumptions in tf</span>\n                <span class=\"c1\"># vs pytorch (tf.matmul(X, W) vs pytorch.matmul(W, X))</span>\n                <span class=\"n\">w_transform</span> <span class=\"o\">=</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">fin</span><span class=\"p\">[</span><span class=\"s2\">&quot;CNN_high_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">)][</span><span class=\"s2\">&quot;W_transform&quot;</span><span class=\"p\">][</span><span class=\"o\">...</span><span class=\"p\">])</span>\n                <span class=\"c1\"># -1.0 since AllenNLP is g * x + (1 - g) * f(x) but tf is (1 - g) * x + g * f(x)</span>\n                <span class=\"n\">w_carry</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mf\">1.0</span> <span class=\"o\">*</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">fin</span><span class=\"p\">[</span><span class=\"s2\">&quot;CNN_high_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">)][</span><span class=\"s2\">&quot;W_carry&quot;</span><span class=\"p\">][</span><span class=\"o\">...</span><span class=\"p\">])</span>\n                <span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">concatenate</span><span class=\"p\">([</span><span class=\"n\">w_transform</span><span class=\"p\">,</span> <span class=\"n\">w_carry</span><span class=\"p\">],</span> <span class=\"n\">axis</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_highways</span><span class=\"o\">.</span><span class=\"n\">_layers</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">copy_</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">weight</span><span class=\"p\">))</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_highways</span><span class=\"o\">.</span><span class=\"n\">_layers</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span>\n\n                <span class=\"n\">b_transform</span> <span class=\"o\">=</span> <span class=\"n\">fin</span><span class=\"p\">[</span><span class=\"s2\">&quot;CNN_high_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">)][</span><span class=\"s2\">&quot;b_transform&quot;</span><span class=\"p\">][</span><span class=\"o\">...</span><span class=\"p\">]</span>\n                <span class=\"n\">b_carry</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mf\">1.0</span> <span class=\"o\">*</span> <span class=\"n\">fin</span><span class=\"p\">[</span><span class=\"s2\">&quot;CNN_high_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">)][</span><span class=\"s2\">&quot;b_carry&quot;</span><span class=\"p\">][</span><span class=\"o\">...</span><span class=\"p\">]</span>\n                <span class=\"n\">bias</span> <span class=\"o\">=</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">concatenate</span><span class=\"p\">([</span><span class=\"n\">b_transform</span><span class=\"p\">,</span> <span class=\"n\">b_carry</span><span class=\"p\">],</span> <span class=\"n\">axis</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_highways</span><span class=\"o\">.</span><span class=\"n\">_layers</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">copy_</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">bias</span><span class=\"p\">))</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_highways</span><span class=\"o\">.</span><span class=\"n\">_layers</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_load_projection</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">cnn_options</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;char_cnn&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">filters</span> <span class=\"o\">=</span> <span class=\"n\">cnn_options</span><span class=\"p\">[</span><span class=\"s2\">&quot;filters&quot;</span><span class=\"p\">]</span>\n        <span class=\"n\">n_filters</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"n\">filters</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_projection</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">n_filters</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">output_dim</span><span class=\"p\">,</span> <span class=\"n\">bias</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">with</span> <span class=\"n\">h5py</span><span class=\"o\">.</span><span class=\"n\">File</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_weight_file</span><span class=\"p\">,</span> <span class=\"s2\">&quot;r&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fin</span><span class=\"p\">:</span>\n            <span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"n\">fin</span><span class=\"p\">[</span><span class=\"s2\">&quot;CNN_proj&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;W_proj&quot;</span><span class=\"p\">][</span><span class=\"o\">...</span><span class=\"p\">]</span>\n            <span class=\"n\">bias</span> <span class=\"o\">=</span> <span class=\"n\">fin</span><span class=\"p\">[</span><span class=\"s2\">&quot;CNN_proj&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;b_proj&quot;</span><span class=\"p\">][</span><span class=\"o\">...</span><span class=\"p\">]</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_projection</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">copy_</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">weight</span><span class=\"p\">)))</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_projection</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">copy_</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">bias</span><span class=\"p\">))</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_projection</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_projection</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span>\n\n\n<div class=\"viewcode-block\" id=\"ElmoLstm\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.elmo.ElmoLstm\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ElmoLstm</span><span class=\"p\">(</span><span class=\"n\">_EncoderBase</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A stacked, bidirectional LSTM which uses</span>\n<span class=\"sd\">    :class:`~allennlp.modules.lstm_cell_with_projection.LstmCellWithProjection`&#39;s</span>\n<span class=\"sd\">    with highway layers between the inputs to layers.</span>\n<span class=\"sd\">    The inputs to the forward and backward directions are independent - forward and backward</span>\n<span class=\"sd\">    states are not concatenated between layers.</span>\n<span class=\"sd\">    Additionally, this LSTM maintains its `own` state, which is updated every time</span>\n<span class=\"sd\">    ``forward`` is called. It is dynamically resized for different batch sizes and is</span>\n<span class=\"sd\">    designed for use with non-continuous inputs (i.e inputs which aren&#39;t formatted as a stream,</span>\n<span class=\"sd\">    such as text used for a language modelling task, which is how stateful RNNs are typically used).</span>\n<span class=\"sd\">    This is non-standard, but can be thought of as having an &quot;end of sentence&quot; state, which is</span>\n<span class=\"sd\">    carried across different sentences.</span>\n<span class=\"sd\">    Parameters</span>\n<span class=\"sd\">    ----------</span>\n<span class=\"sd\">    input_size : ``int``, required</span>\n<span class=\"sd\">        The dimension of the inputs to the LSTM.</span>\n<span class=\"sd\">    hidden_size : ``int``, required</span>\n<span class=\"sd\">        The dimension of the outputs of the LSTM.</span>\n<span class=\"sd\">    cell_size : ``int``, required.</span>\n<span class=\"sd\">        The dimension of the memory cell of the</span>\n<span class=\"sd\">        :class:`~allennlp.modules.lstm_cell_with_projection.LstmCellWithProjection`.</span>\n<span class=\"sd\">    num_layers : ``int``, required</span>\n<span class=\"sd\">        The number of bidirectional LSTMs to use.</span>\n<span class=\"sd\">    requires_grad: ``bool``, optional</span>\n<span class=\"sd\">        If True, compute gradient of ELMo parameters for fine tuning.</span>\n<span class=\"sd\">    recurrent_dropout_probability: ``float``, optional (default = 0.0)</span>\n<span class=\"sd\">        The dropout probability to be used in a dropout scheme as stated in</span>\n<span class=\"sd\">        `A Theoretically Grounded Application of Dropout in Recurrent Neural Networks</span>\n<span class=\"sd\">        &lt;https://arxiv.org/abs/1512.05287&gt;`_ .</span>\n<span class=\"sd\">    state_projection_clip_value: ``float``, optional, (default = None)</span>\n<span class=\"sd\">        The magnitude with which to clip the hidden_state after projecting it.</span>\n<span class=\"sd\">    memory_cell_clip_value: ``float``, optional, (default = None)</span>\n<span class=\"sd\">        The magnitude with which to clip the memory cell.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">input_size</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n        <span class=\"n\">hidden_size</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n        <span class=\"n\">cell_size</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n        <span class=\"n\">num_layers</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n        <span class=\"n\">requires_grad</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">recurrent_dropout_probability</span><span class=\"p\">:</span> <span class=\"nb\">float</span> <span class=\"o\">=</span> <span class=\"mf\">0.0</span><span class=\"p\">,</span>\n        <span class=\"n\">memory_cell_clip_value</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">float</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">state_projection_clip_value</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"nb\">float</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">ElmoLstm</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">stateful</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Required to be wrapped with a :class:`PytorchSeq2SeqWrapper`.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">input_size</span> <span class=\"o\">=</span> <span class=\"n\">input_size</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span> <span class=\"o\">=</span> <span class=\"n\">hidden_size</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_layers</span> <span class=\"o\">=</span> <span class=\"n\">num_layers</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span> <span class=\"o\">=</span> <span class=\"n\">cell_size</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"n\">requires_grad</span>\n\n        <span class=\"n\">forward_layers</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">backward_layers</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"n\">lstm_input_size</span> <span class=\"o\">=</span> <span class=\"n\">input_size</span>\n        <span class=\"n\">go_forward</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">for</span> <span class=\"n\">layer_index</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">num_layers</span><span class=\"p\">):</span>\n            <span class=\"n\">forward_layer</span> <span class=\"o\">=</span> <span class=\"n\">LstmCellWithProjection</span><span class=\"p\">(</span>\n                <span class=\"n\">lstm_input_size</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"p\">,</span>\n                <span class=\"n\">cell_size</span><span class=\"p\">,</span>\n                <span class=\"n\">go_forward</span><span class=\"p\">,</span>\n                <span class=\"n\">recurrent_dropout_probability</span><span class=\"p\">,</span>\n                <span class=\"n\">memory_cell_clip_value</span><span class=\"p\">,</span>\n                <span class=\"n\">state_projection_clip_value</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">backward_layer</span> <span class=\"o\">=</span> <span class=\"n\">LstmCellWithProjection</span><span class=\"p\">(</span>\n                <span class=\"n\">lstm_input_size</span><span class=\"p\">,</span>\n                <span class=\"n\">hidden_size</span><span class=\"p\">,</span>\n                <span class=\"n\">cell_size</span><span class=\"p\">,</span>\n                <span class=\"ow\">not</span> <span class=\"n\">go_forward</span><span class=\"p\">,</span>\n                <span class=\"n\">recurrent_dropout_probability</span><span class=\"p\">,</span>\n                <span class=\"n\">memory_cell_clip_value</span><span class=\"p\">,</span>\n                <span class=\"n\">state_projection_clip_value</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">lstm_input_size</span> <span class=\"o\">=</span> <span class=\"n\">hidden_size</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add_module</span><span class=\"p\">(</span><span class=\"s2\">&quot;forward_layer_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">layer_index</span><span class=\"p\">),</span> <span class=\"n\">forward_layer</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add_module</span><span class=\"p\">(</span><span class=\"s2\">&quot;backward_layer_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">layer_index</span><span class=\"p\">),</span> <span class=\"n\">backward_layer</span><span class=\"p\">)</span>\n            <span class=\"n\">forward_layers</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">forward_layer</span><span class=\"p\">)</span>\n            <span class=\"n\">backward_layers</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">backward_layer</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">forward_layers</span> <span class=\"o\">=</span> <span class=\"n\">forward_layers</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">backward_layers</span> <span class=\"o\">=</span> <span class=\"n\">backward_layers</span>\n\n<div class=\"viewcode-block\" id=\"ElmoLstm.forward\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.elmo.ElmoLstm.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">mask</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">LongTensor</span>  <span class=\"c1\"># pylint: disable=arguments-differ</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">:</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Parameters</span>\n<span class=\"sd\">        ----------</span>\n<span class=\"sd\">        inputs : ``torch.Tensor``, required.</span>\n<span class=\"sd\">            A Tensor of shape ``(batch_size, sequence_length, hidden_size)``.</span>\n<span class=\"sd\">        mask : ``torch.LongTensor``, required.</span>\n<span class=\"sd\">            A binary mask of shape ``(batch_size, sequence_length)`` representing the</span>\n<span class=\"sd\">            non-padded elements in each sequence in the batch.</span>\n<span class=\"sd\">        Returns</span>\n<span class=\"sd\">        -------</span>\n<span class=\"sd\">        A ``torch.Tensor`` of shape (num_layers, batch_size, sequence_length, hidden_size),</span>\n<span class=\"sd\">        where the num_layers dimension represents the LSTM output from that layer.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">batch_size</span><span class=\"p\">,</span> <span class=\"n\">total_sequence_length</span> <span class=\"o\">=</span> <span class=\"n\">mask</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()</span>\n        <span class=\"n\">stacked_sequence_output</span><span class=\"p\">,</span> <span class=\"n\">final_states</span><span class=\"p\">,</span> <span class=\"n\">restoration_indices</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sort_and_run_forward</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_lstm_forward</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">mask</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">num_layers</span><span class=\"p\">,</span> <span class=\"n\">num_valid</span><span class=\"p\">,</span> <span class=\"n\">returned_timesteps</span><span class=\"p\">,</span> <span class=\"n\">encoder_dim</span> <span class=\"o\">=</span> <span class=\"n\">stacked_sequence_output</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()</span>\n        <span class=\"c1\"># Add back invalid rows which were removed in the call to sort_and_run_forward.</span>\n        <span class=\"k\">if</span> <span class=\"n\">num_valid</span> <span class=\"o\">&lt;</span> <span class=\"n\">batch_size</span><span class=\"p\">:</span>\n            <span class=\"n\">zeros</span> <span class=\"o\">=</span> <span class=\"n\">stacked_sequence_output</span><span class=\"o\">.</span><span class=\"n\">new_zeros</span><span class=\"p\">(</span>\n                <span class=\"n\">num_layers</span><span class=\"p\">,</span> <span class=\"n\">batch_size</span> <span class=\"o\">-</span> <span class=\"n\">num_valid</span><span class=\"p\">,</span> <span class=\"n\">returned_timesteps</span><span class=\"p\">,</span> <span class=\"n\">encoder_dim</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">stacked_sequence_output</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">stacked_sequence_output</span><span class=\"p\">,</span> <span class=\"n\">zeros</span><span class=\"p\">],</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># The states also need to have invalid rows added back.</span>\n            <span class=\"n\">new_states</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"k\">for</span> <span class=\"n\">state</span> <span class=\"ow\">in</span> <span class=\"n\">final_states</span><span class=\"p\">:</span>\n                <span class=\"n\">state_dim</span> <span class=\"o\">=</span> <span class=\"n\">state</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n                <span class=\"n\">zeros</span> <span class=\"o\">=</span> <span class=\"n\">state</span><span class=\"o\">.</span><span class=\"n\">new_zeros</span><span class=\"p\">(</span><span class=\"n\">num_layers</span><span class=\"p\">,</span> <span class=\"n\">batch_size</span> <span class=\"o\">-</span> <span class=\"n\">num_valid</span><span class=\"p\">,</span> <span class=\"n\">state_dim</span><span class=\"p\">)</span>\n                <span class=\"n\">new_states</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">state</span><span class=\"p\">,</span> <span class=\"n\">zeros</span><span class=\"p\">],</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n            <span class=\"n\">final_states</span> <span class=\"o\">=</span> <span class=\"n\">new_states</span>\n\n        <span class=\"c1\"># It&#39;s possible to need to pass sequences which are padded to longer than the</span>\n        <span class=\"c1\"># max length of the sequence to a Seq2StackEncoder. However, packing and unpacking</span>\n        <span class=\"c1\"># the sequences mean that the returned tensor won&#39;t include these dimensions, because</span>\n        <span class=\"c1\"># the RNN did not need to process them. We add them back on in the form of zeros here.</span>\n        <span class=\"n\">sequence_length_difference</span> <span class=\"o\">=</span> <span class=\"n\">total_sequence_length</span> <span class=\"o\">-</span> <span class=\"n\">returned_timesteps</span>\n        <span class=\"k\">if</span> <span class=\"n\">sequence_length_difference</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"n\">zeros</span> <span class=\"o\">=</span> <span class=\"n\">stacked_sequence_output</span><span class=\"o\">.</span><span class=\"n\">new_zeros</span><span class=\"p\">(</span>\n                <span class=\"n\">num_layers</span><span class=\"p\">,</span>\n                <span class=\"n\">batch_size</span><span class=\"p\">,</span>\n                <span class=\"n\">sequence_length_difference</span><span class=\"p\">,</span>\n                <span class=\"n\">stacked_sequence_output</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">),</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">stacked_sequence_output</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">stacked_sequence_output</span><span class=\"p\">,</span> <span class=\"n\">zeros</span><span class=\"p\">],</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_update_states</span><span class=\"p\">(</span><span class=\"n\">final_states</span><span class=\"p\">,</span> <span class=\"n\">restoration_indices</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Restore the original indices and return the sequence.</span>\n        <span class=\"c1\"># Has shape (num_layers, batch_size, sequence_length, hidden_size)</span>\n        <span class=\"k\">return</span> <span class=\"n\">stacked_sequence_output</span><span class=\"o\">.</span><span class=\"n\">index_select</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">restoration_indices</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_lstm_forward</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">inputs</span><span class=\"p\">:</span> <span class=\"n\">PackedSequence</span><span class=\"p\">,</span>\n        <span class=\"n\">initial_state</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">]]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">]]:</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Parameters</span>\n<span class=\"sd\">        ----------</span>\n<span class=\"sd\">        inputs : ``PackedSequence``, required.</span>\n<span class=\"sd\">            A batch first ``PackedSequence`` to run the stacked LSTM over.</span>\n<span class=\"sd\">        initial_state : ``Tuple[torch.Tensor, torch.Tensor]``, optional, (default = None)</span>\n<span class=\"sd\">            A tuple (state, memory) representing the initial hidden state and memory</span>\n<span class=\"sd\">            of the LSTM, with shape (num_layers, batch_size, 2 * hidden_size) and</span>\n<span class=\"sd\">            (num_layers, batch_size, 2 * cell_size) respectively.</span>\n<span class=\"sd\">        Returns</span>\n<span class=\"sd\">        -------</span>\n<span class=\"sd\">        output_sequence : ``torch.FloatTensor``</span>\n<span class=\"sd\">            The encoded sequence of shape (num_layers, batch_size, sequence_length, hidden_size)</span>\n<span class=\"sd\">        final_states: ``Tuple[torch.FloatTensor, torch.FloatTensor]``</span>\n<span class=\"sd\">            The per-layer final (state, memory) states of the LSTM, with shape</span>\n<span class=\"sd\">            (num_layers, batch_size, 2 * hidden_size) and  (num_layers, batch_size, 2 * cell_size)</span>\n<span class=\"sd\">            respectively. The last dimension is duplicated because it contains the state/memory</span>\n<span class=\"sd\">            for both the forward and backward layers.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">initial_state</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">hidden_states</span><span class=\"p\">:</span> <span class=\"n\">List</span><span class=\"p\">[</span><span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">Tensor</span><span class=\"p\">]]]</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"kc\">None</span><span class=\"p\">]</span> <span class=\"o\">*</span> <span class=\"nb\">len</span><span class=\"p\">(</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">forward_layers</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">initial_state</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">forward_layers</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;Initial states were passed to forward() but the number of &quot;</span>\n                <span class=\"s2\">&quot;initial states does not match the number of layers.&quot;</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">hidden_states</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">initial_state</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">initial_state</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">)))</span>\n\n        <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">batch_lengths</span> <span class=\"o\">=</span> <span class=\"n\">pad_packed_sequence</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">batch_first</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"n\">forward_output_sequence</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span>\n        <span class=\"n\">backward_output_sequence</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span>\n\n        <span class=\"n\">final_states</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">sequence_outputs</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">layer_index</span><span class=\"p\">,</span> <span class=\"n\">state</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">hidden_states</span><span class=\"p\">):</span>\n            <span class=\"n\">forward_layer</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s2\">&quot;forward_layer_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">layer_index</span><span class=\"p\">))</span>\n            <span class=\"n\">backward_layer</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s2\">&quot;backward_layer_</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">layer_index</span><span class=\"p\">))</span>\n\n            <span class=\"n\">forward_cache</span> <span class=\"o\">=</span> <span class=\"n\">forward_output_sequence</span>\n            <span class=\"n\">backward_cache</span> <span class=\"o\">=</span> <span class=\"n\">backward_output_sequence</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">state</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"n\">forward_hidden_state</span><span class=\"p\">,</span> <span class=\"n\">backward_hidden_state</span> <span class=\"o\">=</span> <span class=\"n\">state</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n                <span class=\"n\">forward_memory_state</span><span class=\"p\">,</span> <span class=\"n\">backward_memory_state</span> <span class=\"o\">=</span> <span class=\"n\">state</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cell_size</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n                <span class=\"n\">forward_state</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">forward_hidden_state</span><span class=\"p\">,</span> <span class=\"n\">forward_memory_state</span><span class=\"p\">)</span>\n                <span class=\"n\">backward_state</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">backward_hidden_state</span><span class=\"p\">,</span> <span class=\"n\">backward_memory_state</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">forward_state</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n                <span class=\"n\">backward_state</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n            <span class=\"n\">forward_output_sequence</span><span class=\"p\">,</span> <span class=\"n\">forward_state</span> <span class=\"o\">=</span> <span class=\"n\">forward_layer</span><span class=\"p\">(</span>\n                <span class=\"n\">forward_output_sequence</span><span class=\"p\">,</span> <span class=\"n\">batch_lengths</span><span class=\"p\">,</span> <span class=\"n\">forward_state</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">backward_output_sequence</span><span class=\"p\">,</span> <span class=\"n\">backward_state</span> <span class=\"o\">=</span> <span class=\"n\">backward_layer</span><span class=\"p\">(</span>\n                <span class=\"n\">backward_output_sequence</span><span class=\"p\">,</span> <span class=\"n\">batch_lengths</span><span class=\"p\">,</span> <span class=\"n\">backward_state</span>\n            <span class=\"p\">)</span>\n            <span class=\"c1\"># Skip connections, just adding the input to the output.</span>\n            <span class=\"k\">if</span> <span class=\"n\">layer_index</span> <span class=\"o\">!=</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"n\">forward_output_sequence</span> <span class=\"o\">+=</span> <span class=\"n\">forward_cache</span>\n                <span class=\"n\">backward_output_sequence</span> <span class=\"o\">+=</span> <span class=\"n\">backward_cache</span>\n\n            <span class=\"n\">sequence_outputs</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span>\n                <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">forward_output_sequence</span><span class=\"p\">,</span> <span class=\"n\">backward_output_sequence</span><span class=\"p\">],</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"p\">)</span>\n            <span class=\"c1\"># Append the state tuples in a list, so that we can return</span>\n            <span class=\"c1\"># the final states for all the layers.</span>\n            <span class=\"n\">final_states</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span>\n                <span class=\"p\">(</span>\n                    <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">forward_state</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">backward_state</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]],</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">),</span>\n                    <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">([</span><span class=\"n\">forward_state</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">backward_state</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]],</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">),</span>\n                <span class=\"p\">)</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"n\">stacked_sequence_outputs</span><span class=\"p\">:</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">stack</span><span class=\"p\">(</span><span class=\"n\">sequence_outputs</span><span class=\"p\">)</span>\n        <span class=\"c1\"># Stack the hidden state and memory for each layer into 2 tensors of shape</span>\n        <span class=\"c1\"># (num_layers, batch_size, hidden_size) and (num_layers, batch_size, cell_size)</span>\n        <span class=\"c1\"># respectively.</span>\n        <span class=\"n\">final_hidden_states</span><span class=\"p\">,</span> <span class=\"n\">final_memory_states</span> <span class=\"o\">=</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">final_states</span><span class=\"p\">)</span>\n        <span class=\"n\">final_state_tuple</span><span class=\"p\">:</span> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">,</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"n\">final_hidden_states</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">),</span>\n            <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"n\">final_memory_states</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">),</span>\n        <span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">stacked_sequence_outputs</span><span class=\"p\">,</span> <span class=\"n\">final_state_tuple</span>\n\n<div class=\"viewcode-block\" id=\"ElmoLstm.load_weights\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.elmo.ElmoLstm.load_weights\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">load_weights</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">weight_file</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">)</span> <span class=\"o\">-&gt;</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Load the pre-trained weights from the file.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span>\n\n        <span class=\"k\">with</span> <span class=\"n\">h5py</span><span class=\"o\">.</span><span class=\"n\">File</span><span class=\"p\">(</span><span class=\"n\">weight_file</span><span class=\"p\">,</span> <span class=\"s2\">&quot;r&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fin</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">i_layer</span><span class=\"p\">,</span> <span class=\"n\">lstms</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">forward_layers</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">backward_layers</span><span class=\"p\">)):</span>\n                <span class=\"k\">for</span> <span class=\"n\">j_direction</span><span class=\"p\">,</span> <span class=\"n\">lstm</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">lstms</span><span class=\"p\">):</span>\n                    <span class=\"c1\"># lstm is an instance of LSTMCellWithProjection</span>\n                    <span class=\"n\">cell_size</span> <span class=\"o\">=</span> <span class=\"n\">lstm</span><span class=\"o\">.</span><span class=\"n\">cell_size</span>\n\n                    <span class=\"n\">dataset</span> <span class=\"o\">=</span> <span class=\"n\">fin</span><span class=\"p\">[</span><span class=\"s2\">&quot;RNN_</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">j_direction</span><span class=\"p\">][</span><span class=\"s2\">&quot;RNN&quot;</span><span class=\"p\">][</span><span class=\"s2\">&quot;MultiRNNCell&quot;</span><span class=\"p\">][</span>\n                        <span class=\"s2\">&quot;Cell</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">i_layer</span>\n                    <span class=\"p\">][</span><span class=\"s2\">&quot;LSTMCell&quot;</span><span class=\"p\">]</span>\n\n                    <span class=\"c1\"># tensorflow packs together both W and U matrices into one matrix,</span>\n                    <span class=\"c1\"># but pytorch maintains individual matrices.  In addition, tensorflow</span>\n                    <span class=\"c1\"># packs the gates as input, memory, forget, output but pytorch</span>\n                    <span class=\"c1\"># uses input, forget, memory, output.  So we need to modify the weights.</span>\n                    <span class=\"n\">tf_weights</span> <span class=\"o\">=</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">[</span><span class=\"s2\">&quot;W_0&quot;</span><span class=\"p\">][</span><span class=\"o\">...</span><span class=\"p\">])</span>\n                    <span class=\"n\">torch_weights</span> <span class=\"o\">=</span> <span class=\"n\">tf_weights</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">()</span>\n\n                    <span class=\"c1\"># split the W from U matrices</span>\n                    <span class=\"n\">input_size</span> <span class=\"o\">=</span> <span class=\"n\">lstm</span><span class=\"o\">.</span><span class=\"n\">input_size</span>\n                    <span class=\"n\">input_weights</span> <span class=\"o\">=</span> <span class=\"n\">torch_weights</span><span class=\"p\">[:,</span> <span class=\"p\">:</span><span class=\"n\">input_size</span><span class=\"p\">]</span>\n                    <span class=\"n\">recurrent_weights</span> <span class=\"o\">=</span> <span class=\"n\">torch_weights</span><span class=\"p\">[:,</span> <span class=\"n\">input_size</span><span class=\"p\">:]</span>\n                    <span class=\"n\">tf_input_weights</span> <span class=\"o\">=</span> <span class=\"n\">tf_weights</span><span class=\"p\">[:,</span> <span class=\"p\">:</span><span class=\"n\">input_size</span><span class=\"p\">]</span>\n                    <span class=\"n\">tf_recurrent_weights</span> <span class=\"o\">=</span> <span class=\"n\">tf_weights</span><span class=\"p\">[:,</span> <span class=\"n\">input_size</span><span class=\"p\">:]</span>\n\n                    <span class=\"c1\"># handle the different gate order convention</span>\n                    <span class=\"k\">for</span> <span class=\"n\">torch_w</span><span class=\"p\">,</span> <span class=\"n\">tf_w</span> <span class=\"ow\">in</span> <span class=\"p\">[</span>\n                        <span class=\"p\">[</span><span class=\"n\">input_weights</span><span class=\"p\">,</span> <span class=\"n\">tf_input_weights</span><span class=\"p\">],</span>\n                        <span class=\"p\">[</span><span class=\"n\">recurrent_weights</span><span class=\"p\">,</span> <span class=\"n\">tf_recurrent_weights</span><span class=\"p\">],</span>\n                    <span class=\"p\">]:</span>\n                        <span class=\"n\">torch_w</span><span class=\"p\">[(</span><span class=\"mi\">1</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">),</span> <span class=\"p\">:]</span> <span class=\"o\">=</span> <span class=\"n\">tf_w</span><span class=\"p\">[</span>\n                            <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">3</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">),</span> <span class=\"p\">:</span>\n                        <span class=\"p\">]</span>\n                        <span class=\"n\">torch_w</span><span class=\"p\">[(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">3</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">),</span> <span class=\"p\">:]</span> <span class=\"o\">=</span> <span class=\"n\">tf_w</span><span class=\"p\">[</span>\n                            <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">),</span> <span class=\"p\">:</span>\n                        <span class=\"p\">]</span>\n\n                    <span class=\"n\">lstm</span><span class=\"o\">.</span><span class=\"n\">input_linearity</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">copy_</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">input_weights</span><span class=\"p\">))</span>\n                    <span class=\"n\">lstm</span><span class=\"o\">.</span><span class=\"n\">state_linearity</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">copy_</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">recurrent_weights</span><span class=\"p\">))</span>\n                    <span class=\"n\">lstm</span><span class=\"o\">.</span><span class=\"n\">input_linearity</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"n\">requires_grad</span>\n                    <span class=\"n\">lstm</span><span class=\"o\">.</span><span class=\"n\">state_linearity</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"n\">requires_grad</span>\n\n                    <span class=\"c1\"># the bias weights</span>\n                    <span class=\"n\">tf_bias</span> <span class=\"o\">=</span> <span class=\"n\">dataset</span><span class=\"p\">[</span><span class=\"s2\">&quot;B&quot;</span><span class=\"p\">][</span><span class=\"o\">...</span><span class=\"p\">]</span>\n                    <span class=\"c1\"># tensorflow adds 1.0 to forget gate bias instead of modifying the</span>\n                    <span class=\"c1\"># parameters...</span>\n                    <span class=\"n\">tf_bias</span><span class=\"p\">[(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">3</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)]</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n                    <span class=\"n\">torch_bias</span> <span class=\"o\">=</span> <span class=\"n\">tf_bias</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">()</span>\n                    <span class=\"n\">torch_bias</span><span class=\"p\">[(</span><span class=\"mi\">1</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"n\">tf_bias</span><span class=\"p\">[</span>\n                        <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">3</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)</span>\n                    <span class=\"p\">]</span>\n                    <span class=\"n\">torch_bias</span><span class=\"p\">[(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">3</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"n\">tf_bias</span><span class=\"p\">[</span>\n                        <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)</span> <span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">cell_size</span><span class=\"p\">)</span>\n                    <span class=\"p\">]</span>\n                    <span class=\"n\">lstm</span><span class=\"o\">.</span><span class=\"n\">state_linearity</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">copy_</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">torch_bias</span><span class=\"p\">))</span>\n                    <span class=\"n\">lstm</span><span class=\"o\">.</span><span class=\"n\">state_linearity</span><span class=\"o\">.</span><span class=\"n\">bias</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"n\">requires_grad</span>\n\n                    <span class=\"c1\"># the projection weights</span>\n                    <span class=\"n\">proj_weights</span> <span class=\"o\">=</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">dataset</span><span class=\"p\">[</span><span class=\"s2\">&quot;W_P_0&quot;</span><span class=\"p\">][</span><span class=\"o\">...</span><span class=\"p\">])</span>\n                    <span class=\"n\">lstm</span><span class=\"o\">.</span><span class=\"n\">state_projection</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">copy_</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">proj_weights</span><span class=\"p\">))</span>\n                    <span class=\"n\">lstm</span><span class=\"o\">.</span><span class=\"n\">state_projection</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"o\">.</span><span class=\"n\">requires_grad</span> <span class=\"o\">=</span> <span class=\"n\">requires_grad</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/embedding/base.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.embedding.base &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.embedding.base</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.embedding.base</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n\n<div class=\"viewcode-block\" id=\"TokenEmbedding\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.base.TokenEmbedding\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">TokenEmbedding</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Token Embedding</span>\n\n<span class=\"sd\">    It can be embedding matrix, language model (ELMo), neural machine translation model (CoVe) and features.</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        vocab: Vocab (rqa.tokens.vocab)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">TokenEmbedding</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n\n<div class=\"viewcode-block\" id=\"TokenEmbedding.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.base.TokenEmbedding.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokens</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; embedding look-up &quot;&quot;&quot;</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"TokenEmbedding.get_output_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.base.TokenEmbedding.get_output_dim\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; get embedding dimension &quot;&quot;&quot;</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"TokenEmbedding.get_vocab_size\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.base.TokenEmbedding.get_vocab_size\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_vocab_size</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"p\">)</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/embedding/bert_embedding.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.embedding.bert_embedding &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.embedding.bert_embedding</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.embedding.bert_embedding</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">BertModel</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenEmbedding</span>\n\n\n<div class=\"viewcode-block\" id=\"BertEmbedding\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.bert_embedding.BertEmbedding\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">BertEmbedding</span><span class=\"p\">(</span><span class=\"n\">TokenEmbedding</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    BERT Embedding(Encoder)</span>\n\n<span class=\"sd\">    BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1810.04805)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocab)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        pretrained_model_name: ...</span>\n<span class=\"sd\">        use_as_embedding: ...</span>\n<span class=\"sd\">        trainable: Finetune or fixed</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">pretrained_model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">trainable</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;subword&quot;</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BertEmbedding</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">trainable</span> <span class=\"o\">=</span> <span class=\"n\">trainable</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_index</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_index</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">pad_token</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_index</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_index</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">unit</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;subword&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;BertEmbedding is only available &#39;subword&#39; unit, right now.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_model</span> <span class=\"o\">=</span> <span class=\"n\">BertModel</span><span class=\"o\">.</span><span class=\"n\">from_pretrained</span><span class=\"p\">(</span><span class=\"n\">pretrained_model_name</span><span class=\"p\">)</span>  <span class=\"c1\"># BertModel with config</span>\n\n<div class=\"viewcode-block\" id=\"BertEmbedding.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.bert_embedding.BertEmbedding.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">max_position_embeddings</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                <span class=\"n\">f</span><span class=\"s2\">&quot;max_seq_length in this bert_model is &#39;</span><span class=\"si\">{self.bert_model.config.max_position_embeddings}</span><span class=\"s2\">&#39;. (input seq_length: {inputs.size(1)})&quot;</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"c1\"># TODO: add text_unit option</span>\n        <span class=\"c1\"># current: sub_word (default) / later: sub_words --(average)--&gt; word</span>\n        <span class=\"n\">attention_mask</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">inputs</span> <span class=\"o\">!=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_index</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n        <span class=\"n\">sequence_output</span><span class=\"p\">,</span> <span class=\"n\">pooled_output</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_model</span><span class=\"p\">(</span>\n            <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">attention_mask</span><span class=\"o\">=</span><span class=\"n\">attention_mask</span><span class=\"p\">,</span> <span class=\"n\">output_all_encoded_layers</span><span class=\"o\">=</span><span class=\"kc\">False</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">sequence_output</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">masked_zero</span><span class=\"p\">(</span><span class=\"n\">sequence_output</span><span class=\"p\">,</span> <span class=\"n\">attention_mask</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">trainable</span><span class=\"p\">:</span>\n            <span class=\"n\">sequence_output</span> <span class=\"o\">=</span> <span class=\"n\">sequence_output</span><span class=\"o\">.</span><span class=\"n\">detach</span><span class=\"p\">()</span>\n            <span class=\"n\">pooled_output</span> <span class=\"o\">=</span> <span class=\"n\">pooled_output</span><span class=\"o\">.</span><span class=\"n\">detach</span><span class=\"p\">()</span>\n\n        <span class=\"n\">sequence_output</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">remove_cls_sep_token</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">sequence_output</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">sequence_output</span></div>\n\n<div class=\"viewcode-block\" id=\"BertEmbedding.get_output_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.bert_embedding.BertEmbedding.get_output_dim\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bert_model</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">hidden_size</span></div>\n\n<div class=\"viewcode-block\" id=\"BertEmbedding.remove_cls_sep_token\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.bert_embedding.BertEmbedding.remove_cls_sep_token\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">remove_cls_sep_token</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">outputs</span><span class=\"p\">):</span>\n        <span class=\"n\">seq_mask</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">eq</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_index</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">eq</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n        <span class=\"n\">outputs</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">masked_zero</span><span class=\"p\">(</span><span class=\"n\">outputs</span><span class=\"p\">,</span> <span class=\"n\">seq_mask</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">outputs</span><span class=\"p\">[:,</span> <span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"p\">:]</span>  <span class=\"c1\"># B, S_L, D</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/embedding/char_embedding.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.embedding.char_embedding &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.embedding.char_embedding</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.embedding.char_embedding</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.modules.activation</span> <span class=\"k\">import</span> <span class=\"n\">get_activation_fn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenEmbedding</span>\n\n\n<div class=\"viewcode-block\" id=\"CharEmbedding\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.char_embedding.CharEmbedding\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CharEmbedding</span><span class=\"p\">(</span><span class=\"n\">TokenEmbedding</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Character Embedding (CharCNN)</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1509.01626)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocab)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        dropout: The number of dropout probability</span>\n<span class=\"sd\">        embed_dim: The number of embedding dimension</span>\n<span class=\"sd\">        kernel_sizes: The list of kernel size (n-gram)</span>\n<span class=\"sd\">        num_filter: The number of cnn filter</span>\n<span class=\"sd\">        activation: Activation Function (eg. ReLU)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"n\">kernel_sizes</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">],</span> <span class=\"n\">num_filter</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">activation</span><span class=\"o\">=</span><span class=\"s2\">&quot;relu&quot;</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CharEmbedding</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">embed_dim</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_filter</span> <span class=\"o\">=</span> <span class=\"n\">num_filter</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_init_weight</span><span class=\"p\">(</span><span class=\"n\">trainable</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">convs</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Conv1d</span><span class=\"p\">(</span>\n                <span class=\"n\">in_channels</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n                <span class=\"n\">out_channels</span><span class=\"o\">=</span><span class=\"n\">num_filter</span><span class=\"p\">,</span>\n                <span class=\"n\">kernel_size</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span> <span class=\"o\">*</span> <span class=\"n\">kernel_size</span><span class=\"p\">,</span>\n                <span class=\"n\">stride</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">kernel_size</span> <span class=\"ow\">in</span> <span class=\"n\">kernel_sizes</span>\n        <span class=\"p\">]</span>  <span class=\"c1\"># kernel_size = n-gram</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">conv</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">convs</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add_module</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;conv_</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"n\">conv</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span> <span class=\"o\">=</span> <span class=\"n\">get_activation_fn</span><span class=\"p\">(</span><span class=\"n\">activation</span><span class=\"p\">)()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">projection</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">kernel_sizes</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"n\">maxpool_output_dim</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">kernel_sizes</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"n\">num_filter</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">projection</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"n\">maxpool_output_dim</span><span class=\"p\">,</span> <span class=\"n\">num_filter</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_init_weight</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">trainable</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_vocab_size</span><span class=\"p\">(),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span><span class=\"p\">)</span>\n        <span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">weight</span><span class=\"p\">,</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"n\">trainable</span><span class=\"p\">)</span>\n        <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"o\">.</span><span class=\"n\">xavier_uniform_</span><span class=\"p\">(</span><span class=\"n\">weight</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">weight</span>\n\n<div class=\"viewcode-block\" id=\"CharEmbedding.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.char_embedding.CharEmbedding.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">chars</span><span class=\"p\">):</span>\n        <span class=\"n\">mask_chars</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">chars</span> <span class=\"o\">!=</span> <span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n        <span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">W_L</span><span class=\"p\">,</span> <span class=\"n\">C_L</span> <span class=\"o\">=</span> <span class=\"n\">chars</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()</span>  <span class=\"c1\"># (batch_size, word_maxlen, char_maxlen)</span>\n        <span class=\"n\">chars</span> <span class=\"o\">=</span> <span class=\"n\">chars</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">W_L</span> <span class=\"o\">*</span> <span class=\"n\">C_L</span><span class=\"p\">)</span>\n\n        <span class=\"n\">char_embedds</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">embedding</span><span class=\"p\">(</span><span class=\"n\">chars</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">)</span>\n        <span class=\"n\">char_embedds</span> <span class=\"o\">=</span> <span class=\"n\">char_embedds</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">W_L</span><span class=\"p\">,</span> <span class=\"n\">C_L</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Masking</span>\n        <span class=\"n\">char_embedds</span> <span class=\"o\">=</span> <span class=\"n\">char_embedds</span> <span class=\"o\">*</span> <span class=\"n\">mask_chars</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span>\n        <span class=\"n\">char_embedds</span> <span class=\"o\">=</span> <span class=\"n\">char_embedds</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span> <span class=\"o\">*</span> <span class=\"n\">W_L</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"n\">conv_outputs</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">convs</span><span class=\"p\">)):</span>\n            <span class=\"n\">conv</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"s2\">&quot;conv_</span><span class=\"si\">{i}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n            <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_fn</span><span class=\"p\">(</span><span class=\"n\">conv</span><span class=\"p\">(</span><span class=\"n\">char_embedds</span><span class=\"p\">))</span>\n            <span class=\"n\">pooled</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">max_pool1d</span><span class=\"p\">(</span><span class=\"n\">output</span><span class=\"p\">,</span> <span class=\"n\">output</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n\n            <span class=\"n\">conv_outputs</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">pooled</span><span class=\"p\">)</span>\n\n        <span class=\"n\">encoded</span> <span class=\"o\">=</span> <span class=\"n\">conv_outputs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">conv_outputs</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"n\">encoded</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"n\">conv_outputs</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"n\">encoded</span> <span class=\"o\">=</span> <span class=\"n\">encoded</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">B</span><span class=\"p\">,</span> <span class=\"n\">W_L</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">projection</span><span class=\"p\">:</span>\n            <span class=\"n\">encoded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">projection</span><span class=\"p\">(</span><span class=\"n\">encoded</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">encoded</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"CharEmbedding.get_output_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.char_embedding.CharEmbedding.get_output_dim\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_filter</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/embedding/cove_embedding.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.embedding.cove_embedding &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.embedding.cove_embedding</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.embedding.cove_embedding</h1><div class=\"highlight\"><pre>\n<span></span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.cove</span> <span class=\"k\">import</span> <span class=\"n\">MTLSTM</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenEmbedding</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.word_embedding</span> <span class=\"k\">import</span> <span class=\"n\">WordEmbedding</span>\n\n\n<div class=\"viewcode-block\" id=\"CoveEmbedding\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.cove_embedding.CoveEmbedding\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CoveEmbedding</span><span class=\"p\">(</span><span class=\"n\">TokenEmbedding</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Cove Embedding</span>\n\n<span class=\"sd\">    Learned in Translation: Contextualized Word Vectors</span>\n<span class=\"sd\">    (http://papers.nips.cc/paper/7209-learned-in-translation-contextualized-word-vectors.pdf)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocab)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        dropout: The number of dropout probability</span>\n<span class=\"sd\">        pretrained_path: pretrained vector path (eg. GloVe)</span>\n<span class=\"sd\">        trainable: finetune or fixed</span>\n<span class=\"sd\">        project_dim: The number of project (linear) dimension</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">vocab</span><span class=\"p\">,</span>\n        <span class=\"n\">glove_pretrained_path</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">model_pretrained_path</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span>\n        <span class=\"n\">trainable</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">project_dim</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CoveEmbedding</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span> <span class=\"o\">=</span> <span class=\"mi\">600</span>  <span class=\"c1\"># MTLSTM (hidden_size=300 + bidirectional =&gt; 600)</span>\n        <span class=\"n\">word_embedding</span> <span class=\"o\">=</span> <span class=\"n\">WordEmbedding</span><span class=\"p\">(</span>\n            <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">embed_dim</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">,</span> <span class=\"n\">pretrained_path</span><span class=\"o\">=</span><span class=\"n\">glove_pretrained_path</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cove</span> <span class=\"o\">=</span> <span class=\"n\">MTLSTM</span><span class=\"p\">(</span>\n            <span class=\"n\">word_embedding</span><span class=\"p\">,</span> <span class=\"n\">pretrained_path</span><span class=\"o\">=</span><span class=\"n\">model_pretrained_path</span><span class=\"p\">,</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"n\">trainable</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">dropout</span> <span class=\"ow\">and</span> <span class=\"n\">dropout</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_dim</span> <span class=\"o\">=</span> <span class=\"n\">project_dim</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_linear</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"n\">project_dim</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">elmo</span><span class=\"o\">.</span><span class=\"n\">get_output_dim</span><span class=\"p\">(),</span> <span class=\"n\">project_dim</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"CoveEmbedding.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.cove_embedding.CoveEmbedding.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">words</span><span class=\"p\">):</span>\n        <span class=\"n\">embedded_words</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cove</span><span class=\"p\">(</span><span class=\"n\">words</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">embedded_words</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"CoveEmbedding.get_output_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.cove_embedding.CoveEmbedding.get_output_dim\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_linear</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_dim</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/embedding/elmo_embedding.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.embedding.elmo_embedding &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.embedding.elmo_embedding</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.embedding.elmo_embedding</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span><span class=\"p\">,</span> <span class=\"n\">DataHandler</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.elmo</span> <span class=\"k\">import</span> <span class=\"n\">Elmo</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenEmbedding</span>\n\n\n<span class=\"n\">DEFAULT_OPTIONS_FILE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;elmo_2x4096_512_2048cnn_2xhighway_options.json&quot;</span>\n<span class=\"n\">DEFAULT_WEIGHT_FILE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5&quot;</span>\n<span class=\"n\">HIDDEN_SIZE</span> <span class=\"o\">=</span> <span class=\"mi\">1024</span>\n\n\n<div class=\"viewcode-block\" id=\"ELMoEmbedding\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.elmo_embedding.ELMoEmbedding\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ELMoEmbedding</span><span class=\"p\">(</span><span class=\"n\">TokenEmbedding</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    ELMo Embedding</span>\n<span class=\"sd\">    Embedding From Language Model</span>\n\n<span class=\"sd\">    Deep contextualized word representations</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1802.0536)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocab)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        options_file: ELMo model config file path</span>\n<span class=\"sd\">        weight_file: ELMo model weight file path</span>\n<span class=\"sd\">        do_layer_norm: Should we apply layer normalization (passed to ``ScalarMix``)?</span>\n<span class=\"sd\">            default is False</span>\n<span class=\"sd\">        dropout: The number of dropout probability</span>\n<span class=\"sd\">        trainable: Finetune or fixed</span>\n<span class=\"sd\">        project_dim: The number of project (linear) dimension</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">vocab</span><span class=\"p\">,</span>\n        <span class=\"n\">options_file</span><span class=\"o\">=</span><span class=\"n\">DEFAULT_OPTIONS_FILE</span><span class=\"p\">,</span>\n        <span class=\"n\">weight_file</span><span class=\"o\">=</span><span class=\"n\">DEFAULT_WEIGHT_FILE</span><span class=\"p\">,</span>\n        <span class=\"n\">do_layer_norm</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">,</span>\n        <span class=\"n\">trainable</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">project_dim</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">ELMoEmbedding</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">)</span>\n        <span class=\"n\">data_handler</span> <span class=\"o\">=</span> <span class=\"n\">DataHandler</span><span class=\"p\">(</span><span class=\"n\">cache_path</span><span class=\"o\">=</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">PRETRAINED_VECTOR</span><span class=\"p\">)</span>\n        <span class=\"n\">option_path</span> <span class=\"o\">=</span> <span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">options_file</span><span class=\"p\">,</span> <span class=\"n\">return_path</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"n\">weight_path</span> <span class=\"o\">=</span> <span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">weight_file</span><span class=\"p\">,</span> <span class=\"n\">return_path</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">elmo</span> <span class=\"o\">=</span> <span class=\"n\">Elmo</span><span class=\"p\">(</span><span class=\"n\">option_path</span><span class=\"p\">,</span> <span class=\"n\">weight_path</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"n\">trainable</span><span class=\"p\">,</span> <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_dim</span> <span class=\"o\">=</span> <span class=\"n\">project_dim</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_linear</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"n\">project_dim</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_linear</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Linear</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">elmo</span><span class=\"o\">.</span><span class=\"n\">get_output_dim</span><span class=\"p\">(),</span> <span class=\"n\">project_dim</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"ELMoEmbedding.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.elmo_embedding.ELMoEmbedding.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">chars</span><span class=\"p\">):</span>\n        <span class=\"n\">elmo_output</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">elmo</span><span class=\"p\">(</span><span class=\"n\">chars</span><span class=\"p\">)</span>\n        <span class=\"n\">elmo_representations</span> <span class=\"o\">=</span> <span class=\"n\">elmo_output</span><span class=\"p\">[</span><span class=\"s2\">&quot;elmo_representations&quot;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_linear</span><span class=\"p\">:</span>\n            <span class=\"n\">elmo_representations</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_linear</span><span class=\"p\">(</span><span class=\"n\">elmo_representations</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">elmo_representations</span></div>\n\n<div class=\"viewcode-block\" id=\"ELMoEmbedding.get_output_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.elmo_embedding.ELMoEmbedding.get_output_dim\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_linear</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">project_dim</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">elmo</span><span class=\"o\">.</span><span class=\"n\">get_output_dim</span><span class=\"p\">()</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/embedding/frequent_word_embedding.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.embedding.frequent_word_embedding &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.embedding.frequent_word_embedding</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.embedding.frequent_word_embedding</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenEmbedding</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.word_embedding</span> <span class=\"k\">import</span> <span class=\"n\">WordEmbedding</span>\n\n\n<div class=\"viewcode-block\" id=\"FrequentTuningWordEmbedding\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">FrequentTuningWordEmbedding</span><span class=\"p\">(</span><span class=\"n\">TokenEmbedding</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Frequent Word Finetuning Embedding</span>\n<span class=\"sd\">    Finetuning embedding matrix, according to &#39;threshold_index&#39;</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocab)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        dropout: The number of dropout probability</span>\n<span class=\"sd\">        embed_dim: The number of embedding dimension</span>\n<span class=\"sd\">        padding_idx: If given, pads the output with the embedding vector at padding_idx</span>\n<span class=\"sd\">            (initialized to zeros) whenever it encounters the index.</span>\n<span class=\"sd\">        max_norm: If given, will renormalize the embedding vectors to have a norm lesser</span>\n<span class=\"sd\">            than this before extracting. Note: this will modify weight in-place.</span>\n<span class=\"sd\">        norm_type: The p of the p-norm to compute for the max_norm option. Default 2.</span>\n<span class=\"sd\">        scale_grad_by_freq: if given, this will scale gradients by the inverse of</span>\n<span class=\"sd\">            frequency of the words in the mini-batch. Default False.</span>\n<span class=\"sd\">        sparse: if True, gradient w.r.t. weight will be a sparse tensor.</span>\n<span class=\"sd\">            See Notes under torch.nn.Embedding for more details regarding sparse gradients.</span>\n<span class=\"sd\">        pretrained_path: pretrained vector path (eg. GloVe)</span>\n<span class=\"sd\">        trainable: finetune or fixed</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">vocab</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span>\n        <span class=\"n\">embed_dim</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n        <span class=\"n\">padding_idx</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">max_norm</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">norm_type</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">scale_grad_by_freq</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">sparse</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">pretrained_path</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">FrequentTuningWordEmbedding</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">threshold_index</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">threshold_index</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">embed_dim</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fine_tune_word_embedding</span> <span class=\"o\">=</span> <span class=\"n\">WordEmbedding</span><span class=\"p\">(</span>\n            <span class=\"n\">vocab</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span>\n            <span class=\"n\">embed_dim</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">padding_idx</span><span class=\"o\">=</span><span class=\"n\">padding_idx</span><span class=\"p\">,</span>\n            <span class=\"n\">max_norm</span><span class=\"o\">=</span><span class=\"n\">max_norm</span><span class=\"p\">,</span>\n            <span class=\"n\">norm_type</span><span class=\"o\">=</span><span class=\"n\">norm_type</span><span class=\"p\">,</span>\n            <span class=\"n\">scale_grad_by_freq</span><span class=\"o\">=</span><span class=\"n\">scale_grad_by_freq</span><span class=\"p\">,</span>\n            <span class=\"n\">sparse</span><span class=\"o\">=</span><span class=\"n\">sparse</span><span class=\"p\">,</span>\n            <span class=\"n\">pretrained_path</span><span class=\"o\">=</span><span class=\"n\">pretrained_path</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fixed_word_embedding</span> <span class=\"o\">=</span> <span class=\"n\">WordEmbedding</span><span class=\"p\">(</span>\n            <span class=\"n\">vocab</span><span class=\"p\">,</span>\n            <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span>\n            <span class=\"n\">embed_dim</span><span class=\"o\">=</span><span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"n\">padding_idx</span><span class=\"o\">=</span><span class=\"n\">padding_idx</span><span class=\"p\">,</span>\n            <span class=\"n\">max_norm</span><span class=\"o\">=</span><span class=\"n\">max_norm</span><span class=\"p\">,</span>\n            <span class=\"n\">norm_type</span><span class=\"o\">=</span><span class=\"n\">norm_type</span><span class=\"p\">,</span>\n            <span class=\"n\">scale_grad_by_freq</span><span class=\"o\">=</span><span class=\"n\">scale_grad_by_freq</span><span class=\"p\">,</span>\n            <span class=\"n\">sparse</span><span class=\"o\">=</span><span class=\"n\">sparse</span><span class=\"p\">,</span>\n            <span class=\"n\">pretrained_path</span><span class=\"o\">=</span><span class=\"n\">pretrained_path</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">dropout</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span>\n\n<div class=\"viewcode-block\" id=\"FrequentTuningWordEmbedding.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">words</span><span class=\"p\">,</span> <span class=\"n\">frequent_tuning</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">frequent_tuning</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">training</span><span class=\"p\">:</span>\n\n            <span class=\"n\">padding_mask</span> <span class=\"o\">=</span> <span class=\"n\">words</span><span class=\"o\">.</span><span class=\"n\">eq</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Fine-tuning - N the most frequent</span>\n            <span class=\"n\">fine_tune_mask</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">lt</span><span class=\"p\">(</span><span class=\"n\">words</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">threshold_index</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"n\">padding_mask</span><span class=\"o\">.</span><span class=\"n\">eq</span><span class=\"p\">(</span>\n                <span class=\"mi\">0</span>\n            <span class=\"p\">)</span>  <span class=\"c1\"># &lt; threshold_index</span>\n            <span class=\"n\">fine_tune_words</span> <span class=\"o\">=</span> <span class=\"n\">words</span> <span class=\"o\">*</span> <span class=\"n\">fine_tune_mask</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n\n            <span class=\"n\">fine_tune_embedded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fine_tune_word_embedding</span><span class=\"p\">(</span><span class=\"n\">fine_tune_words</span><span class=\"p\">)</span>\n            <span class=\"n\">fine_tune_embedded</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">masked_zero</span><span class=\"p\">(</span><span class=\"n\">fine_tune_embedded</span><span class=\"p\">,</span> <span class=\"n\">fine_tune_mask</span><span class=\"p\">)</span>\n\n            <span class=\"c1\"># Fixed - under N frequent</span>\n            <span class=\"n\">fixed_mask</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">ge</span><span class=\"p\">(</span><span class=\"n\">words</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">threshold_index</span><span class=\"p\">)</span>  <span class=\"c1\"># &gt;= threshold_index</span>\n\n            <span class=\"n\">fixed_embedeed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fixed_word_embedding</span><span class=\"p\">(</span><span class=\"n\">words</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">detach</span><span class=\"p\">()</span>  <span class=\"c1\"># Fixed</span>\n            <span class=\"n\">fixed_embedeed</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">masked_zero</span><span class=\"p\">(</span><span class=\"n\">fixed_embedeed</span><span class=\"p\">,</span> <span class=\"n\">fixed_mask</span><span class=\"p\">)</span>\n\n            <span class=\"n\">embedded_words</span> <span class=\"o\">=</span> <span class=\"n\">fine_tune_embedded</span> <span class=\"o\">+</span> <span class=\"n\">fixed_embedeed</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">embedded_words</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fixed_word_embedding</span><span class=\"p\">(</span><span class=\"n\">words</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">embedded_words</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"FrequentTuningWordEmbedding.get_output_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding.get_output_dim\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/embedding/sparse_feature.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.embedding.sparse_feature &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.embedding.sparse_feature</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.embedding.sparse_feature</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.vocabulary</span> <span class=\"k\">import</span> <span class=\"n\">Vocab</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenEmbedding</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.word_embedding</span> <span class=\"k\">import</span> <span class=\"n\">WordEmbedding</span>\n\n\n<div class=\"viewcode-block\" id=\"SparseFeature\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseFeature\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SparseFeature</span><span class=\"p\">(</span><span class=\"n\">TokenEmbedding</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Sparse Feature</span>\n\n<span class=\"sd\">    1. Sparse to Embedding</span>\n<span class=\"sd\">    2. One Hot Encoding</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocab)</span>\n<span class=\"sd\">        embed_type: The type of embedding [one_hot|embedding]</span>\n<span class=\"sd\">        feature_count: The number of feature count</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        params: additional parameters for embedding module</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">embed_type</span><span class=\"p\">,</span> <span class=\"n\">feature_count</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"p\">{}):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SparseFeature</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">feature_count</span> <span class=\"o\">=</span> <span class=\"n\">feature_count</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">embed_type</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;embedding&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">embed_module</span> <span class=\"o\">=</span> <span class=\"n\">SparseToEmbedding</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">embed_module</span> <span class=\"o\">=</span> <span class=\"n\">OneHotEncoding</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_modules</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">ModuleList</span><span class=\"p\">(</span>\n            <span class=\"p\">[</span><span class=\"n\">embed_module</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">params</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">feature_count</span><span class=\"p\">)]</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">indexs</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"n\">feature_count</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">long</span><span class=\"p\">()</span>\n        <span class=\"n\">indexs</span> <span class=\"o\">=</span> <span class=\"n\">indexs</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"n\">feature_count</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">indexs</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">indexs</span><span class=\"p\">,</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"SparseFeature.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseFeature.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"n\">embedded_inputs</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_modules</span><span class=\"p\">)):</span>\n            <span class=\"n\">tensors</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">index_select</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">indexs</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">squeeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">embedded</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_modules</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">](</span><span class=\"n\">tensors</span><span class=\"p\">)</span>\n\n            <span class=\"n\">embedded_inputs</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">embedded</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"n\">embedded_inputs</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"SparseFeature.get_output_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseFeature.get_output_dim\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">get_output_dim</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_modules</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"SparseToEmbedding\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseToEmbedding\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SparseToEmbedding</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Sparse to Embedding</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_name: token_name</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        dropout: The number of dropout probability</span>\n<span class=\"sd\">        embed_dim: The number of embedding dimension</span>\n<span class=\"sd\">        padding_idx: If given, pads the output with the embedding vector at padding_idx</span>\n<span class=\"sd\">            (initialized to zeros) whenever it encounters the index.</span>\n<span class=\"sd\">        max_norm: If given, will renormalize the embedding vectors to have a norm lesser</span>\n<span class=\"sd\">            than this before extracting. Note: this will modify weight in-place.</span>\n<span class=\"sd\">        norm_type: The p of the p-norm to compute for the max_norm option. Default 2.</span>\n<span class=\"sd\">        scale_grad_by_freq: if given, this will scale gradients by the inverse of</span>\n<span class=\"sd\">            frequency of the words in the mini-batch. Default False.</span>\n<span class=\"sd\">        sparse: if True, gradient w.r.t. weight will be a sparse tensor.</span>\n<span class=\"sd\">            See Notes under torch.nn.Embedding for more details regarding sparse gradients.</span>\n<span class=\"sd\">        pretrained_path: pretrained vector path (eg. GloVe)</span>\n<span class=\"sd\">        trainable: finetune or fixed</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">index</span><span class=\"p\">,</span>\n        <span class=\"n\">token_name</span><span class=\"p\">,</span>\n        <span class=\"n\">classes</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span>\n        <span class=\"n\">embed_dim</span><span class=\"o\">=</span><span class=\"mi\">15</span><span class=\"p\">,</span>\n        <span class=\"n\">trainable</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">padding_idx</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">max_norm</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">norm_type</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">scale_grad_by_freq</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">sparse</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SparseToEmbedding</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">embed_dim</span>\n\n        <span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">Vocab</span><span class=\"p\">(</span><span class=\"n\">token_name</span><span class=\"p\">)</span>\n        <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"p\">()</span>\n        <span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">classes</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">]:</span>\n            <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span>\n\n        <span class=\"n\">embedding_params</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;vocab&quot;</span><span class=\"p\">:</span> <span class=\"n\">vocab</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;dropout&quot;</span><span class=\"p\">:</span> <span class=\"n\">dropout</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;embed_dim&quot;</span><span class=\"p\">:</span> <span class=\"n\">embed_dim</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;trainable&quot;</span><span class=\"p\">:</span> <span class=\"n\">trainable</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;padding_idx&quot;</span><span class=\"p\">:</span> <span class=\"n\">padding_idx</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;max_norm&quot;</span><span class=\"p\">:</span> <span class=\"n\">max_norm</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;norm_type&quot;</span><span class=\"p\">:</span> <span class=\"n\">norm_type</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;scale_grad_by_freq&quot;</span><span class=\"p\">:</span> <span class=\"n\">scale_grad_by_freq</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;sparse&quot;</span><span class=\"p\">:</span> <span class=\"n\">sparse</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">WordEmbedding</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">embedding_params</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"SparseToEmbedding.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseToEmbedding.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embedding</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"SparseToEmbedding.get_output_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseToEmbedding.get_output_dim\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"OneHotEncoding\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.OneHotEncoding\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">OneHotEncoding</span><span class=\"p\">(</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Sparse to one-hot encoding</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocab)</span>\n\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">classes</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">OneHotEncoding</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">Vocab</span><span class=\"p\">(</span><span class=\"n\">token_name</span><span class=\"p\">)</span>\n        <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"p\">()</span>\n        <span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">classes</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">]:</span>\n            <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span>\n\n        <span class=\"n\">num_class</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_class</span> <span class=\"o\">=</span> <span class=\"n\">num_class</span>\n\n        <span class=\"n\">one_hot_encoding</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">eye</span><span class=\"p\">(</span><span class=\"n\">num_class</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">one_hots</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">one_hot_encoding</span><span class=\"p\">,</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"OneHotEncoding.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.OneHotEncoding.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_class</span> <span class=\"o\">==</span> <span class=\"mi\">4</span><span class=\"p\">:</span>\n            <span class=\"n\">inputs</span> <span class=\"o\">=</span> <span class=\"n\">inputs</span> <span class=\"o\">-</span> <span class=\"mi\">2</span>  <span class=\"c1\"># make 0, 1 binary_feature</span>\n            <span class=\"k\">return</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">float</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">unsqueeze</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">embedding</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">one_hots</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"OneHotEncoding.get_output_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.OneHotEncoding.get_output_dim\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_class</span> <span class=\"o\">==</span> <span class=\"mi\">4</span><span class=\"p\">:</span>  <span class=\"c1\"># binary_feature</span>\n            <span class=\"k\">return</span> <span class=\"mi\">1</span>  <span class=\"c1\"># 0 or 1</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">num_class</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/embedding/word_embedding.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.embedding.word_embedding &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.embedding.word_embedding</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.embedding.word_embedding</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn</span> <span class=\"k\">as</span> <span class=\"nn\">nn</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch.nn.functional</span> <span class=\"k\">as</span> <span class=\"nn\">F</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span><span class=\"p\">,</span> <span class=\"n\">DataHandler</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenEmbedding</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"WordEmbedding\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.word_embedding.WordEmbedding\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">WordEmbedding</span><span class=\"p\">(</span><span class=\"n\">TokenEmbedding</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Word Embedding</span>\n<span class=\"sd\">    Default Token Embedding</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocab)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        dropout: The number of dropout probability</span>\n<span class=\"sd\">        embed_dim: The number of embedding dimension</span>\n<span class=\"sd\">        padding_idx: If given, pads the output with the embedding vector at padding_idx</span>\n<span class=\"sd\">            (initialized to zeros) whenever it encounters the index.</span>\n<span class=\"sd\">        max_norm: If given, will renormalize the embedding vectors to have a norm lesser</span>\n<span class=\"sd\">            than this before extracting. Note: this will modify weight in-place.</span>\n<span class=\"sd\">        norm_type: The p of the p-norm to compute for the max_norm option. Default 2.</span>\n<span class=\"sd\">        scale_grad_by_freq: if given, this will scale gradients by the inverse of</span>\n<span class=\"sd\">            frequency of the words in the mini-batch. Default False.</span>\n<span class=\"sd\">        sparse: if True, gradient w.r.t. weight will be a sparse tensor.</span>\n<span class=\"sd\">            See Notes under torch.nn.Embedding for more details regarding sparse gradients.</span>\n<span class=\"sd\">        pretrained_path: pretrained vector path (eg. GloVe)</span>\n<span class=\"sd\">        trainable: finetune or fixed</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">vocab</span><span class=\"p\">,</span>\n        <span class=\"n\">dropout</span><span class=\"o\">=</span><span class=\"mf\">0.2</span><span class=\"p\">,</span>\n        <span class=\"n\">embed_dim</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n        <span class=\"n\">padding_idx</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">max_norm</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">norm_type</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n        <span class=\"n\">scale_grad_by_freq</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">sparse</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"n\">pretrained_path</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">trainable</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">WordEmbedding</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span> <span class=\"o\">=</span> <span class=\"n\">DataHandler</span><span class=\"p\">(</span><span class=\"n\">cache_path</span><span class=\"o\">=</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">PRETRAINED_VECTOR</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span> <span class=\"o\">=</span> <span class=\"n\">embed_dim</span>\n        <span class=\"k\">if</span> <span class=\"n\">dropout</span> <span class=\"ow\">and</span> <span class=\"n\">dropout</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Dropout</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"o\">=</span><span class=\"n\">dropout</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span> <span class=\"o\">=</span> <span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">pretrained_path</span><span class=\"p\">:</span>\n            <span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_read_pretrained_file</span><span class=\"p\">(</span><span class=\"n\">pretrained_path</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">weight</span><span class=\"p\">,</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"n\">trainable</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_init_weight</span><span class=\"p\">(</span><span class=\"n\">trainable</span><span class=\"o\">=</span><span class=\"n\">trainable</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># nn.functional.embedding = optional paramters</span>\n        <span class=\"c1\">#  (padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse)</span>\n        <span class=\"c1\"># check - https://pytorch.org/docs/master/nn.html#torch.nn.functional.embeddin\\</span>\n        <span class=\"c1\">#    ://pytorch.org/docs/master/nn.html#torch.nn.functional.embedding</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">padding_idx</span> <span class=\"o\">=</span> <span class=\"n\">padding_idx</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_norm</span> <span class=\"o\">=</span> <span class=\"n\">max_norm</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">norm_type</span> <span class=\"o\">=</span> <span class=\"n\">norm_type</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">scale_grad_by_freq</span> <span class=\"o\">=</span> <span class=\"n\">scale_grad_by_freq</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sparse</span> <span class=\"o\">=</span> <span class=\"n\">sparse</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_init_weight</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">trainable</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_vocab_size</span><span class=\"p\">(),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span><span class=\"p\">)</span>\n        <span class=\"n\">weight</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Parameter</span><span class=\"p\">(</span><span class=\"n\">weight</span><span class=\"p\">,</span> <span class=\"n\">requires_grad</span><span class=\"o\">=</span><span class=\"n\">trainable</span><span class=\"p\">)</span>\n        <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"o\">.</span><span class=\"n\">xavier_uniform_</span><span class=\"p\">(</span><span class=\"n\">weight</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">weight</span>\n\n<div class=\"viewcode-block\" id=\"WordEmbedding.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.word_embedding.WordEmbedding.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">words</span><span class=\"p\">):</span>\n        <span class=\"n\">input_size</span> <span class=\"o\">=</span> <span class=\"n\">words</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">input_size</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n            <span class=\"n\">words</span> <span class=\"o\">=</span> <span class=\"n\">words</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">input_size</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n\n        <span class=\"n\">embedded_words</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"o\">.</span><span class=\"n\">embedding</span><span class=\"p\">(</span>\n            <span class=\"n\">words</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">weight</span><span class=\"p\">,</span>\n            <span class=\"n\">padding_idx</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">padding_idx</span><span class=\"p\">,</span>\n            <span class=\"n\">max_norm</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_norm</span><span class=\"p\">,</span>\n            <span class=\"n\">norm_type</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">norm_type</span><span class=\"p\">,</span>\n            <span class=\"n\">scale_grad_by_freq</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">scale_grad_by_freq</span><span class=\"p\">,</span>\n            <span class=\"n\">sparse</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sparse</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">input_size</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n            <span class=\"n\">embedded_size</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">input_size</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"n\">embedded_words</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)]</span>\n            <span class=\"n\">embedded_words</span> <span class=\"o\">=</span> <span class=\"n\">embedded_words</span><span class=\"o\">.</span><span class=\"n\">view</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">embedded_size</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dropout</span><span class=\"p\">(</span><span class=\"n\">embedded_words</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_read_pretrained_file</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">file_path</span><span class=\"p\">):</span>\n        <span class=\"n\">words_to_keep</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_all_tokens</span><span class=\"p\">())</span>\n        <span class=\"n\">vocab_size</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_vocab_size</span><span class=\"p\">()</span>\n        <span class=\"n\">embeddings</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n        <span class=\"c1\"># First we read the embeddings from the file, only keeping vectors for the words we need.</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Reading embeddings from file&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">file_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"n\">return_path</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">file_path</span><span class=\"p\">,</span> <span class=\"s2\">&quot;rb&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">embeddings_file</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">embeddings_file</span><span class=\"p\">:</span>\n                <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">decode</span><span class=\"p\">(</span><span class=\"s2\">&quot;utf-8&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">rstrip</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot; &quot;</span><span class=\"p\">)</span>\n\n                <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">fields</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span> <span class=\"o\">!=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span><span class=\"p\">:</span>\n                    <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span>\n                        <span class=\"n\">f</span><span class=\"s2\">&quot;Found line with wrong number of dimensions (expected </span><span class=\"si\">{self.embed_dim}</span><span class=\"s2\">, was {len(fields)}): </span><span class=\"si\">{line}</span><span class=\"s2\">&quot;</span>\n                    <span class=\"p\">)</span>\n                    <span class=\"k\">continue</span>\n\n                <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">fields</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n                <span class=\"k\">if</span> <span class=\"n\">word</span> <span class=\"ow\">in</span> <span class=\"n\">words_to_keep</span><span class=\"p\">:</span>\n                    <span class=\"n\">vector</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">asarray</span><span class=\"p\">(</span><span class=\"n\">fields</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:],</span> <span class=\"n\">dtype</span><span class=\"o\">=</span><span class=\"s2\">&quot;float32&quot;</span><span class=\"p\">)</span>\n                    <span class=\"n\">embeddings</span><span class=\"p\">[</span><span class=\"n\">word</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">vector</span>\n\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">embeddings</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;No embeddings of correct dimension found. check input dimension value&quot;</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"n\">all_embeddings</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">asarray</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">embeddings</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()))</span>\n        <span class=\"n\">embeddings_mean</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">mean</span><span class=\"p\">(</span><span class=\"n\">all_embeddings</span><span class=\"p\">))</span>\n        <span class=\"n\">embeddings_std</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">std</span><span class=\"p\">(</span><span class=\"n\">all_embeddings</span><span class=\"p\">))</span>\n        <span class=\"c1\"># Now we initialize the weight matrix for an embedding layer, starting with random vectors,</span>\n        <span class=\"c1\"># then filling in the word vectors we just read.</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Initializing pre-trained embedding layer&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">embedding_matrix</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">vocab_size</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">normal_</span><span class=\"p\">(</span>\n            <span class=\"n\">embeddings_mean</span><span class=\"p\">,</span> <span class=\"n\">embeddings_std</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">match_count</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">vocab_size</span><span class=\"p\">):</span>\n            <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_token</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">word</span> <span class=\"ow\">in</span> <span class=\"n\">embeddings</span><span class=\"p\">:</span>\n                <span class=\"n\">embedding_matrix</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">FloatTensor</span><span class=\"p\">(</span><span class=\"n\">embeddings</span><span class=\"p\">[</span><span class=\"n\">word</span><span class=\"p\">])</span>\n                <span class=\"n\">match_count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"c1\"># f&quot;Word {word} was not found in the embedding file. Initialising randomly.&quot;</span>\n                <span class=\"k\">pass</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Match embedding vocab size: </span><span class=\"si\">{match_count}</span><span class=\"s2\">.  [</span><span class=\"si\">{match_count}</span><span class=\"s2\">/</span><span class=\"si\">{vocab_size}</span><span class=\"s2\">]&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">embedding_matrix</span>\n\n<div class=\"viewcode-block\" id=\"WordEmbedding.get_output_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.embedding.html#claf.tokens.embedding.word_embedding.WordEmbedding.get_output_dim\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_output_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dim</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/hangul.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.hangul &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.hangul</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.hangul</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"ch\">#!/usr/bin/env python</span>\n<span class=\"c1\"># encoding: utf-8</span>\n\n<span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">Hangulpy.py</span>\n<span class=\"sd\">Copyright (C) 2012 Ryan Rho, Hyunwoo Cho</span>\n<span class=\"sd\">Permission is hereby granted, free of charge, to any person obtaining a copy of</span>\n<span class=\"sd\">this software and associated documentation files (the &quot;Software&quot;), to deal in</span>\n<span class=\"sd\">the Software without restriction, including without limitation the rights to</span>\n<span class=\"sd\">use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies</span>\n<span class=\"sd\">of the Software, and to permit persons to whom the Software is furnished to do</span>\n<span class=\"sd\">so, subject to the following conditions:</span>\n<span class=\"sd\">The above copyright notice and this permission notice shall be included in all</span>\n<span class=\"sd\">copies or substantial portions of the Software.</span>\n<span class=\"sd\">THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>\n<span class=\"sd\">IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>\n<span class=\"sd\">FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>\n<span class=\"sd\">AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>\n<span class=\"sd\">LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span>\n<span class=\"sd\">OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>\n<span class=\"sd\">SOFTWARE.</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">string</span>\n<span class=\"kn\">import</span> <span class=\"nn\">re</span>\n\n<span class=\"c1\">################################################################################</span>\n<span class=\"c1\"># Hangul Unicode Variables</span>\n<span class=\"c1\">################################################################################</span>\n\n<span class=\"c1\"># Code = 0xAC00 + (Chosung_index * NUM_JOONGSUNGS * NUM_JONGSUNGS) + (Joongsung_index * NUM_JONGSUNGS) + (Jongsung_index)</span>\n<span class=\"n\">CHOSUNGS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;ㄱ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄲ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄴ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄷ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄸ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄹ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅁ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅂ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅃ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅅ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅆ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅇ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅈ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅉ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅊ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅋ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅌ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅍ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅎ&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n<span class=\"n\">JOONGSUNGS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;ㅏ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅐ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅑ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅒ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅓ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅔ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅕ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅖ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅗ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅘ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅙ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅚ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅛ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅜ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅝ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅞ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅟ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅠ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅡ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅢ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅣ&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n<span class=\"n\">JONGSUNGS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄱ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄲ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄳ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄴ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄵ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄶ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄷ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄹ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄺ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄻ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄼ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄽ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄾ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㄿ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅀ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅁ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅂ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅄ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅅ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅆ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅇ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅈ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅊ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅋ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅌ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅍ&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;ㅎ&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n\n<span class=\"n\">NUM_CHOSUNGS</span> <span class=\"o\">=</span> <span class=\"mi\">19</span>\n<span class=\"n\">NUM_JOONGSUNGS</span> <span class=\"o\">=</span> <span class=\"mi\">21</span>\n<span class=\"n\">NUM_JONGSUNGS</span> <span class=\"o\">=</span> <span class=\"mi\">28</span>\n\n<span class=\"n\">FIRST_HANGUL_UNICODE</span> <span class=\"o\">=</span> <span class=\"mh\">0xAC00</span>  <span class=\"c1\"># &#39;가&#39;</span>\n<span class=\"n\">LAST_HANGUL_UNICODE</span> <span class=\"o\">=</span> <span class=\"mh\">0xD7A3</span>  <span class=\"c1\"># &#39;힣&#39;</span>\n\n<span class=\"c1\">################################################################################</span>\n<span class=\"c1\"># Boolean Hangul functions</span>\n<span class=\"c1\">################################################################################</span>\n\n\n<div class=\"viewcode-block\" id=\"is_hangul\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.is_hangul\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">phrase</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;Check whether the phrase is Hangul.</span>\n<span class=\"sd\">    This method ignores white spaces, punctuations, and numbers.</span>\n<span class=\"sd\">    @param phrase a target string</span>\n<span class=\"sd\">    @return True if the phrase is Hangul. False otherwise.&quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># If the input is only one character, test whether the character is Hangul.</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">phrase</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">is_all_hangul</span><span class=\"p\">(</span><span class=\"n\">phrase</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Remove all white spaces, punctuations, numbers.</span>\n    <span class=\"n\">exclude</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">whitespace</span> <span class=\"o\">+</span> <span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">punctuation</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;0123456789&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">phrase</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">ch</span> <span class=\"k\">for</span> <span class=\"n\">ch</span> <span class=\"ow\">in</span> <span class=\"n\">phrase</span> <span class=\"k\">if</span> <span class=\"n\">ch</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">exclude</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">is_all_hangul</span><span class=\"p\">(</span><span class=\"n\">phrase</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"is_all_hangul\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.is_all_hangul\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">is_all_hangul</span><span class=\"p\">(</span><span class=\"n\">phrase</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;Check whether the phrase contains all Hangul letters</span>\n<span class=\"sd\">    @param phrase a target string</span>\n<span class=\"sd\">    @return True if the phrase only consists of Hangul. False otherwise.&quot;&quot;&quot;</span>\n\n    <span class=\"k\">for</span> <span class=\"n\">unicode_value</span> <span class=\"ow\">in</span> <span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"k\">lambda</span> <span class=\"n\">letter</span><span class=\"p\">:</span> <span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"n\">letter</span><span class=\"p\">),</span> <span class=\"n\">phrase</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">unicode_value</span> <span class=\"o\">&lt;</span> <span class=\"n\">FIRST_HANGUL_UNICODE</span> <span class=\"ow\">or</span> <span class=\"n\">unicode_value</span> <span class=\"o\">&gt;</span> <span class=\"n\">LAST_HANGUL_UNICODE</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Check whether the letter is chosungs, joongsungs, or jongsungs.</span>\n            <span class=\"k\">if</span> <span class=\"n\">unicode_value</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"k\">lambda</span> <span class=\"n\">v</span><span class=\"p\">:</span> <span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">),</span> <span class=\"n\">CHOSUNGS</span> <span class=\"o\">+</span> <span class=\"n\">JOONGSUNGS</span> <span class=\"o\">+</span> <span class=\"n\">JONGSUNGS</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:]):</span>\n                <span class=\"k\">return</span> <span class=\"kc\">False</span>\n    <span class=\"k\">return</span> <span class=\"kc\">True</span></div>\n\n\n<div class=\"viewcode-block\" id=\"has_jongsung\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.has_jongsung\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">has_jongsung</span><span class=\"p\">(</span><span class=\"n\">letter</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;Check whether this letter contains Jongsung&quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">letter</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">Exception</span><span class=\"p\">(</span><span class=\"s2\">&quot;The target string must be one letter.&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">letter</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span><span class=\"s2\">&quot;The target string must be Hangul&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">unicode_value</span> <span class=\"o\">=</span> <span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"n\">letter</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">unicode_value</span> <span class=\"o\">-</span> <span class=\"n\">FIRST_HANGUL_UNICODE</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"n\">NUM_JONGSUNGS</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span></div>\n\n\n<div class=\"viewcode-block\" id=\"has_batchim\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.has_batchim\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">has_batchim</span><span class=\"p\">(</span><span class=\"n\">letter</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;This method is the same as has_jongsung()&quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">has_jongsung</span><span class=\"p\">(</span><span class=\"n\">letter</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"has_approximant\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.has_approximant\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">has_approximant</span><span class=\"p\">(</span><span class=\"n\">letter</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;Approximant makes complex vowels, such as ones starting with y or w.</span>\n<span class=\"sd\">    In Korean there is a unique approximant euㅡ making uiㅢ, but ㅢ does not make many irregularities.&quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">letter</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">Exception</span><span class=\"p\">(</span><span class=\"s2\">&quot;The target string must be one letter.&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">letter</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span><span class=\"s2\">&quot;The target string must be Hangul&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">jaso</span> <span class=\"o\">=</span> <span class=\"n\">decompose</span><span class=\"p\">(</span><span class=\"n\">letter</span><span class=\"p\">)</span>\n    <span class=\"n\">diphthong</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">17</span><span class=\"p\">)</span>\n    <span class=\"c1\"># [u&#39;ㅑ&#39;,u&#39;ㅒ&#39;,&#39;,u&#39;ㅕ&#39;,u&#39;ㅖ&#39;,u&#39;ㅘ&#39;,u&#39;ㅙ&#39;,u&#39;ㅛ&#39;,u&#39;ㅝ&#39;,u&#39;ㅞ&#39;,u&#39;ㅠ&#39;]</span>\n    <span class=\"c1\"># excluded &#39;ㅢ&#39; because y- and w-based complex vowels are irregular.</span>\n    <span class=\"c1\"># vowels with umlauts (ㅐ, ㅔ, ㅚ, ㅟ) are not considered complex vowels.</span>\n    <span class=\"k\">return</span> <span class=\"n\">jaso</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"ow\">in</span> <span class=\"n\">diphthong</span></div>\n\n\n<span class=\"c1\">################################################################################</span>\n<span class=\"c1\"># Decomposition &amp; Combination</span>\n<span class=\"c1\">################################################################################</span>\n\n\n<div class=\"viewcode-block\" id=\"compose\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.compose\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">compose</span><span class=\"p\">(</span><span class=\"n\">chosung</span><span class=\"p\">,</span> <span class=\"n\">joongsung</span><span class=\"p\">,</span> <span class=\"n\">jongsung</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;This function returns a Hangul letter by composing the specified chosung, joongsung, and jongsung.</span>\n<span class=\"sd\">    @param chosung</span>\n<span class=\"sd\">    @param joongsung</span>\n<span class=\"sd\">    @param jongsung the terminal Hangul letter. This is optional if you do not need a jongsung.&quot;&quot;&quot;</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">jongsung</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">jongsung</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">chosung_index</span> <span class=\"o\">=</span> <span class=\"n\">CHOSUNGS</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">chosung</span><span class=\"p\">)</span>\n        <span class=\"n\">joongsung_index</span> <span class=\"o\">=</span> <span class=\"n\">JOONGSUNGS</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">joongsung</span><span class=\"p\">)</span>\n        <span class=\"n\">jongsung_index</span> <span class=\"o\">=</span> <span class=\"n\">JONGSUNGS</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">jongsung</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"ne\">Exception</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span>\n            <span class=\"s2\">&quot;No valid Hangul character can be generated using given combination of chosung, joongsung, and jongsung.&quot;</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"nb\">chr</span><span class=\"p\">(</span>\n        <span class=\"mh\">0xAC00</span>\n        <span class=\"o\">+</span> <span class=\"n\">chosung_index</span> <span class=\"o\">*</span> <span class=\"n\">NUM_JOONGSUNGS</span> <span class=\"o\">*</span> <span class=\"n\">NUM_JONGSUNGS</span>\n        <span class=\"o\">+</span> <span class=\"n\">joongsung_index</span> <span class=\"o\">*</span> <span class=\"n\">NUM_JONGSUNGS</span>\n        <span class=\"o\">+</span> <span class=\"n\">jongsung_index</span>\n    <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"decompose\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.decompose\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">decompose</span><span class=\"p\">(</span><span class=\"n\">hangul_letter</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;This function returns letters by decomposing the specified Hangul letter.&quot;&quot;&quot;</span>\n\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">hangul_letter</span><span class=\"p\">)</span> <span class=\"o\">&lt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotLetterException</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">hangul_letter</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">code</span> <span class=\"o\">=</span> <span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"n\">hangul_letter</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">FIRST_HANGUL_UNICODE</span>\n    <span class=\"n\">jongsung_index</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">code</span> <span class=\"o\">%</span> <span class=\"n\">NUM_JONGSUNGS</span><span class=\"p\">)</span>\n    <span class=\"n\">code</span> <span class=\"o\">/=</span> <span class=\"n\">NUM_JONGSUNGS</span>\n    <span class=\"n\">joongsung_index</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">code</span> <span class=\"o\">%</span> <span class=\"n\">NUM_JOONGSUNGS</span><span class=\"p\">)</span>\n    <span class=\"n\">code</span> <span class=\"o\">/=</span> <span class=\"n\">NUM_JOONGSUNGS</span>\n    <span class=\"n\">chosung_index</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">code</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">CHOSUNGS</span><span class=\"p\">[</span><span class=\"n\">chosung_index</span><span class=\"p\">],</span> <span class=\"n\">JOONGSUNGS</span><span class=\"p\">[</span><span class=\"n\">joongsung_index</span><span class=\"p\">],</span> <span class=\"n\">JONGSUNGS</span><span class=\"p\">[</span><span class=\"n\">jongsung_index</span><span class=\"p\">])</span></div>\n\n\n<span class=\"c1\">################################################################################</span>\n<span class=\"c1\"># Josa functions</span>\n<span class=\"c1\">################################################################################</span>\n\n\n<div class=\"viewcode-block\" id=\"josa_en\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.josa_en\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">josa_en</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;add josa either &#39;은&#39; or &#39;는&#39; at the end of this word&quot;&quot;&quot;</span>\n    <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">last_letter</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">josa</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;은&quot;</span> <span class=\"k\">if</span> <span class=\"n\">has_jongsung</span><span class=\"p\">(</span><span class=\"n\">last_letter</span><span class=\"p\">)</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;는&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">word</span> <span class=\"o\">+</span> <span class=\"n\">josa</span></div>\n\n\n<div class=\"viewcode-block\" id=\"josa_eg\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.josa_eg\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">josa_eg</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;add josa either &#39;이&#39; or &#39;가&#39; at the end of this word&quot;&quot;&quot;</span>\n    <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">last_letter</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">josa</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;이&quot;</span> <span class=\"k\">if</span> <span class=\"n\">has_jongsung</span><span class=\"p\">(</span><span class=\"n\">last_letter</span><span class=\"p\">)</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;가&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">word</span> <span class=\"o\">+</span> <span class=\"n\">josa</span></div>\n\n\n<div class=\"viewcode-block\" id=\"josa_el\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.josa_el\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">josa_el</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;add josa either &#39;을&#39; or &#39;를&#39; at the end of this word&quot;&quot;&quot;</span>\n    <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">last_letter</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">josa</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;을&quot;</span> <span class=\"k\">if</span> <span class=\"n\">has_jongsung</span><span class=\"p\">(</span><span class=\"n\">last_letter</span><span class=\"p\">)</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;를&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">word</span> <span class=\"o\">+</span> <span class=\"n\">josa</span></div>\n\n\n<div class=\"viewcode-block\" id=\"josa_ro\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.josa_ro\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">josa_ro</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;add josa either &#39;으로&#39; or &#39;로&#39; at the end of this word&quot;&quot;&quot;</span>\n    <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">last_letter</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">has_jongsung</span><span class=\"p\">(</span><span class=\"n\">last_letter</span><span class=\"p\">):</span>\n        <span class=\"n\">josa</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;로&quot;</span>\n    <span class=\"k\">elif</span> <span class=\"p\">(</span><span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"n\">last_letter</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">FIRST_HANGUL_UNICODE</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"n\">NUM_JONGSUNGS</span> <span class=\"o\">==</span> <span class=\"mi\">9</span><span class=\"p\">:</span>  <span class=\"c1\"># ㄹ</span>\n        <span class=\"n\">josa</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;로&quot;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">josa</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;으로&quot;</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">word</span> <span class=\"o\">+</span> <span class=\"n\">josa</span></div>\n\n\n<div class=\"viewcode-block\" id=\"josa_gwa\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.josa_gwa\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">josa_gwa</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;add josa either &#39;과&#39; or &#39;와&#39; at the end of this word&quot;&quot;&quot;</span>\n    <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">last_letter</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">josa</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;과&quot;</span> <span class=\"k\">if</span> <span class=\"n\">has_jongsung</span><span class=\"p\">(</span><span class=\"n\">last_letter</span><span class=\"p\">)</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;와&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">word</span> <span class=\"o\">+</span> <span class=\"n\">josa</span></div>\n\n\n<div class=\"viewcode-block\" id=\"josa_ida\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.josa_ida\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">josa_ida</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;add josa either &#39;이다&#39; or &#39;다&#39; at the end of this word&quot;&quot;&quot;</span>\n    <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">last_letter</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">josa</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;이다&quot;</span> <span class=\"k\">if</span> <span class=\"n\">has_jongsung</span><span class=\"p\">(</span><span class=\"n\">last_letter</span><span class=\"p\">)</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;다&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">word</span> <span class=\"o\">+</span> <span class=\"n\">josa</span></div>\n\n\n<span class=\"c1\">################################################################################</span>\n<span class=\"c1\"># Prefixes and suffixes</span>\n<span class=\"c1\"># Practice area; need more organization</span>\n<span class=\"c1\">################################################################################</span>\n\n\n<div class=\"viewcode-block\" id=\"add_ryul\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.add_ryul\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_ryul</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;add suffix either &#39;률&#39; or &#39;율&#39; at the end of this word&quot;&quot;&quot;</span>\n    <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">last_letter</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">has_jongsung</span><span class=\"p\">(</span><span class=\"n\">last_letter</span><span class=\"p\">):</span>\n        <span class=\"n\">ryul</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;율&quot;</span>\n    <span class=\"k\">elif</span> <span class=\"p\">(</span><span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"n\">last_letter</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">FIRST_HANGUL_UNICODE</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"n\">NUM_JONGSUNGS</span> <span class=\"o\">==</span> <span class=\"mi\">4</span><span class=\"p\">:</span>  <span class=\"c1\"># ㄴ</span>\n        <span class=\"n\">ryul</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;율&quot;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">ryul</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;률&quot;</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">word</span> <span class=\"o\">+</span> <span class=\"n\">ryul</span></div>\n\n\n<span class=\"c1\">################################################################################</span>\n<span class=\"c1\"># The formatter, or ultimately, a template system</span>\n<span class=\"c1\"># Practice area; need more organization</span>\n<span class=\"c1\">################################################################################</span>\n\n\n<div class=\"viewcode-block\" id=\"ili\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.ili\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">ili</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"sd\">&quot;&quot;&quot;convert {가} or {이} to their correct respective particles automagically.&quot;&quot;&quot;</span>\n    <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">NotHangulException</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">last_letter</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"p\">[</span><span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">{가}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">{가}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s2\">&quot;이&quot;</span> <span class=\"k\">if</span> <span class=\"n\">has_jongsung</span><span class=\"p\">(</span><span class=\"n\">last_letter</span><span class=\"p\">)</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;가&quot;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">last_letter</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"p\">[</span><span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">{이}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">{이}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s2\">&quot;이&quot;</span> <span class=\"k\">if</span> <span class=\"n\">has_jongsung</span><span class=\"p\">(</span><span class=\"n\">last_letter</span><span class=\"p\">)</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;가&quot;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">word</span></div>\n\n\n<span class=\"c1\">################################################################################</span>\n<span class=\"c1\"># Exceptions</span>\n<span class=\"c1\">################################################################################</span>\n\n\n<div class=\"viewcode-block\" id=\"NotHangulException\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.NotHangulException\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">NotHangulException</span><span class=\"p\">(</span><span class=\"ne\">Exception</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">pass</span></div>\n\n\n<div class=\"viewcode-block\" id=\"NotLetterException\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.NotLetterException\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">NotLetterException</span><span class=\"p\">(</span><span class=\"ne\">Exception</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">pass</span></div>\n\n\n<div class=\"viewcode-block\" id=\"NotWordException\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.hangul.NotWordException\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">NotWordException</span><span class=\"p\">(</span><span class=\"ne\">Exception</span><span class=\"p\">):</span>  <span class=\"c1\"># pragma: no cover</span>\n    <span class=\"k\">pass</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/indexer/base.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.indexer.base &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.indexer.base</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.indexer.base</h1><div class=\"highlight\"><pre>\n<div class=\"viewcode-block\" id=\"TokenIndexer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.base.TokenIndexer\">[docs]</a><span></span><span class=\"k\">class</span> <span class=\"nc\">TokenIndexer</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Token Indexer</span>\n\n<span class=\"sd\">    indexing tokens (eg. &#39;hi&#39; -&gt; 4)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizer</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">param_key</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizer</span>\n\n<div class=\"viewcode-block\" id=\"TokenIndexer.index\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.base.TokenIndexer.index\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; indexing function &quot;&quot;&quot;</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"TokenIndexer.set_vocab\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.base.TokenIndexer.set_vocab\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">set_vocab</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/indexer/bert_indexer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.indexer.bert_indexer &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.indexer.bert_indexer</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.indexer.bert_indexer</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenIndexer</span>\n\n\n<div class=\"viewcode-block\" id=\"BertIndexer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.bert_indexer.BertIndexer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">BertIndexer</span><span class=\"p\">(</span><span class=\"n\">TokenIndexer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Bert Token Indexer</span>\n\n<span class=\"sd\">    * Property</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocabulary)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        tokenizer: SubwordTokenizer</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lowercase: word token to lowercase</span>\n<span class=\"sd\">        insert_start: insert start_token to first</span>\n<span class=\"sd\">        insert_end: append end_token</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizer</span><span class=\"p\">,</span> <span class=\"n\">do_tokenize</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BertIndexer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">tokenizer</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">do_tokenize</span> <span class=\"o\">=</span> <span class=\"n\">do_tokenize</span>\n\n<div class=\"viewcode-block\" id=\"BertIndexer.index\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.bert_indexer.BertIndexer.index\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"n\">input_type</span> <span class=\"o\">=</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">input_type</span> <span class=\"o\">==</span> <span class=\"nb\">str</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_index_text</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">input_type</span> <span class=\"o\">==</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n            <span class=\"n\">texts</span> <span class=\"o\">=</span> <span class=\"n\">text</span>  <span class=\"c1\"># List of text case</span>\n            <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_index_text</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">text</span> <span class=\"ow\">in</span> <span class=\"n\">texts</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Not supported type: {type(text)}&quot;</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_index_text</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">do_tokenize</span><span class=\"p\">:</span>\n            <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">text</span><span class=\"p\">]</span>\n\n        <span class=\"n\">indexed_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_index</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokens</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Insert CLS_TOKEN ans SEP_TOKEN</span>\n        <span class=\"n\">insert_start</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">)</span>\n        <span class=\"n\">indexed_tokens</span><span class=\"o\">.</span><span class=\"n\">insert</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">insert_start</span><span class=\"p\">)</span>\n\n        <span class=\"n\">insert_end</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">)</span>\n        <span class=\"n\">indexed_tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">insert_end</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">indexed_tokens</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/indexer/char_indexer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.indexer.char_indexer &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.indexer.char_indexer</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.indexer.char_indexer</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenIndexer</span>\n\n\n<div class=\"viewcode-block\" id=\"CharIndexer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.char_indexer.CharIndexer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CharIndexer</span><span class=\"p\">(</span><span class=\"n\">TokenIndexer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Character Token Indexer</span>\n\n<span class=\"sd\">    * Property</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocabulary)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        tokenizer: CharTokenizer</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        insert_char_start: insert start index (eg. [&#39;h&#39;, &#39;i&#39;] -&gt; [&#39;&lt;s&gt;&#39;, &#39;h&#39;, &#39;i&#39;] )</span>\n<span class=\"sd\">            default is None</span>\n<span class=\"sd\">        insert_char_end: insert end index (eg. [&#39;h&#39;, &#39;i&#39;] -&gt; [&#39;h&#39;, &#39;i&#39;, &#39;&lt;/s&gt;&#39;] )</span>\n<span class=\"sd\">            default is None</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizer</span><span class=\"p\">,</span> <span class=\"n\">insert_char_start</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">insert_char_end</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CharIndexer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">tokenizer</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">insert_char_start</span> <span class=\"o\">=</span> <span class=\"n\">insert_char_start</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">insert_char_end</span> <span class=\"o\">=</span> <span class=\"n\">insert_char_end</span>\n\n<div class=\"viewcode-block\" id=\"CharIndexer.index\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.char_indexer.CharIndexer.index\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"n\">indexed_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index_token</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)]</span>\n        <span class=\"k\">return</span> <span class=\"n\">indexed_tokens</span></div>\n\n<div class=\"viewcode-block\" id=\"CharIndexer.index_token\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.char_indexer.CharIndexer.index_token\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">index_token</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">chars</span><span class=\"p\">):</span>\n        <span class=\"n\">char_ids</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_index</span><span class=\"p\">(</span><span class=\"n\">char</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">char</span> <span class=\"ow\">in</span> <span class=\"n\">chars</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">insert_char_start</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">char_ids</span><span class=\"o\">.</span><span class=\"n\">insert</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">start_token</span><span class=\"p\">))</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">insert_char_end</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">char_ids</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">end_token</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">char_ids</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/indexer/elmo_indexer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.indexer.elmo_indexer &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.indexer.elmo_indexer</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.indexer.elmo_indexer</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">This code is from allenai/allennlp</span>\n<span class=\"sd\">(https://github.com/allenai/allennlp/blob/master/allennlp/data/token_indexers/elmo_indexer.py)</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenIndexer</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_make_bos_eos</span><span class=\"p\">(</span>\n    <span class=\"n\">character</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n    <span class=\"n\">padding_character</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n    <span class=\"n\">beginning_of_word_character</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n    <span class=\"n\">end_of_word_character</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n    <span class=\"n\">max_word_length</span><span class=\"p\">:</span> <span class=\"nb\">int</span><span class=\"p\">,</span>\n<span class=\"p\">):</span>\n    <span class=\"n\">char_ids</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">padding_character</span><span class=\"p\">]</span> <span class=\"o\">*</span> <span class=\"n\">max_word_length</span>\n    <span class=\"n\">char_ids</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">beginning_of_word_character</span>\n    <span class=\"n\">char_ids</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">character</span>\n    <span class=\"n\">char_ids</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">end_of_word_character</span>\n    <span class=\"k\">return</span> <span class=\"n\">char_ids</span>\n\n\n<div class=\"viewcode-block\" id=\"ELMoIndexer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ELMoIndexer</span><span class=\"p\">(</span><span class=\"n\">TokenIndexer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Maps individual tokens to sequences of character ids, compatible with ELMo.</span>\n<span class=\"sd\">    To be consistent with previously trained models, we include it here as special of existing</span>\n<span class=\"sd\">    character indexers.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">max_word_length</span> <span class=\"o\">=</span> <span class=\"mi\">50</span>\n\n    <span class=\"c1\"># char ids 0-255 come from utf-8 encoding bytes</span>\n    <span class=\"c1\"># assign 256-300 to special chars</span>\n    <span class=\"n\">beginning_of_sentence_character</span> <span class=\"o\">=</span> <span class=\"mi\">256</span>  <span class=\"c1\"># &lt;begin sentence&gt;</span>\n    <span class=\"n\">end_of_sentence_character</span> <span class=\"o\">=</span> <span class=\"mi\">257</span>  <span class=\"c1\"># &lt;end sentence&gt;</span>\n    <span class=\"n\">beginning_of_word_character</span> <span class=\"o\">=</span> <span class=\"mi\">258</span>  <span class=\"c1\"># &lt;begin word&gt;</span>\n    <span class=\"n\">end_of_word_character</span> <span class=\"o\">=</span> <span class=\"mi\">259</span>  <span class=\"c1\"># &lt;end word&gt;</span>\n    <span class=\"n\">padding_character</span> <span class=\"o\">=</span> <span class=\"mi\">260</span>  <span class=\"c1\"># &lt;padding&gt;&lt;Paste&gt;</span>\n\n    <span class=\"n\">beginning_of_sentence_characters</span> <span class=\"o\">=</span> <span class=\"n\">_make_bos_eos</span><span class=\"p\">(</span>\n        <span class=\"n\">beginning_of_sentence_character</span><span class=\"p\">,</span>\n        <span class=\"n\">padding_character</span><span class=\"p\">,</span>\n        <span class=\"n\">beginning_of_word_character</span><span class=\"p\">,</span>\n        <span class=\"n\">end_of_word_character</span><span class=\"p\">,</span>\n        <span class=\"n\">max_word_length</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">end_of_sentence_characters</span> <span class=\"o\">=</span> <span class=\"n\">_make_bos_eos</span><span class=\"p\">(</span>\n        <span class=\"n\">end_of_sentence_character</span><span class=\"p\">,</span>\n        <span class=\"n\">padding_character</span><span class=\"p\">,</span>\n        <span class=\"n\">beginning_of_word_character</span><span class=\"p\">,</span>\n        <span class=\"n\">end_of_word_character</span><span class=\"p\">,</span>\n        <span class=\"n\">max_word_length</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"n\">BOS_TOKEN</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&lt;S&gt;&quot;</span>\n    <span class=\"n\">EOS_TOKEN</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&lt;/S&gt;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizer</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">ELMoIndexer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">tokenizer</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"ELMoIndexer.index\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.index\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"n\">indexed_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index_token</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)]</span>\n        <span class=\"k\">return</span> <span class=\"n\">indexed_tokens</span></div>\n\n<div class=\"viewcode-block\" id=\"ELMoIndexer.index_token\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.index_token\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">index_token</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">word</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">word</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">BOS_TOKEN</span><span class=\"p\">:</span>\n            <span class=\"n\">char_ids</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">beginning_of_sentence_characters</span>\n        <span class=\"k\">elif</span> <span class=\"n\">word</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">EOS_TOKEN</span><span class=\"p\">:</span>\n            <span class=\"n\">char_ids</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">end_of_sentence_characters</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">word_encodeds</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s2\">&quot;utf-8&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;ignore&quot;</span><span class=\"p\">)[:</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_word_length</span> <span class=\"o\">-</span> <span class=\"mi\">2</span><span class=\"p\">)]</span>\n            <span class=\"n\">char_ids</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">char_id</span> <span class=\"k\">for</span> <span class=\"n\">char_id</span> <span class=\"ow\">in</span> <span class=\"n\">word_encodeds</span><span class=\"p\">]</span>\n            <span class=\"n\">char_ids</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">beginning_of_word_character</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">char_ids</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">end_of_word_character</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">c</span> <span class=\"o\">+</span> <span class=\"mi\">1</span> <span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">char_ids</span><span class=\"p\">]</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/indexer/exact_match_indexer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.indexer.exact_match_indexer &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.indexer.exact_match_indexer</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.indexer.exact_match_indexer</h1><div class=\"highlight\"><pre>\n<span></span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">from</span> <span class=\"nn\">nltk.stem</span> <span class=\"k\">import</span> <span class=\"n\">WordNetLemmatizer</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenIndexer</span>\n\n\n<div class=\"viewcode-block\" id=\"ExactMatchIndexer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ExactMatchIndexer</span><span class=\"p\">(</span><span class=\"n\">TokenIndexer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Exact Match Token Indexer</span>\n\n<span class=\"sd\">    * Property</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocabulary)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        tokenizer: WordTokenizer</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lower: add lower feature. default is True (0 or 1)</span>\n<span class=\"sd\">        lemma: add lemma case feature. feature is True (0 or 1)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizer</span><span class=\"p\">,</span> <span class=\"n\">lower</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">lemma</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">ExactMatchIndexer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">tokenizer</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">param_key</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;question&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lemmatizer</span> <span class=\"o\">=</span> <span class=\"n\">WordNetLemmatizer</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lower</span> <span class=\"o\">=</span> <span class=\"n\">lower</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lemma</span> <span class=\"o\">=</span> <span class=\"n\">lemma</span>\n\n<div class=\"viewcode-block\" id=\"ExactMatchIndexer.index\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer.index\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">query_text</span><span class=\"p\">):</span>\n        <span class=\"n\">tokenized_query_text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">query_text</span><span class=\"p\">)</span>\n        <span class=\"n\">query_tokens</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;origin&quot;</span><span class=\"p\">:</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">tokenized_query_text</span><span class=\"p\">),</span>\n            <span class=\"s2\">&quot;lower&quot;</span><span class=\"p\">:</span> <span class=\"nb\">set</span><span class=\"p\">([</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokenized_query_text</span><span class=\"p\">]),</span>\n            <span class=\"s2\">&quot;lemma&quot;</span><span class=\"p\">:</span> <span class=\"nb\">set</span><span class=\"p\">(</span>\n                <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lemmatizer</span><span class=\"o\">.</span><span class=\"n\">lemmatize</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">())</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokenized_query_text</span><span class=\"p\">]</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"n\">indexed_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index_token</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">query_tokens</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">indexed_tokens</span></div>\n\n<div class=\"viewcode-block\" id=\"ExactMatchIndexer.index_token\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer.index_token\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">index_token</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">query_tokens</span><span class=\"p\">):</span>\n        <span class=\"n\">em_feature</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"c1\"># 1. origin</span>\n        <span class=\"n\">origin_case</span> <span class=\"o\">=</span> <span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">query_tokens</span><span class=\"p\">[</span><span class=\"s2\">&quot;origin&quot;</span><span class=\"p\">]</span> <span class=\"k\">else</span> <span class=\"mi\">0</span>\n        <span class=\"n\">em_feature</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">origin_case</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># 2. lower</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">:</span>\n            <span class=\"n\">lower_case</span> <span class=\"o\">=</span> <span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"ow\">in</span> <span class=\"n\">query_tokens</span><span class=\"p\">[</span><span class=\"s2\">&quot;lower&quot;</span><span class=\"p\">]</span> <span class=\"k\">else</span> <span class=\"mi\">0</span>\n            <span class=\"n\">em_feature</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">lower_case</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># 3. lemma</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lemma</span><span class=\"p\">:</span>\n            <span class=\"n\">lemma_case</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n                <span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lemmatizer</span><span class=\"o\">.</span><span class=\"n\">lemmatize</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">())</span> <span class=\"ow\">in</span> <span class=\"n\">query_tokens</span><span class=\"p\">[</span><span class=\"s2\">&quot;lemma&quot;</span><span class=\"p\">]</span> <span class=\"k\">else</span> <span class=\"mi\">0</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">em_feature</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">lemma_case</span> <span class=\"o\">+</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">em_feature</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/indexer/linguistic_indexer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.indexer.linguistic_indexer &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.indexer.linguistic_indexer</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.indexer.linguistic_indexer</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">spacy</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.linguistic</span> <span class=\"k\">import</span> <span class=\"n\">POSTag</span><span class=\"p\">,</span> <span class=\"n\">NER</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenIndexer</span>\n\n\n<div class=\"viewcode-block\" id=\"LinguisticIndexer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.linguistic_indexer.LinguisticIndexer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">LinguisticIndexer</span><span class=\"p\">(</span><span class=\"n\">TokenIndexer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Linguistic Token Indexer</span>\n\n<span class=\"sd\">    * Property</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocabulary)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        tokenizer: WordTokenizer</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        pos_tag: POS Tagging</span>\n<span class=\"sd\">        ner: Named Entity Recognition</span>\n<span class=\"sd\">        dep: Dependency Parser</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizer</span><span class=\"p\">,</span> <span class=\"n\">pos_tag</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">ner</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">dep</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">LinguisticIndexer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">tokenizer</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">spacy_model</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n        <span class=\"c1\"># Features</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_pos_tag</span> <span class=\"o\">=</span> <span class=\"n\">pos_tag</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pos_to_index</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">t</span><span class=\"p\">:</span> <span class=\"n\">i</span> <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">t</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">POSTag</span><span class=\"o\">.</span><span class=\"n\">classes</span><span class=\"p\">)}</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_ner</span> <span class=\"o\">=</span> <span class=\"n\">ner</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ner_to_index</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">t</span><span class=\"p\">:</span> <span class=\"n\">i</span> <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">t</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">NER</span><span class=\"o\">.</span><span class=\"n\">classes</span><span class=\"p\">)}</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_dep</span> <span class=\"o\">=</span> <span class=\"n\">dep</span>\n        <span class=\"k\">if</span> <span class=\"n\">dep</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Dependency Parser feature&quot;</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"LinguisticIndexer.index\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.linguistic_indexer.LinguisticIndexer.index\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"n\">package</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">name</span>\n        <span class=\"k\">return</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"s2\">&quot;_</span><span class=\"si\">{package}</span><span class=\"s2\">&quot;</span><span class=\"p\">)(</span><span class=\"n\">text</span><span class=\"p\">)</span></div>\n\n    <span class=\"sd\">&quot;&quot;&quot; Need to match with Tokenizer&#39;s package &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_mecab_ko</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Linguistic Feature with mecab package&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_nltk_en</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Linguistic Feature with nltk package&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_spacy_en</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">spacy_model</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.tokenizer.utils</span> <span class=\"k\">import</span> <span class=\"n\">load_spacy_model_for_tokenizer</span>\n\n            <span class=\"n\">disables</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;vectors&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;textcat&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;parser&quot;</span><span class=\"p\">]</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_pos_tag</span><span class=\"p\">:</span>\n                <span class=\"n\">disables</span><span class=\"o\">.</span><span class=\"n\">apppend</span><span class=\"p\">(</span><span class=\"s2\">&quot;tagger&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_ner</span><span class=\"p\">:</span>\n                <span class=\"n\">disables</span><span class=\"o\">.</span><span class=\"n\">apppend</span><span class=\"p\">(</span><span class=\"s2\">&quot;ner&quot;</span><span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">spacy_model</span> <span class=\"o\">=</span> <span class=\"n\">spacy</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"s2\">&quot;en_core_web_sm&quot;</span><span class=\"p\">,</span> <span class=\"n\">disable</span><span class=\"o\">=</span><span class=\"n\">disables</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">spacy_model</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">load_spacy_model_for_tokenizer</span><span class=\"p\">(</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">extra_split_chars_re</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"n\">sent_tokenizer</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">sent_tokenizer</span>\n        <span class=\"n\">sentences</span> <span class=\"o\">=</span> <span class=\"n\">sent_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n\n        <span class=\"n\">ner_entities</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"n\">docs</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">sentence</span> <span class=\"ow\">in</span> <span class=\"n\">sentences</span><span class=\"p\">:</span>\n            <span class=\"n\">doc</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">spacy_model</span><span class=\"p\">(</span><span class=\"n\">sentence</span><span class=\"p\">)</span>\n            <span class=\"n\">docs</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">doc</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_ner</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"n\">doc</span><span class=\"o\">.</span><span class=\"n\">ents</span><span class=\"p\">:</span>\n                    <span class=\"n\">ner_entities</span><span class=\"p\">[</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">label_</span>\n\n        <span class=\"n\">linguistic_features</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">doc</span> <span class=\"ow\">in</span> <span class=\"n\">docs</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">doc</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">is_space</span><span class=\"p\">:</span>\n                    <span class=\"k\">continue</span>\n\n                <span class=\"n\">feature</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n                <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_pos_tag</span><span class=\"p\">:</span>\n                    <span class=\"n\">feature</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pos_to_index</span><span class=\"p\">[</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">pos_</span><span class=\"p\">])</span>\n                <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">use_ner</span><span class=\"p\">:</span>\n                    <span class=\"n\">feature</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">ner_to_index</span><span class=\"p\">[</span><span class=\"n\">ner_entities</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"s2\">&quot;NONE&quot;</span><span class=\"p\">)])</span>\n\n                <span class=\"n\">linguistic_features</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">feature</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">linguistic_features</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/indexer/word_indexer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.indexer.word_indexer &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.indexer.word_indexer</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.indexer.word_indexer</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenIndexer</span>\n\n\n<div class=\"viewcode-block\" id=\"WordIndexer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.word_indexer.WordIndexer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">WordIndexer</span><span class=\"p\">(</span><span class=\"n\">TokenIndexer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Word Token Indexer</span>\n\n<span class=\"sd\">    * Property</span>\n<span class=\"sd\">        vocab: Vocab (claf.tokens.vocabulary)</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        tokenizer: WordTokenizer</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lowercase: word token to lowercase</span>\n<span class=\"sd\">        insert_start: insert start_token to first</span>\n<span class=\"sd\">        insert_end: append end_token</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizer</span><span class=\"p\">,</span> <span class=\"n\">do_tokenize</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">lowercase</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">insert_start</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">insert_end</span><span class=\"o\">=</span><span class=\"kc\">None</span>\n    <span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">WordIndexer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">tokenizer</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">do_tokenize</span> <span class=\"o\">=</span> <span class=\"n\">do_tokenize</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lowercase</span> <span class=\"o\">=</span> <span class=\"n\">lowercase</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">insert_start</span> <span class=\"o\">=</span> <span class=\"n\">insert_start</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">insert_end</span> <span class=\"o\">=</span> <span class=\"n\">insert_end</span>\n\n<div class=\"viewcode-block\" id=\"WordIndexer.index\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.indexer.html#claf.tokens.indexer.word_indexer.WordIndexer.index\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"n\">input_type</span> <span class=\"o\">=</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">input_type</span> <span class=\"o\">==</span> <span class=\"nb\">str</span><span class=\"p\">:</span>\n            <span class=\"n\">indexed_tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_index_text</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">input_type</span> <span class=\"o\">==</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n            <span class=\"n\">indexed_tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_index_list_of_text</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Not supported type: {type(text)}&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">insert_start</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">insert_start</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">start_token</span><span class=\"p\">)</span>\n            <span class=\"n\">indexed_tokens</span><span class=\"o\">.</span><span class=\"n\">insert</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">insert_start</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">insert_end</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">insert_end</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">end_token</span><span class=\"p\">)</span>\n            <span class=\"n\">indexed_tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">insert_end</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">indexed_tokens</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_index_text</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">do_tokenize</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;input text type is &#39;str&#39;. &#39;do_tokenize&#39; is required.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_index_token</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_index_list_of_text</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">list_of_text</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">do_tokenize</span><span class=\"p\">:</span>\n            <span class=\"n\">indexed_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_index_token</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)]</span>\n                <span class=\"k\">for</span> <span class=\"n\">text</span> <span class=\"ow\">in</span> <span class=\"n\">list_of_text</span>\n            <span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">indexed_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_index_token</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">text</span> <span class=\"ow\">in</span> <span class=\"n\">list_of_text</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">indexed_tokens</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_index_token</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lowercase</span><span class=\"p\">:</span>\n            <span class=\"n\">token</span> <span class=\"o\">=</span> <span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">get_index</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/linguistic.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.linguistic &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.linguistic</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.linguistic</h1><div class=\"highlight\"><pre>\n<div class=\"viewcode-block\" id=\"POSTag\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.linguistic.POSTag\">[docs]</a><span></span><span class=\"k\">class</span> <span class=\"nc\">POSTag</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Universal POS tags expends by spacy</span>\n<span class=\"sd\">        (https://spacy.io/api/annotation#section-pos-tagging)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">classes</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"s2\">&quot;ADJ&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># adjectives</span>\n        <span class=\"s2\">&quot;ADP&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># adpositions (prepositions and postpositions)</span>\n        <span class=\"s2\">&quot;ADV&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># adverbs</span>\n        <span class=\"s2\">&quot;AUX&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># auxiliary (spacy)</span>\n        <span class=\"s2\">&quot;CONJ&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># conjunctions</span>\n        <span class=\"s2\">&quot;CCONJ&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># coordinating conjunction (spacy)</span>\n        <span class=\"s2\">&quot;DET&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># determiners</span>\n        <span class=\"s2\">&quot;INTJ&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># interjection (spacy)</span>\n        <span class=\"s2\">&quot;NOUN&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># nouns (common and proper)</span>\n        <span class=\"s2\">&quot;NUM&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># cardinal numbers</span>\n        <span class=\"s2\">&quot;PART&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># particles or other function words  (spacy)</span>\n        <span class=\"s2\">&quot;PRON&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># pronouns</span>\n        <span class=\"s2\">&quot;PROPN&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># proper noun</span>\n        <span class=\"s2\">&quot;PUNCT&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># punctuation</span>\n        <span class=\"s2\">&quot;SCONJ&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># subordinating conjunction</span>\n        <span class=\"s2\">&quot;SYM&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># symbol</span>\n        <span class=\"s2\">&quot;VERB&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># verbs (all tenses and modes)</span>\n        <span class=\"s2\">&quot;X&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># other: foreign words, typos, abbreviations</span>\n        <span class=\"s2\">&quot;SPACE&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># space</span>\n    <span class=\"p\">]</span></div>\n\n\n<div class=\"viewcode-block\" id=\"NER\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.linguistic.NER\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">NER</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Named Entity Recognition</span>\n\n<span class=\"sd\">        Models trained on the OntoNotes 5 corpus support</span>\n<span class=\"sd\">        the following entity types:</span>\n<span class=\"sd\">        (https://spacy.io/api/annotation#section-dependency-parsing)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">classes</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"s2\">&quot;NONE&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># None</span>\n        <span class=\"s2\">&quot;PERSON&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># People, including fictional.</span>\n        <span class=\"s2\">&quot;NORP&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Nationalities or religious or political groups.</span>\n        <span class=\"s2\">&quot;FAC&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Buildings, airports, highways, bridges, etc.</span>\n        <span class=\"s2\">&quot;ORG&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Companies, agencies, institutions, etc.</span>\n        <span class=\"s2\">&quot;GPE&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Countries, cities, states.</span>\n        <span class=\"s2\">&quot;LOC&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Non-GPE locations, mountain ranges, bodies of water.</span>\n        <span class=\"s2\">&quot;PRODUCT&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Objects, vehicles, foods, etc. (Not services.)</span>\n        <span class=\"s2\">&quot;EVENT&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Named hurricanes, battles, wars, sports events, etc.</span>\n        <span class=\"s2\">&quot;WORK_OF_ART&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Titles of books, songs, etc.</span>\n        <span class=\"s2\">&quot;LAW&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Named documents made into laws.</span>\n        <span class=\"s2\">&quot;LANGUAGE&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Any named language.</span>\n        <span class=\"s2\">&quot;DATE&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Absolute or relative dates or periods.</span>\n        <span class=\"s2\">&quot;TIME&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Times smaller than a day.</span>\n        <span class=\"s2\">&quot;PERCENT&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Percentage, including &quot;%&quot;.</span>\n        <span class=\"s2\">&quot;MONEY&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Monetary values, including unit.</span>\n        <span class=\"s2\">&quot;QUANTITY&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Measurements, as of weight or distance.</span>\n        <span class=\"s2\">&quot;ORDINAL&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># &quot;first&quot;, &quot;second&quot;, etc.</span>\n        <span class=\"s2\">&quot;CARDINAL&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># Numerals that do not fall under another type.</span>\n    <span class=\"p\">]</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/text_handler.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.text_handler &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.text_handler</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.text_handler</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"k\">import</span> <span class=\"n\">Counter</span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">import</span> <span class=\"nn\">time</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">tqdm</span> <span class=\"k\">import</span> <span class=\"n\">tqdm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span><span class=\"p\">,</span> <span class=\"n\">DataHandler</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.utils</span> <span class=\"k\">import</span> <span class=\"n\">padding_tokens</span><span class=\"p\">,</span> <span class=\"n\">transpose</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.token_maker</span> <span class=\"k\">import</span> <span class=\"n\">TokenMaker</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.vocabulary</span> <span class=\"k\">import</span> <span class=\"n\">Vocab</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf</span> <span class=\"k\">import</span> <span class=\"n\">utils</span> <span class=\"k\">as</span> <span class=\"n\">common_utils</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"TextHandler\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.text_handler.TextHandler\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">TextHandler</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Text Handler</span>\n\n<span class=\"sd\">    - voacb and token_counter</span>\n<span class=\"sd\">    - raw_features -&gt; indexed_features</span>\n<span class=\"sd\">    - raw_features -&gt; tensor</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_makers: Dictionary consisting of</span>\n<span class=\"sd\">            - key: token_name</span>\n<span class=\"sd\">            - value: TokenMaker (claf.tokens.token_maker)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        lazy_indexing: Apply `Lazy Evaluation` to text indexing</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">,</span> <span class=\"n\">lazy_indexing</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_makers</span> <span class=\"o\">=</span> <span class=\"n\">token_makers</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_indexing</span> <span class=\"o\">=</span> <span class=\"n\">lazy_indexing</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span> <span class=\"o\">=</span> <span class=\"n\">DataHandler</span><span class=\"p\">(</span><span class=\"n\">cache_path</span><span class=\"o\">=</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">TOKEN_COUNTER</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"TextHandler.build_vocabs\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.text_handler.TextHandler.build_vocabs\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">build_vocabs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_counters</span><span class=\"p\">):</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"s2\">&quot;Start build vocab&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">vocab_start_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span>\n\n        <span class=\"n\">vocabs</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_makers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">is_defined_config</span> <span class=\"o\">=</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">vocab_config</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">dict</span>\n            <span class=\"k\">if</span> <span class=\"n\">is_defined_config</span><span class=\"p\">:</span>\n                <span class=\"n\">token_counter</span> <span class=\"o\">=</span> <span class=\"n\">token_counters</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">]</span>\n                <span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_build_vocab_with_config</span><span class=\"p\">(</span><span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span><span class=\"p\">,</span> <span class=\"n\">token_counter</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">Vocab</span><span class=\"p\">(</span><span class=\"n\">token_name</span><span class=\"p\">)</span>\n                <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"p\">()</span>\n\n            <span class=\"n\">vocabs</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span>\n                <span class=\"n\">f</span><span class=\"s2\">&quot; =&gt; </span><span class=\"si\">{token_name}</span><span class=\"s2\"> vocab size: {len(vocab)}  (use predefine vocab: {vocab.pretrained_path is not None})&quot;</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"n\">vocab_elapased_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">vocab_start_time</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Complete build vocab...  elapsed_time: </span><span class=\"si\">{vocab_elapased_time}</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Setting Indexer (vocab)</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_makers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">set_vocab</span><span class=\"p\">(</span><span class=\"n\">vocabs</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">])</span>\n        <span class=\"k\">return</span> <span class=\"n\">vocabs</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_build_vocab_with_config</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span><span class=\"p\">,</span> <span class=\"n\">token_counter</span><span class=\"p\">):</span>\n        <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">vocab_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;token_name&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">token_name</span>\n        <span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">Vocab</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">vocab_config</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">pretrained_path</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">build_with_pretrained_file</span><span class=\"p\">(</span><span class=\"n\">token_counter</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">vocab</span><span class=\"o\">.</span><span class=\"n\">build</span><span class=\"p\">(</span><span class=\"n\">token_counter</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">vocab</span>\n\n<div class=\"viewcode-block\" id=\"TextHandler.is_all_vocab_use_pretrained\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.text_handler.TextHandler.is_all_vocab_use_pretrained\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">is_all_vocab_use_pretrained</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_makers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">vocab_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;pretrained_path&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"kc\">False</span>\n            <span class=\"k\">if</span> <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">vocab_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;pretrained_token&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"n\">Vocab</span><span class=\"o\">.</span><span class=\"n\">PRETRAINED_ALL</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span></div>\n\n<div class=\"viewcode-block\" id=\"TextHandler.make_token_counters\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.text_handler.TextHandler.make_token_counters\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_token_counters</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">texts</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">token_counters</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_makers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">token_vocab_config</span> <span class=\"o\">=</span> <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">vocab_config</span>\n            <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">token_vocab_config</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">token_vocab_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;pretrained_token&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">Vocab</span><span class=\"o\">.</span><span class=\"n\">PRETRAINED_ALL</span><span class=\"p\">:</span>\n                    <span class=\"n\">texts</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                        <span class=\"s2\">&quot;&quot;</span>\n                    <span class=\"p\">]</span>  <span class=\"c1\"># do not use token_counter from dataset -&gt; make empty token_counter</span>\n\n            <span class=\"n\">token_counter</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_token_counter</span><span class=\"p\">(</span>\n                <span class=\"n\">texts</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">=</span><span class=\"n\">config</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{token_name}</span><span class=\"s2\">-vocab&quot;</span>\n            <span class=\"p\">)</span>\n            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot; * </span><span class=\"si\">{token_name}</span><span class=\"s2\"> token_counter size: {len(token_counter)}&quot;</span><span class=\"p\">)</span>\n\n            <span class=\"n\">token_counters</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">token_counter</span>\n        <span class=\"k\">return</span> <span class=\"n\">token_counters</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_make_token_counter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">texts</span><span class=\"p\">,</span> <span class=\"n\">tokenizer</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">tokenizer_name</span> <span class=\"o\">=</span> <span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">name</span>\n\n        <span class=\"n\">cache_token_counter</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"n\">config</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">data_reader_config</span> <span class=\"o\">=</span> <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">data_reader</span>\n            <span class=\"n\">cache_token_counter</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">cache_token_counter</span><span class=\"p\">(</span>\n                <span class=\"n\">data_reader_config</span><span class=\"p\">,</span> <span class=\"n\">tokenizer_name</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">cache_token_counter</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">cache_token_counter</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                <span class=\"n\">token</span> <span class=\"k\">for</span> <span class=\"n\">text</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">texts</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">desc</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n            <span class=\"p\">]</span>\n            <span class=\"n\">flatten_list</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">common_utils</span><span class=\"o\">.</span><span class=\"n\">flatten</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">))</span>\n            <span class=\"n\">token_counter</span> <span class=\"o\">=</span> <span class=\"n\">Counter</span><span class=\"p\">(</span><span class=\"n\">flatten_list</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">config</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>  <span class=\"c1\"># Cache TokenCounter</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">cache_token_counter</span><span class=\"p\">(</span>\n                    <span class=\"n\">data_reader_config</span><span class=\"p\">,</span> <span class=\"n\">tokenizer_name</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"n\">token_counter</span>\n                <span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">token_counter</span>\n\n<div class=\"viewcode-block\" id=\"TextHandler.index\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.text_handler.TextHandler.index\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">datas</span><span class=\"p\">,</span> <span class=\"n\">text_columns</span><span class=\"p\">):</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Start token indexing, Lazy: </span><span class=\"si\">{self.lazy_indexing}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">indexing_start_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">data_type</span><span class=\"p\">,</span> <span class=\"n\">data</span> <span class=\"ow\">in</span> <span class=\"n\">datas</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Multi-Data Indexing</span>\n                <span class=\"k\">for</span> <span class=\"n\">d</span> <span class=\"ow\">in</span> <span class=\"n\">data</span><span class=\"p\">:</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_index_features</span><span class=\"p\">(</span>\n                        <span class=\"n\">d</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">text_columns</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"s2\">&quot;indexing features (</span><span class=\"si\">{data_type}</span><span class=\"s2\">)&quot;</span>\n                    <span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_index_features</span><span class=\"p\">(</span>\n                    <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">text_columns</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"s2\">&quot;indexing features (</span><span class=\"si\">{data_type}</span><span class=\"s2\">)&quot;</span>\n                <span class=\"p\">)</span>\n\n        <span class=\"n\">indexing_elapased_time</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">indexing_start_time</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;Complete token indexing... elapsed_time: </span><span class=\"si\">{indexing_elapased_time}</span><span class=\"s2\"> </span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_index_features</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">text_columns</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">suppress_tqdm</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">tqdm</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">desc</span><span class=\"o\">=</span><span class=\"n\">desc</span><span class=\"p\">,</span> <span class=\"n\">disable</span><span class=\"o\">=</span><span class=\"n\">suppress_tqdm</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">text</span> <span class=\"ow\">in</span> <span class=\"n\">feature</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                <span class=\"k\">if</span> <span class=\"n\">key</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">text_columns</span><span class=\"p\">:</span>\n                    <span class=\"k\">continue</span>\n\n                <span class=\"c1\"># Set data_type (text =&gt; {&quot;text&quot;: ..., &quot;token1&quot;: ..., ...})</span>\n                <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">])</span> <span class=\"o\">!=</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n                    <span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">:</span> <span class=\"n\">text</span><span class=\"p\">}</span>\n                <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n                    <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">text</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]</span>\n\n                <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_makers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n                    <span class=\"n\">param_key</span> <span class=\"o\">=</span> <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">param_key</span>\n                    <span class=\"k\">if</span> <span class=\"n\">param_key</span> <span class=\"o\">==</span> <span class=\"n\">key</span><span class=\"p\">:</span>\n                        <span class=\"k\">continue</span>\n\n                    <span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">][</span><span class=\"n\">token_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_index_token</span><span class=\"p\">(</span><span class=\"n\">token_maker</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">feature</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_index_token</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">):</span>\n        <span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">():</span>\n            <span class=\"n\">indexer</span> <span class=\"o\">=</span> <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">indexer</span>\n            <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n            <span class=\"k\">if</span> <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">type_name</span> <span class=\"o\">==</span> <span class=\"n\">TokenMaker</span><span class=\"o\">.</span><span class=\"n\">EXACT_MATCH_TYPE</span><span class=\"p\">:</span>\n                <span class=\"n\">param_text</span> <span class=\"o\">=</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">param_key</span><span class=\"p\">]</span>\n                <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">param_text</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">dict</span><span class=\"p\">:</span>\n                    <span class=\"n\">param_text</span> <span class=\"o\">=</span> <span class=\"n\">param_text</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]</span>\n                <span class=\"n\">params</span><span class=\"p\">[</span><span class=\"s2\">&quot;query_text&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">param_text</span>\n            <span class=\"k\">return</span> <span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">params</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lazy_indexing</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">index</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">index</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"TextHandler.raw_to_tensor_fn\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.text_handler.TextHandler.raw_to_tensor_fn\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">raw_to_tensor_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data_reader</span><span class=\"p\">,</span> <span class=\"n\">cuda_device</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">helper</span><span class=\"o\">=</span><span class=\"p\">{}):</span>\n        <span class=\"k\">def</span> <span class=\"nf\">raw_to_tensor</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">):</span>\n            <span class=\"n\">is_one</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>  <span class=\"c1\"># batch_size 1 flag</span>\n            <span class=\"n\">feature</span><span class=\"p\">,</span> <span class=\"n\">_helper</span> <span class=\"o\">=</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">read_one_example</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"p\">)</span>\n\n            <span class=\"k\">nonlocal</span> <span class=\"n\">helper</span>\n            <span class=\"n\">helper</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">_helper</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">feature</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n                <span class=\"n\">is_one</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n                <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"n\">feature</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">features</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">]</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_index_features</span><span class=\"p\">(</span><span class=\"n\">features</span><span class=\"p\">,</span> <span class=\"n\">data_reader</span><span class=\"o\">.</span><span class=\"n\">text_columns</span><span class=\"p\">,</span> <span class=\"n\">suppress_tqdm</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">is_one</span><span class=\"p\">:</span>\n                <span class=\"n\">indexed_features</span> <span class=\"o\">=</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>  <span class=\"c1\"># when features &gt; 1, need to transpose (dict_of_list -&gt; list_of_dict)</span>\n                <span class=\"n\">indexed_features</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n                <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">features</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]:</span>\n                    <span class=\"n\">feature_with_key</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">feature</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">feature</span> <span class=\"ow\">in</span> <span class=\"n\">features</span><span class=\"p\">]</span>\n                    <span class=\"n\">indexed_features</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">transpose</span><span class=\"p\">(</span><span class=\"n\">feature_with_key</span><span class=\"p\">,</span> <span class=\"n\">skip_keys</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">])</span>\n\n            <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">indexed_features</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">token_name</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_makers</span><span class=\"p\">:</span>\n                    <span class=\"k\">if</span> <span class=\"n\">token_name</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">indexed_features</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]:</span>\n                        <span class=\"k\">continue</span>\n\n                    <span class=\"n\">indexed_values</span> <span class=\"o\">=</span> <span class=\"n\">indexed_features</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">][</span><span class=\"n\">token_name</span><span class=\"p\">]</span>\n                    <span class=\"k\">if</span> <span class=\"n\">is_one</span><span class=\"p\">:</span>\n                        <span class=\"n\">indexed_values</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">indexed_values</span><span class=\"p\">]</span>\n\n                    <span class=\"n\">tensor</span> <span class=\"o\">=</span> <span class=\"n\">padding_tokens</span><span class=\"p\">(</span><span class=\"n\">indexed_values</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"o\">=</span><span class=\"n\">token_name</span><span class=\"p\">)</span>\n                    <span class=\"k\">if</span> <span class=\"n\">cuda_device</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span> <span class=\"ow\">and</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">tensor</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n                        <span class=\"n\">tensor</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span><span class=\"o\">.</span><span class=\"n\">cuda</span><span class=\"p\">(</span><span class=\"n\">cuda_device</span><span class=\"p\">)</span>\n                    <span class=\"n\">indexed_features</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">][</span><span class=\"n\">token_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">tensor</span>\n\n            <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">indexed_features</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"s2\">&quot;text&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">indexed_features</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]:</span>\n                    <span class=\"k\">del</span> <span class=\"n\">indexed_features</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">][</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"k\">return</span> <span class=\"n\">indexed_features</span><span class=\"p\">,</span> <span class=\"n\">helper</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">raw_to_tensor</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/token_embedder/base.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.token_embedder.base &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.token_embedder.base</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.token_embedder.base</h1><div class=\"highlight\"><pre>\n<span></span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n\n<div class=\"viewcode-block\" id=\"TokenEmbedder\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.token_embedder.html#claf.tokens.token_embedder.base.TokenEmbedder\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">TokenEmbedder</span><span class=\"p\">(</span><span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">nn</span><span class=\"o\">.</span><span class=\"n\">Module</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Token Embedder</span>\n\n<span class=\"sd\">    Take a tensor(indexed token) look up Embedding modules.</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_makers: dictionary of TokenMaker (claf.token_makers.token)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">TokenEmbedder</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dims</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">vocabs</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"n\">token_name</span><span class=\"p\">:</span> <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">vocab</span> <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span> <span class=\"ow\">in</span> <span class=\"n\">token_makers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span>\n        <span class=\"p\">}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add_embedding_modules</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"TokenEmbedder.add_embedding_modules\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.token_embedder.html#claf.tokens.token_embedder.base.TokenEmbedder.add_embedding_modules\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">add_embedding_modules</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; add embedding module to TokenEmbedder &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_names</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">token_maker</span> <span class=\"ow\">in</span> <span class=\"n\">token_makers</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_names</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">token_name</span><span class=\"p\">)</span>\n\n            <span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">vocab</span>\n            <span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">token_maker</span><span class=\"o\">.</span><span class=\"n\">embedding_fn</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add_module</span><span class=\"p\">(</span><span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">embedding</span><span class=\"p\">)</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dims</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">get_output_dim</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"TokenEmbedder.get_embed_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.token_embedder.html#claf.tokens.token_embedder.base.TokenEmbedder.get_embed_dim\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_embed_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div>\n\n<div class=\"viewcode-block\" id=\"TokenEmbedder.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.token_embedder.html#claf.tokens.token_embedder.base.TokenEmbedder.forward\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"p\">{}):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/token_embedder/basic_embedder.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.token_embedder.basic_embedder &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.token_embedder.basic_embedder</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.token_embedder.basic_embedder</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenEmbedder</span>\n\n\n<div class=\"viewcode-block\" id=\"BasicTokenEmbedder\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.token_embedder.html#claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">BasicTokenEmbedder</span><span class=\"p\">(</span><span class=\"n\">TokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Basic Token Embedder</span>\n\n<span class=\"sd\">    Take a tensor(indexed token) look up Embedding modules.</span>\n<span class=\"sd\">    Output is concatenating all embedded tensors.</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_makers: dictionary of TokenMaker (claf.tokens.token_maker)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BasicTokenEmbedder</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"BasicTokenEmbedder.get_embed_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.token_embedder.html#claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder.get_embed_dim\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_embed_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">except_keys</span><span class=\"o\">=</span><span class=\"p\">[]):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dims</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">())</span></div>\n\n<div class=\"viewcode-block\" id=\"BasicTokenEmbedder.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.token_embedder.html#claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">inputs</span><span class=\"p\">,</span> <span class=\"n\">except_keys</span><span class=\"o\">=</span><span class=\"p\">[],</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"p\">{}):</span>\n        <span class=\"n\">token_names</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">name</span> <span class=\"k\">for</span> <span class=\"n\">name</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_names</span> <span class=\"k\">if</span> <span class=\"n\">name</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">except_keys</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">token_names</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">()):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                <span class=\"n\">f</span><span class=\"s2\">&quot;Mismatch token_names  inputs: {inputs.keys()}, embeddings: </span><span class=\"si\">{self.token_names}</span><span class=\"s2\">&quot;</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"n\">embedded_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">tensors</span> <span class=\"ow\">in</span> <span class=\"n\">inputs</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"p\">)</span>\n\n            <span class=\"n\">embedded_token</span> <span class=\"o\">=</span> <span class=\"n\">embedding</span><span class=\"p\">(</span><span class=\"n\">tensors</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">params</span><span class=\"p\">)</span>\n            <span class=\"n\">embedded_tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">embedded_token</span><span class=\"p\">)</span>\n\n        <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"n\">embedded_tokens</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">output</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/token_embedder/reading_comprehension_embedder.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.token_embedder.reading_comprehension_embedder &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.token_embedder.reading_comprehension_embedder</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.token_embedder.reading_comprehension_embedder</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n<span class=\"kn\">import</span> <span class=\"nn\">torch</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.functional</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n<span class=\"kn\">import</span> <span class=\"nn\">claf.modules.attention</span> <span class=\"k\">as</span> <span class=\"nn\">attention</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">TokenEmbedder</span>\n\n\n<div class=\"viewcode-block\" id=\"RCTokenEmbedder\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.token_embedder.html#claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">RCTokenEmbedder</span><span class=\"p\">(</span><span class=\"n\">TokenEmbedder</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Reading Comprehension Token Embedder</span>\n\n<span class=\"sd\">    Take a tensor(indexed token) look up Embedding modules.</span>\n<span class=\"sd\">    Inputs are seperated context and query for individual token setting.</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_makers: dictionary of TokenMaker (claf.tokens.token_maker)</span>\n<span class=\"sd\">        vocabs: dictionary of vocab</span>\n<span class=\"sd\">            {&quot;token_name&quot;: Vocab (claf.token_makers.vocaburary), ...}</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">EXCLUSIVE_TOKENS</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;exact_match&quot;</span><span class=\"p\">]</span>  <span class=\"c1\"># only context</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_makers</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">RCTokenEmbedder</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">token_makers</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_embed_dim</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dims</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">())</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_embed_dim</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_filter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">embed_dims</span><span class=\"p\">,</span> <span class=\"n\">exclusive</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">())</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">align_attention</span> <span class=\"o\">=</span> <span class=\"n\">attention</span><span class=\"o\">.</span><span class=\"n\">SeqAttnMatch</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_embed_dim</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"RCTokenEmbedder.get_embed_dim\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.token_embedder.html#claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder.get_embed_dim\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_embed_dim</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">context_embed_dim</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">query_embed_dim</span></div>\n\n<div class=\"viewcode-block\" id=\"RCTokenEmbedder.forward\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.token_embedder.html#claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder.forward\">[docs]</a>    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">forward</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">,</span> <span class=\"n\">query</span><span class=\"p\">,</span> <span class=\"n\">context_params</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">query_align</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            context: context inputs (eg. {&quot;token_name1&quot;: tensor, &quot;token_name2&quot;: tensor, ...})</span>\n<span class=\"sd\">            query: query inputs (eg. {&quot;token_name1&quot;: tensor, &quot;token_name2&quot;: tensor, ...})</span>\n\n<span class=\"sd\">        * Kwargs:</span>\n<span class=\"sd\">            context_params: custom context parameters</span>\n<span class=\"sd\">            query_params: query context parameters</span>\n<span class=\"sd\">            query_align: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</span>\n<span class=\"sd\">                captures the similarity between pi and each question words q_j.</span>\n<span class=\"sd\">                these features add soft alignments between similar but non-identical words (e.g., car and vehicle)</span>\n<span class=\"sd\">                it only apply to &#39;context_embed&#39;.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_names</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">context</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">()):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                <span class=\"n\">f</span><span class=\"s2\">&quot;Mismatch token_names  inputs: {context.keys()}, embeddings: </span><span class=\"si\">{self.token_names}</span><span class=\"s2\">&quot;</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"n\">context_tokens</span><span class=\"p\">,</span> <span class=\"n\">query_tokens</span> <span class=\"o\">=</span> <span class=\"p\">{},</span> <span class=\"p\">{}</span>\n        <span class=\"k\">for</span> <span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"n\">context_tensors</span> <span class=\"ow\">in</span> <span class=\"n\">context</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n            <span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_name</span><span class=\"p\">)</span>\n\n            <span class=\"n\">context_tokens</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">embedding</span><span class=\"p\">(</span>\n                <span class=\"n\">context_tensors</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">context_params</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n            <span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">token_name</span> <span class=\"ow\">in</span> <span class=\"n\">query</span><span class=\"p\">:</span>\n                <span class=\"n\">query_tokens</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">embedding</span><span class=\"p\">(</span>\n                    <span class=\"n\">query</span><span class=\"p\">[</span><span class=\"n\">token_name</span><span class=\"p\">],</span> <span class=\"o\">**</span><span class=\"n\">query_params</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">token_name</span><span class=\"p\">,</span> <span class=\"p\">{})</span>\n                <span class=\"p\">)</span>\n\n        <span class=\"c1\"># query_align_embedding</span>\n        <span class=\"k\">if</span> <span class=\"n\">query_align</span><span class=\"p\">:</span>\n            <span class=\"n\">common_context</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_filter</span><span class=\"p\">(</span><span class=\"n\">context_tokens</span><span class=\"p\">,</span> <span class=\"n\">exclusive</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n            <span class=\"n\">embedded_common_context</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">common_context</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()),</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">exclusive_context</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_filter</span><span class=\"p\">(</span><span class=\"n\">context_tokens</span><span class=\"p\">,</span> <span class=\"n\">exclusive</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n            <span class=\"n\">embedded_exclusive_context</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n            <span class=\"k\">if</span> <span class=\"n\">exclusive_context</span> <span class=\"o\">!=</span> <span class=\"p\">{}:</span>\n                <span class=\"n\">embedded_exclusive_context</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">exclusive_context</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()),</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n            <span class=\"n\">query_mask</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">get_mask_from_tokens</span><span class=\"p\">(</span><span class=\"n\">query_tokens</span><span class=\"p\">)</span>\n            <span class=\"n\">embedded_query</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">query_tokens</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()),</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n            <span class=\"n\">embedded_aligned_query</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">align_attention</span><span class=\"p\">(</span>\n                <span class=\"n\">embedded_common_context</span><span class=\"p\">,</span> <span class=\"n\">embedded_query</span><span class=\"p\">,</span> <span class=\"n\">query_mask</span>\n            <span class=\"p\">)</span>\n\n            <span class=\"c1\"># Merge context embedded</span>\n            <span class=\"n\">embedded_context</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">embedded_common_context</span><span class=\"p\">,</span> <span class=\"n\">embedded_aligned_query</span><span class=\"p\">]</span>\n            <span class=\"k\">if</span> <span class=\"n\">embedded_exclusive_context</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"n\">embedded_context</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">embedded_exclusive_context</span><span class=\"p\">)</span>\n\n            <span class=\"n\">context_output</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"n\">embedded_context</span><span class=\"p\">,</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">query_output</span> <span class=\"o\">=</span> <span class=\"n\">embedded_query</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">context_output</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">context_tokens</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()),</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n            <span class=\"n\">query_output</span> <span class=\"o\">=</span> <span class=\"n\">torch</span><span class=\"o\">.</span><span class=\"n\">cat</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">query_tokens</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()),</span> <span class=\"n\">dim</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">context_output</span><span class=\"p\">,</span> <span class=\"n\">query_output</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_filter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_data</span><span class=\"p\">,</span> <span class=\"n\">exclusive</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">exclusive</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"n\">v</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">token_data</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">EXCLUSIVE_TOKENS</span><span class=\"p\">}</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"n\">v</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">token_data</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">k</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">EXCLUSIVE_TOKENS</span><span class=\"p\">}</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/token_maker.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.token_maker &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.token_maker</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.token_maker</h1><div class=\"highlight\"><pre>\n<div class=\"viewcode-block\" id=\"TokenMaker\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.token_maker.TokenMaker\">[docs]</a><span></span><span class=\"k\">class</span> <span class=\"nc\">TokenMaker</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Token Maker (Data Transfer Object)</span>\n\n<span class=\"sd\">    Token Maker consists of Tokenizer, Indexer, Embedding and Vocab</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        tokenizer: Tokenizer (claf.tokens.tokenizer.base)</span>\n<span class=\"sd\">        indexer: TokenIndexer (claf.tokens.indexer.base)</span>\n<span class=\"sd\">        embedding_fn: wrapper function of TokenEmbedding (claf.tokens.embedding.base)</span>\n<span class=\"sd\">        vocab_config: config dict of Vocab (claf.tokens.vocaburary)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># Token Type List</span>\n    <span class=\"n\">FEATURE_TYPE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;feature&quot;</span>  <span class=\"c1\"># Do not use embedding, pass indexed_feature</span>\n\n    <span class=\"n\">BERT_TYPE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;bert&quot;</span>\n    <span class=\"n\">CHAR_TYPE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;char&quot;</span>\n    <span class=\"n\">COVE_TYPE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;cove&quot;</span>\n    <span class=\"n\">ELMO_TYPE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;elmo&quot;</span>\n    <span class=\"n\">EXACT_MATCH_TYPE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;exact_match&quot;</span>\n    <span class=\"n\">WORD_TYPE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;word&quot;</span>\n    <span class=\"n\">FREQUENT_WORD_TYPE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;frequent_word&quot;</span>\n    <span class=\"n\">LINGUISTIC_TYPE</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;linguistic&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_type</span><span class=\"p\">,</span> <span class=\"n\">tokenizer</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">indexer</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">embedding_fn</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">vocab_config</span><span class=\"o\">=</span><span class=\"kc\">None</span>\n    <span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">type_name</span> <span class=\"o\">=</span> <span class=\"n\">token_type</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizer</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_indexer</span> <span class=\"o\">=</span> <span class=\"n\">indexer</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_embedding_fn</span> <span class=\"o\">=</span> <span class=\"n\">embedding_fn</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_vocab_config</span> <span class=\"o\">=</span> <span class=\"n\">vocab_config</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">tokenizer</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_tokenizer</span>\n\n    <span class=\"nd\">@tokenizer</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">tokenizer</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizer</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizer</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">indexer</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_indexer</span>\n\n    <span class=\"nd\">@indexer</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">indexer</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">indexer</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_indexer</span> <span class=\"o\">=</span> <span class=\"n\">indexer</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">embedding_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_embedding_fn</span>\n\n    <span class=\"nd\">@embedding_fn</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">embedding_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embedding_fn</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_embedding_fn</span> <span class=\"o\">=</span> <span class=\"n\">embedding_fn</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">vocab_config</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_vocab_config</span>\n\n    <span class=\"nd\">@vocab_config</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">vocab_config</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">vocab_config</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_vocab_config</span> <span class=\"o\">=</span> <span class=\"n\">vocab_config</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">vocab</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_vocab</span>\n\n    <span class=\"nd\">@vocab</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">vocab</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n\n<div class=\"viewcode-block\" id=\"TokenMaker.set_vocab\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.token_maker.TokenMaker.set_vocab\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">set_vocab</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">vocab</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_indexer</span><span class=\"o\">.</span><span class=\"n\">set_vocab</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/tokenizer/base.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.tokenizer.base &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.tokenizer.base</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.tokenizer.base</h1><div class=\"highlight\"><pre>\n<div class=\"viewcode-block\" id=\"Tokenizer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.base.Tokenizer\">[docs]</a><span></span><span class=\"k\">class</span> <span class=\"nc\">Tokenizer</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Tokenizer Base Class</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">MAX_TO_KEEP_CACHE</span> <span class=\"o\">=</span> <span class=\"mi\">3</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">cache_name</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>  <span class=\"c1\"># dict: {text: tokenized_tokens}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache_name</span> <span class=\"o\">=</span> <span class=\"n\">cache_name</span>\n\n<div class=\"viewcode-block\" id=\"Tokenizer.tokenize\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.base.Tokenizer.tokenize\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">tokenize</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">str</span> <span class=\"ow\">and</span> <span class=\"n\">text</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache</span><span class=\"p\">[</span><span class=\"n\">text</span><span class=\"p\">]</span>\n\n        <span class=\"n\">tokenized_tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Cache</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">MAX_TO_KEEP_CACHE</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache</span><span class=\"p\">[</span><span class=\"n\">text</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">tokenized_tokens</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">first_key</span> <span class=\"o\">=</span> <span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"nb\">iter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">()))</span>\n            <span class=\"k\">del</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache</span><span class=\"p\">[</span><span class=\"n\">first_key</span><span class=\"p\">]</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">tokenized_tokens</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_tokenize</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; splitting text into tokens. &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">str</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;text type is must be str. not {type(text)}&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"s2\">&quot;_</span><span class=\"si\">{self.name}</span><span class=\"s2\">&quot;</span><span class=\"p\">)(</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"n\">unit</span><span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/tokenizer/bpe.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.tokenizer.bpe &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.tokenizer.bpe</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.tokenizer.bpe</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">RobertaTokenizer</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span><span class=\"p\">,</span> <span class=\"n\">DataHandler</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">Tokenizer</span>\n\n\n<div class=\"viewcode-block\" id=\"BPETokenizer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.BPETokenizer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">BPETokenizer</span><span class=\"p\">(</span><span class=\"n\">Tokenizer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    BPTE(Byte-Pair Encoding) Tokenizer</span>\n<span class=\"sd\">    text -&gt; ...</span>\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        name: tokenizer name [roberta]</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">=</span><span class=\"p\">{}):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BPETokenizer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"s2\">&quot;bpe-</span><span class=\"si\">{name}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span> <span class=\"o\">=</span> <span class=\"n\">DataHandler</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">VOCAB</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">config</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bpe_tokenizer</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"sd\">&quot;&quot;&quot; Tokenizers &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_roberta</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        ex)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bpe_tokenizer</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">vocab_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">[</span><span class=\"s2\">&quot;vocab_path&quot;</span><span class=\"p\">],</span> <span class=\"n\">return_path</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n            <span class=\"n\">merges_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">[</span><span class=\"s2\">&quot;merges_path&quot;</span><span class=\"p\">],</span> <span class=\"n\">return_path</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n            <span class=\"k\">del</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">[</span><span class=\"s2\">&quot;vocab_path&quot;</span><span class=\"p\">]</span>\n            <span class=\"k\">del</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">[</span><span class=\"s2\">&quot;merges_path&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bpe_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">RobertaTokenizer</span><span class=\"p\">(</span><span class=\"n\">vocab_path</span><span class=\"p\">,</span> <span class=\"n\">merges_path</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">bpe_tokenizer</span><span class=\"o\">.</span><span class=\"n\">_tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span></div>\n\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/tokenizer/char.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.tokenizer.char &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.tokenizer.char</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.tokenizer.char</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens</span> <span class=\"k\">import</span> <span class=\"n\">hangul</span> <span class=\"k\">as</span> <span class=\"n\">hg</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">Tokenizer</span>\n\n\n<div class=\"viewcode-block\" id=\"CharTokenizer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.char.CharTokenizer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CharTokenizer</span><span class=\"p\">(</span><span class=\"n\">Tokenizer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Character Tokenizer</span>\n\n<span class=\"sd\">    text -&gt; word tokens -&gt; [char tokens]</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        name: tokenizer name [character|decompose_ko]</span>\n<span class=\"sd\">        word_tokenizer: word tokenizer object</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">word_tokenizer</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">=</span><span class=\"p\">{}):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CharTokenizer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"s2\">&quot;char-</span><span class=\"si\">{name}</span><span class=\"s2\">+</span><span class=\"si\">{word_tokenizer.cache_name}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">config</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">word_tokenizer</span>\n\n    <span class=\"sd\">&quot;&quot;&quot; Tokenizers &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_character</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        ex) Hello World -&gt; [&#39;Hello&#39;, &#39;World&#39;] -&gt; [[&#39;H&#39;, &#39;e&#39;, &#39;l&#39;, &#39;l&#39;, &#39;o&#39;], [&#39;W&#39;, &#39;o&#39;, &#39;r&#39;, &#39;l&#39;, &#39;d&#39;]]</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">unit</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;word&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">char</span> <span class=\"k\">for</span> <span class=\"n\">char</span> <span class=\"ow\">in</span> <span class=\"n\">text</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">[[</span><span class=\"n\">char</span> <span class=\"k\">for</span> <span class=\"n\">char</span> <span class=\"ow\">in</span> <span class=\"n\">word</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">word</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_jamo_ko</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        ex) 안녕 세상 -&gt; [&#39;안녕&#39;, &#39;세상&#39;] -&gt; [[&#39;ㅇ&#39;, &#39;ㅏ&#39;, &#39;ㄴ&#39;, &#39;ㄴ&#39;, &#39;ㅕ&#39;, &#39;ㅇ&#39;], [&#39;ㅅ&#39;, &#39;ㅔ&#39;, &#39;ㅅ&#39;, &#39;ㅏ&#39;, &#39;ㅇ&#39;]]</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">decompose</span><span class=\"p\">(</span><span class=\"n\">char</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">hg</span><span class=\"o\">.</span><span class=\"n\">is_hangul</span><span class=\"p\">(</span><span class=\"n\">char</span><span class=\"p\">):</span>\n                <span class=\"k\">try</span><span class=\"p\">:</span>\n                    <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">c</span> <span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">hg</span><span class=\"o\">.</span><span class=\"n\">decompose</span><span class=\"p\">(</span><span class=\"n\">char</span><span class=\"p\">)</span> <span class=\"k\">if</span> <span class=\"n\">c</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">]</span>\n                <span class=\"k\">except</span> <span class=\"ne\">IndexError</span><span class=\"p\">:</span>  <span class=\"c1\"># Case: ㅋㅋㅋㅋ</span>\n                    <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">char</span><span class=\"p\">]</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">char</span><span class=\"p\">]</span>\n\n        <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">if</span> <span class=\"n\">unit</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;word&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">chars</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n            <span class=\"k\">for</span> <span class=\"n\">char</span> <span class=\"ow\">in</span> <span class=\"n\">text</span><span class=\"p\">:</span>\n                <span class=\"n\">chars</span><span class=\"o\">.</span><span class=\"n\">extend</span><span class=\"p\">(</span><span class=\"n\">decompose</span><span class=\"p\">(</span><span class=\"n\">char</span><span class=\"p\">))</span>\n            <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">chars</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">word</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n                <span class=\"n\">chars</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n                <span class=\"k\">for</span> <span class=\"n\">char</span> <span class=\"ow\">in</span> <span class=\"n\">word</span><span class=\"p\">:</span>\n                    <span class=\"n\">chars</span><span class=\"o\">.</span><span class=\"n\">extend</span><span class=\"p\">(</span><span class=\"n\">decompose</span><span class=\"p\">(</span><span class=\"n\">char</span><span class=\"p\">))</span>\n                <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">chars</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">tokens</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/tokenizer/pass_text.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.tokenizer.pass_text &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.tokenizer.pass_text</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.tokenizer.pass_text</h1><div class=\"highlight\"><pre>\n<div class=\"viewcode-block\" id=\"PassText\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.pass_text.PassText\">[docs]</a><span></span><span class=\"k\">class</span> <span class=\"nc\">PassText</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Pass text without tokenize</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;pass&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cache_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;pass&quot;</span>\n\n<div class=\"viewcode-block\" id=\"PassText.tokenize\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.pass_text.PassText.tokenize\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">tokenize</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">text</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/tokenizer/sent.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.tokenizer.sent &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.tokenizer.sent</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.tokenizer.sent</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">nltk.data</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">Tokenizer</span>\n\n\n<div class=\"viewcode-block\" id=\"SentTokenizer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.sent.SentTokenizer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SentTokenizer</span><span class=\"p\">(</span><span class=\"n\">Tokenizer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Sentence Tokenizer</span>\n\n<span class=\"sd\">    text -&gt; [sent tokens]</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        name: tokenizer name [punkt]</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">=</span><span class=\"p\">{}):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SentTokenizer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"s2\">&quot;sent-</span><span class=\"si\">{name}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">config</span>\n\n    <span class=\"sd\">&quot;&quot;&quot; Tokenizers &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_punkt</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        ex) Hello World. This is punkt tokenizer -&gt; [&#39;Hello World&#39;, &#39;This is punkt tokenizer&#39;]</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">sent_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">nltk</span><span class=\"o\">.</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"s2\">&quot;tokenizers/punkt/english.pickle&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">sent_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/tokenizer/subword.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.tokenizer.subword &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.tokenizer.subword</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.tokenizer.subword</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">WordpieceTokenizer</span>\n<span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers.tokenization_bert</span> <span class=\"k\">import</span> <span class=\"n\">load_vocab</span>\n\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span><span class=\"p\">,</span> <span class=\"n\">DataHandler</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">Tokenizer</span>\n\n\n<div class=\"viewcode-block\" id=\"SubwordTokenizer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.subword.SubwordTokenizer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SubwordTokenizer</span><span class=\"p\">(</span><span class=\"n\">Tokenizer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Subword Tokenizer</span>\n\n<span class=\"sd\">    text -&gt; [word tokens] -&gt; [[sub word tokens], ...]</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        name: tokenizer name [wordpiece]</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">word_tokenizer</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">=</span><span class=\"p\">{}):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SubwordTokenizer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"s2\">&quot;subword-</span><span class=\"si\">{name}</span><span class=\"s2\">+</span><span class=\"si\">{word_tokenizer.cache_name}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span> <span class=\"o\">=</span> <span class=\"n\">DataHandler</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">VOCAB</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">config</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">word_tokenizer</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">subword_tokenizer</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"sd\">&quot;&quot;&quot; Tokenizers &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_wordpiece</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        ex) Hello World -&gt; [&#39;Hello&#39;, &#39;World&#39;] -&gt; [&#39;He&#39;, &#39;##llo&#39;, &#39;Wo&#39;, &#39;##rld&#39;]</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">subword_tokenizer</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">vocab_path</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">[</span><span class=\"s2\">&quot;vocab_path&quot;</span><span class=\"p\">],</span> <span class=\"n\">return_path</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n            <span class=\"n\">vocab</span> <span class=\"o\">=</span> <span class=\"n\">load_vocab</span><span class=\"p\">(</span><span class=\"n\">vocab_path</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">subword_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">WordpieceTokenizer</span><span class=\"p\">(</span>\n                <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">unk_token</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;unk_token&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;[UNK]&quot;</span><span class=\"p\">))</span>\n\n        <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">unit</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;word&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">sub_token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">subword_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n                <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">sub_token</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n                <span class=\"k\">for</span> <span class=\"n\">sub_token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">subword_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">):</span>\n                    <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">sub_token</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">tokens</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/tokenizer/utils.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.tokenizer.utils &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.tokenizer.utils</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.tokenizer.utils</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">spacy</span>\n\n\n<div class=\"viewcode-block\" id=\"create_tokenizer_with_regex\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.utils.create_tokenizer_with_regex\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">create_tokenizer_with_regex</span><span class=\"p\">(</span><span class=\"n\">nlp</span><span class=\"p\">,</span> <span class=\"n\">split_regex</span><span class=\"p\">):</span>\n    <span class=\"n\">prefixes_re</span> <span class=\"o\">=</span> <span class=\"n\">spacy</span><span class=\"o\">.</span><span class=\"n\">util</span><span class=\"o\">.</span><span class=\"n\">compile_prefix_regex</span><span class=\"p\">(</span><span class=\"n\">nlp</span><span class=\"o\">.</span><span class=\"n\">Defaults</span><span class=\"o\">.</span><span class=\"n\">prefixes</span><span class=\"p\">)</span>\n    <span class=\"n\">infix_re</span> <span class=\"o\">=</span> <span class=\"n\">split_regex</span>\n    <span class=\"n\">suffix_re</span> <span class=\"o\">=</span> <span class=\"n\">spacy</span><span class=\"o\">.</span><span class=\"n\">util</span><span class=\"o\">.</span><span class=\"n\">compile_suffix_regex</span><span class=\"p\">(</span><span class=\"n\">nlp</span><span class=\"o\">.</span><span class=\"n\">Defaults</span><span class=\"o\">.</span><span class=\"n\">suffixes</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">spacy</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span><span class=\"o\">.</span><span class=\"n\">Tokenizer</span><span class=\"p\">(</span>\n        <span class=\"n\">nlp</span><span class=\"o\">.</span><span class=\"n\">vocab</span><span class=\"p\">,</span>\n        <span class=\"n\">nlp</span><span class=\"o\">.</span><span class=\"n\">Defaults</span><span class=\"o\">.</span><span class=\"n\">tokenizer_exceptions</span><span class=\"p\">,</span>\n        <span class=\"n\">prefix_search</span><span class=\"o\">=</span><span class=\"n\">prefixes_re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">,</span>\n        <span class=\"n\">infix_finditer</span><span class=\"o\">=</span><span class=\"n\">infix_re</span><span class=\"o\">.</span><span class=\"n\">finditer</span><span class=\"p\">,</span>\n        <span class=\"n\">suffix_search</span><span class=\"o\">=</span><span class=\"n\">suffix_re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">,</span>\n        <span class=\"n\">token_match</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"load_spacy_model_for_tokenizer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.utils.load_spacy_model_for_tokenizer\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">load_spacy_model_for_tokenizer</span><span class=\"p\">(</span><span class=\"n\">split_regex</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">spacy</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">(</span><span class=\"s2\">&quot;en_core_web_sm&quot;</span><span class=\"p\">,</span> <span class=\"n\">disable</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;vectors&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;textcat&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;tagger&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;parser&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;ner&quot;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">split_regex</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">spacy_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">create_tokenizer_with_regex</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"n\">split_regex</span><span class=\"p\">)</span>\n        <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">spacy_tokenizer</span>\n    <span class=\"k\">return</span> <span class=\"n\">model</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/tokenizer/word.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.tokenizer.word &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../../\" src=\"../../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.tokenizer.word</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.tokenizer.word</h1><div class=\"highlight\"><pre>\n<span></span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">re</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">overrides</span> <span class=\"k\">import</span> <span class=\"n\">overrides</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf</span> <span class=\"k\">import</span> <span class=\"n\">utils</span> <span class=\"k\">as</span> <span class=\"n\">common_utils</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.base</span> <span class=\"k\">import</span> <span class=\"n\">Tokenizer</span>\n\n\n<div class=\"viewcode-block\" id=\"WordTokenizer\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.word.WordTokenizer\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">WordTokenizer</span><span class=\"p\">(</span><span class=\"n\">Tokenizer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Word Tokenizer</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        name: tokenizer name [treebank_en|spacy_en|mecab_ko|bert_basic]</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        flatten: return type as flatten list</span>\n<span class=\"sd\">        split_with_regex: post split action. Split tokens that the tokenizer cannot split.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">sent_tokenizer</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">split_with_regex</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">WordTokenizer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"s2\">&quot;word-</span><span class=\"si\">{name}</span><span class=\"s2\">+</span><span class=\"si\">{sent_tokenizer.cache_name}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span> <span class=\"o\">=</span> <span class=\"n\">config</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sent_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">sent_tokenizer</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">split_with_regex</span> <span class=\"o\">=</span> <span class=\"n\">split_with_regex</span>\n        <span class=\"k\">if</span> <span class=\"n\">split_with_regex</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">extra_split_chars_re</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">make_split_regex_expression</span><span class=\"p\">()</span>\n\n<div class=\"viewcode-block\" id=\"WordTokenizer.make_split_regex_expression\"><a class=\"viewcode-back\" href=\"../../../../claf.tokens.tokenizer.html#claf.tokens.tokenizer.word.WordTokenizer.make_split_regex_expression\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">make_split_regex_expression</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Apply a small amount of extra splitting to the given tokens, this is in particular to avoid UNK tokens</span>\n<span class=\"sd\">        due to contraction, quotation, or other forms of puncutation. I haven&#39;t really done tests to see</span>\n<span class=\"sd\">        if/how much difference this makes, but it does avoid some common UNKs I noticed in SQuAD/TriviaQA</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">extra_split_chars</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s2\">&quot;-&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;£&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;€&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;¥&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;¢&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;₹&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;*&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;</span><span class=\"se\">\\u2212</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;</span><span class=\"se\">\\u2014</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;</span><span class=\"se\">\\u2013</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;/&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;~&quot;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;&quot;&#39;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;&#39;&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;</span><span class=\"se\">\\ud01C</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;</span><span class=\"se\">\\u2019</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;</span><span class=\"se\">\\u201D</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;</span><span class=\"se\">\\u2018</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;</span><span class=\"se\">\\u00B0</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;.&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;:&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">extra_split_tokens</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s2\">&quot;``&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;(?&lt;=[^_])_(?=[^_])&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># dashes w/o a preceeding or following dash, so __wow___ -&gt; ___ wow ___</span>\n            <span class=\"s2\">&quot;&#39;&#39;&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;[&quot;</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">extra_split_chars</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;]&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">compile</span><span class=\"p\">(</span><span class=\"s2\">&quot;(&quot;</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;|&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">extra_split_tokens</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;)&quot;</span><span class=\"p\">)</span></div>\n\n    <span class=\"nd\">@overrides</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_tokenize</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Text -&gt; word tokens &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">str</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;text type is must be str. not {type(text)}&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">unit</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;sentence&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"s2\">&quot;_</span><span class=\"si\">{self.name}</span><span class=\"s2\">&quot;</span><span class=\"p\">)(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">sentences</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sent_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n            <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"s2\">&quot;_</span><span class=\"si\">{self.name}</span><span class=\"s2\">&quot;</span><span class=\"p\">)(</span><span class=\"n\">sentence</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">sentence</span> <span class=\"ow\">in</span> <span class=\"n\">sentences</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">split_with_regex</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;spacy_en&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_split_with_regex</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">common_utils</span><span class=\"o\">.</span><span class=\"n\">flatten</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_split_with_regex</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">sentences</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">sentence</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">sentences</span><span class=\"p\">):</span>\n            <span class=\"n\">sentences</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">token</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_post_split_tokens</span><span class=\"p\">(</span><span class=\"n\">sentence</span><span class=\"p\">)]</span>\n        <span class=\"k\">return</span> <span class=\"n\">sentences</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_post_split_tokens</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokens</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">[[</span><span class=\"n\">x</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">extra_split_chars_re</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span> <span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokens</span><span class=\"p\">]</span>\n\n    <span class=\"sd\">&quot;&quot;&quot; Tokenizers &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_space_all</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">def</span> <span class=\"nf\">is_whitespace</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">c</span> <span class=\"o\">==</span> <span class=\"s2\">&quot; &quot;</span> <span class=\"ow\">or</span> <span class=\"n\">c</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\t</span><span class=\"s2\">&quot;</span> <span class=\"ow\">or</span> <span class=\"n\">c</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\r</span><span class=\"s2\">&quot;</span> <span class=\"ow\">or</span> <span class=\"n\">c</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span> <span class=\"ow\">or</span> <span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mh\">0x202F</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"kc\">True</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n        <span class=\"n\">prev_is_whitespace</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">char</span> <span class=\"ow\">in</span> <span class=\"n\">text</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">is_whitespace</span><span class=\"p\">(</span><span class=\"n\">char</span><span class=\"p\">):</span>\n                <span class=\"n\">prev_is_whitespace</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">prev_is_whitespace</span><span class=\"p\">:</span>\n                    <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">char</span><span class=\"p\">)</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">tokens</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"n\">char</span>\n                <span class=\"n\">prev_is_whitespace</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"n\">tokens</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_treebank_en</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"kn\">import</span> <span class=\"nn\">nltk</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">nltk</span><span class=\"o\">.</span><span class=\"n\">TreebankWordTokenizer</span><span class=\"p\">()</span>\n\n        <span class=\"k\">return</span> <span class=\"p\">[</span>\n            <span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;&#39;&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot;&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s2\">&quot;``&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&quot;&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_spacy_en</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.tokenizer.utils</span> <span class=\"k\">import</span> <span class=\"n\">load_spacy_model_for_tokenizer</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">load_spacy_model_for_tokenizer</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">extra_split_chars_re</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">_remove_spaces</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">text</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokens</span> <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">token</span><span class=\"o\">.</span><span class=\"n\">is_space</span><span class=\"p\">]</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">_remove_spaces</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_bert_basic</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"kn\">from</span> <span class=\"nn\">pytorch_transformers</span> <span class=\"k\">import</span> <span class=\"n\">BasicTokenizer</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">BasicTokenizer</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_mecab_ko</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"kn\">from</span> <span class=\"nn\">konlpy.tag</span> <span class=\"k\">import</span> <span class=\"n\">Mecab</span>\n\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">Mecab</span><span class=\"p\">()</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">morphs</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens/vocabulary.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.vocabulary &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../../\" src=\"../../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../../index.html\">\n          \n\n          \n            \n            <img src=\"../../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../../index.html\">Module code</a> &raquo;</li>\n        \n          <li><a href=\"../tokens.html\">claf.tokens</a> &raquo;</li>\n        \n      <li>claf.tokens.vocabulary</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens.vocabulary</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"k\">import</span> <span class=\"n\">defaultdict</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.data.data_handler</span> <span class=\"k\">import</span> <span class=\"n\">CachePath</span><span class=\"p\">,</span> <span class=\"n\">DataHandler</span>\n\n\n<div class=\"viewcode-block\" id=\"VocabDict\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.VocabDict\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">VocabDict</span><span class=\"p\">(</span><span class=\"n\">defaultdict</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Vocab DefaultDict Class</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        oov_value: out-of-vocaburary token value (eg. &lt;unk&gt;)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">oov_value</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_value</span> <span class=\"o\">=</span> <span class=\"n\">oov_value</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__missing__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_value</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Vocab\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Vocab</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Vocaburary Class</span>\n\n<span class=\"sd\">    Vocab consists of token_to_index and index_to_token.</span>\n\n<span class=\"sd\">    * Args:</span>\n<span class=\"sd\">        token_name: Token name (Token and Vocab is one-to-one relationship)</span>\n\n<span class=\"sd\">    * Kwargs:</span>\n<span class=\"sd\">        pad_token: padding token value (eg. &lt;pad&gt;)</span>\n<span class=\"sd\">        oov_token: out-of-vocaburary token value (eg. &lt;unk&gt;)</span>\n<span class=\"sd\">        start_token: start token value (eg. &lt;s&gt;, &lt;bos&gt;)</span>\n<span class=\"sd\">        end_token: end token value (eg. &lt;/s&gt;, &lt;eos&gt;)</span>\n<span class=\"sd\">        cls_token: CLS token value for BERT (eg. [CLS])</span>\n<span class=\"sd\">        sep_token: SEP token value for BERT (eg. [SEP])</span>\n<span class=\"sd\">        min_count: token&#39;s minimal frequent count.</span>\n<span class=\"sd\">            when you define min_count, tokens remain that bigger than min_count.</span>\n<span class=\"sd\">        max_vocab_size: vocaburary&#39;s maximun size.</span>\n<span class=\"sd\">            when you define max_vocab_size, tokens are selected according to frequent count.</span>\n<span class=\"sd\">        frequent_count: get frequent_count threshold_index.</span>\n<span class=\"sd\">            (eg. frequent_count = 1000, threshold_index is the tokens that frequent_count is 999 index number.)</span>\n<span class=\"sd\">        pretrained_path: pretrained vocab file path</span>\n<span class=\"sd\">            (format: A\\nB\\nC\\nD\\n...)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">DEFAULT_PAD_INDEX</span><span class=\"p\">,</span> <span class=\"n\">DEFAULT_PAD_TOKEN</span> <span class=\"o\">=</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"s2\">&quot;[PAD]&quot;</span>\n    <span class=\"n\">DEFAULT_OOV_INDEX</span><span class=\"p\">,</span> <span class=\"n\">DEFAULT_OOV_TOKEN</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s2\">&quot;[UNK]&quot;</span>\n\n    <span class=\"c1\"># pretrained_vocab handle methods</span>\n    <span class=\"n\">PRETRAINED_ALL</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;all&quot;</span>  <span class=\"c1\"># Case. embedding matrix - predefine_vocab fixed</span>\n    <span class=\"n\">PRETRAINED_INTERSECT</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;intersect&quot;</span>  <span class=\"c1\"># add token that included in predefine_vocab, else UNK_token</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"p\">,</span>\n        <span class=\"n\">token_name</span><span class=\"p\">,</span>\n        <span class=\"n\">pad_token</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">oov_token</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">start_token</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">end_token</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">cls_token</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">sep_token</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">min_count</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">max_vocab_size</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">frequent_count</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">pretrained_path</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">pretrained_token</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n    <span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_name</span> <span class=\"o\">=</span> <span class=\"n\">token_name</span>\n\n        <span class=\"c1\"># basic token (pad and oov)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_index</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">DEFAULT_PAD_INDEX</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_token</span> <span class=\"o\">=</span> <span class=\"n\">pad_token</span>\n        <span class=\"k\">if</span> <span class=\"n\">pad_token</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">DEFAULT_PAD_TOKEN</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_index</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">DEFAULT_OOV_INDEX</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_token</span> <span class=\"o\">=</span> <span class=\"n\">oov_token</span>\n        <span class=\"k\">if</span> <span class=\"n\">oov_token</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_token</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">DEFAULT_OOV_TOKEN</span>\n\n        <span class=\"c1\"># special_tokens</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_token</span> <span class=\"o\">=</span> <span class=\"n\">start_token</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">end_token</span> <span class=\"o\">=</span> <span class=\"n\">end_token</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span> <span class=\"o\">=</span> <span class=\"n\">cls_token</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span> <span class=\"o\">=</span> <span class=\"n\">sep_token</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">min_count</span> <span class=\"o\">=</span> <span class=\"n\">min_count</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_vocab_size</span> <span class=\"o\">=</span> <span class=\"n\">max_vocab_size</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_counter</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">frequent_count</span> <span class=\"o\">=</span> <span class=\"n\">frequent_count</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">threshold_index</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pretrained_path</span> <span class=\"o\">=</span> <span class=\"n\">pretrained_path</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pretrained_token</span> <span class=\"o\">=</span> <span class=\"n\">pretrained_token</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pretrained_token_methods</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">PRETRAINED_ALL</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">PRETRAINED_INTERSECT</span><span class=\"p\">]</span>\n\n<div class=\"viewcode-block\" id=\"Vocab.init\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab.init\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">init</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_to_index</span> <span class=\"o\">=</span> <span class=\"n\">VocabDict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_index</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index_to_token</span> <span class=\"o\">=</span> <span class=\"n\">VocabDict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_token</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># add default token (pad, oov)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_token</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_token</span><span class=\"p\">)</span>\n\n        <span class=\"n\">special_tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_token</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">end_token</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cls_token</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep_token</span><span class=\"p\">]</span>\n        <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">special_tokens</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">token</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"Vocab.build\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab.build\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">build</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_counter</span><span class=\"p\">,</span> <span class=\"n\">predefine_vocab</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        build token with token_counter</span>\n\n<span class=\"sd\">        * Args:</span>\n<span class=\"sd\">            token_counter: (collections.Counter) token&#39;s frequent_count Counter.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">predefine_vocab</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"p\">(</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pretrained_token</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span>\n                <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pretrained_token</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pretrained_token_methods</span>\n            <span class=\"p\">):</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span>\n                    <span class=\"n\">f</span><span class=\"s2\">&quot;When use &#39;predefine_vocab&#39;, need to set &#39;pretrained_token&#39; </span><span class=\"si\">{self.pretrained_token_methods}</span><span class=\"s2\">&quot;</span>\n                <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">predefine_vocab</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pretrained_token</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">PRETRAINED_ALL</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">from_texts</span><span class=\"p\">(</span><span class=\"n\">predefine_vocab</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">predefine_vocab</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">predefine_vocab</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_counter</span> <span class=\"o\">=</span> <span class=\"n\">token_counter</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">init</span><span class=\"p\">()</span>\n\n        <span class=\"n\">token_counts</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">token_counter</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">())</span>\n        <span class=\"n\">token_counts</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">(</span><span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">reverse</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>  <span class=\"c1\"># order: DESC</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_vocab_size</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">token_counts</span> <span class=\"o\">=</span> <span class=\"n\">token_counts</span><span class=\"p\">[:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max_vocab_size</span><span class=\"p\">]</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">count</span> <span class=\"ow\">in</span> <span class=\"n\">token_counts</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">min_count</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">count</span> <span class=\"o\">&gt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">min_count</span><span class=\"p\">:</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">predefine_vocab</span><span class=\"o\">=</span><span class=\"n\">predefine_vocab</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">predefine_vocab</span><span class=\"o\">=</span><span class=\"n\">predefine_vocab</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">threshold_index</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">frequent_count</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">count</span> <span class=\"o\">&lt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">frequent_count</span><span class=\"p\">:</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">threshold_index</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_to_index</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"Vocab.build_with_pretrained_file\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab.build_with_pretrained_file\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">build_with_pretrained_file</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token_counter</span><span class=\"p\">):</span>\n        <span class=\"n\">data_handler</span> <span class=\"o\">=</span> <span class=\"n\">DataHandler</span><span class=\"p\">(</span><span class=\"n\">CachePath</span><span class=\"o\">.</span><span class=\"n\">VOCAB</span><span class=\"p\">)</span>\n        <span class=\"n\">vocab_texts</span> <span class=\"o\">=</span> <span class=\"n\">data_handler</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pretrained_path</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pretrained_path</span><span class=\"o\">.</span><span class=\"n\">endswith</span><span class=\"p\">(</span><span class=\"s2\">&quot;.txt&quot;</span><span class=\"p\">):</span>\n            <span class=\"n\">predefine_vocab</span> <span class=\"o\">=</span> <span class=\"n\">vocab_texts</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pretrained_path</span><span class=\"o\">.</span><span class=\"n\">endswith</span><span class=\"p\">(</span><span class=\"s2\">&quot;.json&quot;</span><span class=\"p\">):</span>\n            <span class=\"n\">vocab_texts</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">loads</span><span class=\"p\">(</span><span class=\"n\">vocab_texts</span><span class=\"p\">)</span>  <span class=\"c1\"># {token: id}</span>\n            <span class=\"n\">predefine_vocab</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">item</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span>\n                               <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">vocab_texts</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">(),</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;support vocab extention. .txt or .json&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">build</span><span class=\"p\">(</span><span class=\"n\">token_counter</span><span class=\"p\">,</span> <span class=\"n\">predefine_vocab</span><span class=\"o\">=</span><span class=\"n\">predefine_vocab</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_to_index</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Vocab.add\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab.add\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">add</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"p\">,</span> <span class=\"n\">predefine_vocab</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_to_index</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span>  <span class=\"c1\"># already added</span>\n        <span class=\"k\">if</span> <span class=\"n\">predefine_vocab</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pretrained_token</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">PRETRAINED_INTERSECT</span> <span class=\"ow\">and</span> <span class=\"n\">token</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">predefine_vocab</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span>\n\n        <span class=\"n\">index</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_to_index</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_to_index</span><span class=\"p\">[</span><span class=\"n\">token</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">index</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index_to_token</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">token</span></div>\n\n<div class=\"viewcode-block\" id=\"Vocab.get_index\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab.get_index\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_to_index</span><span class=\"p\">[</span><span class=\"n\">token</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"Vocab.get_token\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab.get_token\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_token</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">index</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index_to_token</span><span class=\"p\">[</span><span class=\"n\">index</span><span class=\"p\">]</span></div>\n\n<div class=\"viewcode-block\" id=\"Vocab.get_all_tokens\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab.get_all_tokens\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_all_tokens</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_to_index</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span></div>\n\n<div class=\"viewcode-block\" id=\"Vocab.dump\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab.dump\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">dump</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s2\">&quot;utf-8&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">out_file</span><span class=\"p\">:</span>\n            <span class=\"n\">out_file</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to_text</span><span class=\"p\">())</span></div>\n\n<div class=\"viewcode-block\" id=\"Vocab.load\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab.load\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">load</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"s2\">&quot;r&quot;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s2\">&quot;utf-8&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">in_file</span><span class=\"p\">:</span>\n            <span class=\"n\">texts</span> <span class=\"o\">=</span> <span class=\"n\">in_file</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">from_texts</span><span class=\"p\">(</span><span class=\"n\">texts</span><span class=\"p\">)</span></div>\n\n<div class=\"viewcode-block\" id=\"Vocab.to_text\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab.to_text\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">to_text</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_all_tokens</span><span class=\"p\">())</span></div>\n\n<div class=\"viewcode-block\" id=\"Vocab.from_texts\"><a class=\"viewcode-back\" href=\"../../../claf.tokens.html#claf.tokens.vocabulary.Vocab.from_texts\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">from_texts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">texts</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">texts</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">list</span><span class=\"p\">:</span>\n            <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"n\">texts</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">token</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">texts</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)]</span>\n        <span class=\"n\">tokens</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">token</span> <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokens</span> <span class=\"k\">if</span> <span class=\"n\">token</span><span class=\"p\">]</span>  <span class=\"c1\"># filtering empty string</span>\n\n        <span class=\"c1\"># basic token (pad and oov)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_token</span> <span class=\"ow\">in</span> <span class=\"n\">tokens</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_index</span> <span class=\"o\">=</span> <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_token</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_index</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">)</span>\n            <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pad_token</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_token</span> <span class=\"ow\">in</span> <span class=\"n\">tokens</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_index</span> <span class=\"o\">=</span> <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_token</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_index</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">tokens</span><span class=\"p\">)</span>\n            <span class=\"n\">tokens</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_token</span><span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">token_to_index</span> <span class=\"o\">=</span> <span class=\"n\">VocabDict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_index</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">index_to_token</span> <span class=\"o\">=</span> <span class=\"n\">VocabDict</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">oov_token</span><span class=\"p\">)</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">token</span> <span class=\"ow\">in</span> <span class=\"n\">tokens</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">token</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span></div></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/tokens.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../\" src=\"../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../index.html\">\n          \n\n          \n            \n            <img src=\"../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.tokens</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.tokens</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.decorator</span> <span class=\"k\">import</span> <span class=\"n\">register</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens</span> <span class=\"k\">import</span> <span class=\"n\">indexer</span><span class=\"p\">,</span> <span class=\"n\">embedding</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.linguistic</span> <span class=\"k\">import</span> <span class=\"n\">POSTag</span><span class=\"p\">,</span> <span class=\"n\">NER</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.token_maker</span> <span class=\"k\">import</span> <span class=\"n\">TokenMaker</span>\n<span class=\"kn\">from</span> <span class=\"nn\">claf.tokens.tokenizer</span> <span class=\"k\">import</span> <span class=\"n\">PassText</span>\n\n\n<div class=\"viewcode-block\" id=\"basic_embedding_fn\"><a class=\"viewcode-back\" href=\"../../claf.tokens.html#claf.tokens.basic_embedding_fn\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">basic_embedding_fn</span><span class=\"p\">(</span><span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">module</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">wrapper</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">):</span>\n        <span class=\"n\">embedding_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;vocab&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">vocab</span>\n        <span class=\"k\">return</span> <span class=\"n\">module</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">embedding_config</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">wrapper</span></div>\n\n\n<div class=\"viewcode-block\" id=\"FeatureTokenMaker\"><a class=\"viewcode-back\" href=\"../../claf.tokens.html#claf.tokens.FeatureTokenMaker\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;token:</span><span class=\"si\">{TokenMaker.FEATURE_TYPE}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">FeatureTokenMaker</span><span class=\"p\">(</span><span class=\"n\">TokenMaker</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Feature Token</span>\n\n<span class=\"sd\">    Do not use Embedding function.</span>\n<span class=\"sd\">    Just pass indexed_feature</span>\n\n<span class=\"sd\">    example.</span>\n<span class=\"sd\">        hello -&gt; [&#39;hello&#39;, &#39;world&#39;] -&gt; [3, 5] -&gt; tensor</span>\n\n<span class=\"sd\">    consisting of</span>\n<span class=\"sd\">        - tokenizer: Tokenizer (need to define unit)</span>\n<span class=\"sd\">        - indexer: WordIndexer</span>\n<span class=\"sd\">        - embedding: None</span>\n<span class=\"sd\">        - vocab: Vocab</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">,</span> <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">vocab_config</span><span class=\"p\">):</span>\n        <span class=\"n\">tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">PassText</span><span class=\"p\">()</span>\n        <span class=\"n\">do_tokenize</span> <span class=\"o\">=</span> <span class=\"n\">indexer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;do_tokenize&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">do_tokenize</span><span class=\"p\">:</span>\n            <span class=\"n\">text_unit</span> <span class=\"o\">=</span> <span class=\"n\">indexer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;unit&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">text_unit</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;When use &#39;do_tokenize&#39;, &#39;unit&#39; is required. &quot;</span><span class=\"p\">)</span>\n\n            <span class=\"k\">del</span> <span class=\"n\">indexer_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;unit&quot;</span><span class=\"p\">]</span>\n            <span class=\"n\">tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"n\">text_unit</span><span class=\"p\">]</span>\n\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">FeatureTokenMaker</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">TokenMaker</span><span class=\"o\">.</span><span class=\"n\">FEATURE_TYPE</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizer</span><span class=\"o\">=</span><span class=\"n\">tokenizer</span><span class=\"p\">,</span>\n            <span class=\"n\">indexer</span><span class=\"o\">=</span><span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">WordIndexer</span><span class=\"p\">(</span><span class=\"n\">tokenizer</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">indexer_config</span><span class=\"p\">),</span>\n            <span class=\"n\">embedding_fn</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"n\">vocab_config</span><span class=\"o\">=</span><span class=\"n\">vocab_config</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"BertTokenMaker\"><a class=\"viewcode-back\" href=\"../../claf.tokens.html#claf.tokens.BertTokenMaker\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;token:</span><span class=\"si\">{TokenMaker.BERT_TYPE}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">BertTokenMaker</span><span class=\"p\">(</span><span class=\"n\">TokenMaker</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    BERT Token</span>\n<span class=\"sd\">    Pre-training of Deep Bidirectional Transformers for Language Understanding</span>\n\n<span class=\"sd\">    example.</span>\n<span class=\"sd\">        hello -&gt; [&#39;[CLS]&#39;, &#39;he&#39;, &#39;##llo&#39;, [SEP]] -&gt; [1, 4, 7, 2] -&gt; BERT -&gt; tensor</span>\n\n<span class=\"sd\">    consisting of</span>\n<span class=\"sd\">        - tokenizer: WordTokenizer</span>\n<span class=\"sd\">        - indexer: WordIndexer</span>\n<span class=\"sd\">        - embedding: ELMoEmbedding (Language Modeling BiLSTM)</span>\n<span class=\"sd\">        - vocab: Vocab</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">,</span> <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">vocab_config</span><span class=\"p\">):</span>\n        <span class=\"n\">tokenizer</span> <span class=\"o\">=</span> <span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;subword&quot;</span><span class=\"p\">]</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">BertTokenMaker</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">TokenMaker</span><span class=\"o\">.</span><span class=\"n\">BERT_TYPE</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizer</span><span class=\"o\">=</span><span class=\"n\">tokenizer</span><span class=\"p\">,</span>\n            <span class=\"n\">indexer</span><span class=\"o\">=</span><span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">BertIndexer</span><span class=\"p\">(</span><span class=\"n\">tokenizer</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">indexer_config</span><span class=\"p\">),</span>\n            <span class=\"n\">embedding_fn</span><span class=\"o\">=</span><span class=\"n\">basic_embedding_fn</span><span class=\"p\">(</span><span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">BertEmbedding</span><span class=\"p\">),</span>\n            <span class=\"n\">vocab_config</span><span class=\"o\">=</span><span class=\"n\">vocab_config</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"CharTokenMaker\"><a class=\"viewcode-back\" href=\"../../claf.tokens.html#claf.tokens.CharTokenMaker\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;token:</span><span class=\"si\">{TokenMaker.CHAR_TYPE}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">CharTokenMaker</span><span class=\"p\">(</span><span class=\"n\">TokenMaker</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Character Token</span>\n\n<span class=\"sd\">    Character-level Convolutional Networks for Text Classification</span>\n<span class=\"sd\">    (https://arxiv.org/abs/1509.01626)</span>\n\n<span class=\"sd\">    example.</span>\n<span class=\"sd\">        hello -&gt; [&#39;h&#39;, &#39;e&#39;, &#39;l&#39;, &#39;l&#39;, &#39;o&#39;] -&gt; [2, 3, 4, 4, 5] -&gt; CharCNN -&gt; tensor</span>\n\n<span class=\"sd\">    consisting of</span>\n<span class=\"sd\">        - tokenizer: CharTokenizer</span>\n<span class=\"sd\">        - indexer: CharIndexer</span>\n<span class=\"sd\">        - embedding: CharEmbedding (CharCNN)</span>\n<span class=\"sd\">        - vocab: Vocab</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">,</span> <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">vocab_config</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CharTokenMaker</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">TokenMaker</span><span class=\"o\">.</span><span class=\"n\">CHAR_TYPE</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizer</span><span class=\"o\">=</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;char&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">indexer</span><span class=\"o\">=</span><span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">CharIndexer</span><span class=\"p\">(</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;char&quot;</span><span class=\"p\">],</span> <span class=\"o\">**</span><span class=\"n\">indexer_config</span><span class=\"p\">),</span>\n            <span class=\"n\">embedding_fn</span><span class=\"o\">=</span><span class=\"n\">basic_embedding_fn</span><span class=\"p\">(</span><span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">CharEmbedding</span><span class=\"p\">),</span>\n            <span class=\"n\">vocab_config</span><span class=\"o\">=</span><span class=\"n\">vocab_config</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"CoveTokenMaker\"><a class=\"viewcode-back\" href=\"../../claf.tokens.html#claf.tokens.CoveTokenMaker\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;token:</span><span class=\"si\">{TokenMaker.COVE_TYPE}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">CoveTokenMaker</span><span class=\"p\">(</span><span class=\"n\">TokenMaker</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    CoVe Token</span>\n\n<span class=\"sd\">    Learned in Translation: Contextualized Word Vectors (McCann et. al. 2017)</span>\n<span class=\"sd\">    (https://github.com/salesforce/cove)</span>\n\n<span class=\"sd\">    example.</span>\n<span class=\"sd\">        hello -&gt; [&#39;hello&#39;] -&gt; [2] -&gt; CoVe -&gt; tensor</span>\n\n<span class=\"sd\">    consisting of</span>\n<span class=\"sd\">        - tokenizer: WordTokenizer</span>\n<span class=\"sd\">        - indexer: WordIndexer</span>\n<span class=\"sd\">        - embedding: CoveEmbedding (Machine Translation LSTM)</span>\n<span class=\"sd\">        - vocab: Vocab</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">,</span> <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">vocab_config</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">CoveTokenMaker</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">TokenMaker</span><span class=\"o\">.</span><span class=\"n\">CHAR_TYPE</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizer</span><span class=\"o\">=</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">indexer</span><span class=\"o\">=</span><span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">WordIndexer</span><span class=\"p\">(</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span> <span class=\"o\">**</span><span class=\"n\">indexer_config</span><span class=\"p\">),</span>\n            <span class=\"n\">embedding_fn</span><span class=\"o\">=</span><span class=\"n\">basic_embedding_fn</span><span class=\"p\">(</span><span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">CoveEmbedding</span><span class=\"p\">),</span>\n            <span class=\"n\">vocab_config</span><span class=\"o\">=</span><span class=\"n\">vocab_config</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"ElmoTokenMaker\"><a class=\"viewcode-back\" href=\"../../claf.tokens.html#claf.tokens.ElmoTokenMaker\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;token:</span><span class=\"si\">{TokenMaker.ELMO_TYPE}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">ElmoTokenMaker</span><span class=\"p\">(</span><span class=\"n\">TokenMaker</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    ELMo Token</span>\n<span class=\"sd\">    Embedding from Language Modeling</span>\n\n<span class=\"sd\">    Deep contextualized word representations</span>\n<span class=\"sd\">    (https://github.com/allenai/allennlp/blob/master/allennlp/modules/elmo.py)</span>\n\n<span class=\"sd\">    example.</span>\n<span class=\"sd\">        hello -&gt; [&#39;h&#39;, &#39;e&#39;, &#39;l&#39;, &#39;l&#39;, &#39;o&#39;] -&gt; [2, 3, 4, 4, 5] -&gt; ELMo -&gt; tensor</span>\n\n<span class=\"sd\">    consisting of</span>\n<span class=\"sd\">        - tokenizer: WordTokenizer</span>\n<span class=\"sd\">        - indexer: WordIndexer</span>\n<span class=\"sd\">        - embedding: ELMoEmbedding (Language Modeling BiLSTM)</span>\n<span class=\"sd\">        - vocab: Vocab</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">,</span> <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">vocab_config</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">ElmoTokenMaker</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">TokenMaker</span><span class=\"o\">.</span><span class=\"n\">WORD_TYPE</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizer</span><span class=\"o\">=</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">indexer</span><span class=\"o\">=</span><span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">ELMoIndexer</span><span class=\"p\">(</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span> <span class=\"o\">**</span><span class=\"n\">indexer_config</span><span class=\"p\">),</span>\n            <span class=\"n\">embedding_fn</span><span class=\"o\">=</span><span class=\"n\">basic_embedding_fn</span><span class=\"p\">(</span><span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">ELMoEmbedding</span><span class=\"p\">),</span>\n            <span class=\"n\">vocab_config</span><span class=\"o\">=</span><span class=\"s2\">&quot;elmo&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"ExactMatchTokenMaker\"><a class=\"viewcode-back\" href=\"../../claf.tokens.html#claf.tokens.ExactMatchTokenMaker\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;token:</span><span class=\"si\">{TokenMaker.EXACT_MATCH_TYPE}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">ExactMatchTokenMaker</span><span class=\"p\">(</span><span class=\"n\">TokenMaker</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Exact Match Token (Sparse Feature)</span>\n\n<span class=\"sd\">    Three simple binary features, indicating whether p_i can be exactly matched</span>\n<span class=\"sd\">    to one question word in q, either in its original, lowercase or lemma form.</span>\n\n<span class=\"sd\">    example.</span>\n<span class=\"sd\">        c: i do, q: i -&gt; [&#39;i&#39;, &#39;do&#39;] -&gt; [1, 0] -&gt; tensor</span>\n\n<span class=\"sd\">    consisting of</span>\n<span class=\"sd\">        - tokenizer: WordTokenizer</span>\n<span class=\"sd\">        - indexer: WordIndexer</span>\n<span class=\"sd\">        - embedding: SparseFeature</span>\n<span class=\"sd\">        - vocab: Vocab</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">,</span> <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">vocab_config</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">ExactMatchTokenMaker</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">TokenMaker</span><span class=\"o\">.</span><span class=\"n\">EXACT_MATCH_TYPE</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizer</span><span class=\"o\">=</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">indexer</span><span class=\"o\">=</span><span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">ExactMatchIndexer</span><span class=\"p\">(</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span> <span class=\"o\">**</span><span class=\"n\">indexer_config</span><span class=\"p\">),</span>\n            <span class=\"n\">embedding_fn</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_embedding_fn</span><span class=\"p\">(</span><span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">),</span>\n            <span class=\"n\">vocab_config</span><span class=\"o\">=</span><span class=\"n\">vocab_config</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_embedding_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">):</span>\n        <span class=\"k\">def</span> <span class=\"nf\">wrapper</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">):</span>\n            <span class=\"n\">embed_type</span> <span class=\"o\">=</span> <span class=\"n\">embedding_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;type&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;sparse&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"s2\">&quot;type&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">embedding_config</span><span class=\"p\">:</span>\n                <span class=\"k\">del</span> <span class=\"n\">embedding_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;type&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">binary_classes</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;False&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;True&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">feature_count</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># origin</span>\n            <span class=\"n\">embedding_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">binary_classes</span><span class=\"p\">]</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">indexer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;lower&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n                <span class=\"n\">feature_count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n                <span class=\"n\">embedding_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">binary_classes</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">indexer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;lemma&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n                <span class=\"n\">feature_count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n                <span class=\"n\">embedding_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">binary_classes</span><span class=\"p\">)</span>\n\n            <span class=\"k\">return</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">SparseFeature</span><span class=\"p\">(</span>\n                <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">embed_type</span><span class=\"p\">,</span> <span class=\"n\">feature_count</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">embedding_config</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">wrapper</span></div>\n\n\n<div class=\"viewcode-block\" id=\"WordTokenMaker\"><a class=\"viewcode-back\" href=\"../../claf.tokens.html#claf.tokens.WordTokenMaker\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;token:</span><span class=\"si\">{TokenMaker.WORD_TYPE}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">WordTokenMaker</span><span class=\"p\">(</span><span class=\"n\">TokenMaker</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Word Token (default)</span>\n\n<span class=\"sd\">        i do -&gt; [&#39;i&#39;, &#39;do&#39;] -&gt; [1, 2] -&gt; Embedding Matrix -&gt; tensor</span>\n\n<span class=\"sd\">    consisting of</span>\n<span class=\"sd\">        - tokenizer: WordTokenizer</span>\n<span class=\"sd\">        - indexer: WordIndexer</span>\n<span class=\"sd\">        - embedding: WordEmbedding</span>\n<span class=\"sd\">        - vocab: Vocab</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">,</span> <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">vocab_config</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">WordTokenMaker</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">TokenMaker</span><span class=\"o\">.</span><span class=\"n\">WORD_TYPE</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizer</span><span class=\"o\">=</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">indexer</span><span class=\"o\">=</span><span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">WordIndexer</span><span class=\"p\">(</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span> <span class=\"o\">**</span><span class=\"n\">indexer_config</span><span class=\"p\">),</span>\n            <span class=\"n\">embedding_fn</span><span class=\"o\">=</span><span class=\"n\">basic_embedding_fn</span><span class=\"p\">(</span><span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">WordEmbedding</span><span class=\"p\">),</span>\n            <span class=\"n\">vocab_config</span><span class=\"o\">=</span><span class=\"n\">vocab_config</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"FrequentWordTokenMaker\"><a class=\"viewcode-back\" href=\"../../claf.tokens.html#claf.tokens.FrequentWordTokenMaker\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;token:</span><span class=\"si\">{TokenMaker.FREQUENT_WORD_TYPE}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">FrequentWordTokenMaker</span><span class=\"p\">(</span><span class=\"n\">TokenMaker</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Frequent-Tuning Word Token</span>\n\n<span class=\"sd\">    word token + pre-trained word embeddings fixed and only fine-tune the N most frequent</span>\n\n<span class=\"sd\">    example.</span>\n<span class=\"sd\">        i do -&gt; [&#39;i&#39;, &#39;do&#39;] -&gt; [1, 2] -&gt; Embedding Matrix -&gt; tensor</span>\n<span class=\"sd\">        finetuning only &#39;do&#39;</span>\n\n<span class=\"sd\">    consisting of</span>\n<span class=\"sd\">        - tokenizer: WordTokenizer</span>\n<span class=\"sd\">        - indexer: WordIndexer</span>\n<span class=\"sd\">        - embedding: FrequentTuningWordEmbedding</span>\n<span class=\"sd\">        - vocab: Vocab</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">,</span> <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">vocab_config</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">FrequentWordTokenMaker</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">TokenMaker</span><span class=\"o\">.</span><span class=\"n\">FREQUENT_WORD_TYPE</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizer</span><span class=\"o\">=</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">indexer</span><span class=\"o\">=</span><span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">WordIndexer</span><span class=\"p\">(</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span> <span class=\"o\">**</span><span class=\"n\">indexer_config</span><span class=\"p\">),</span>\n            <span class=\"n\">embedding_fn</span><span class=\"o\">=</span><span class=\"n\">basic_embedding_fn</span><span class=\"p\">(</span>\n                <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">FrequentTuningWordEmbedding</span>\n            <span class=\"p\">),</span>\n            <span class=\"n\">vocab_config</span><span class=\"o\">=</span><span class=\"n\">vocab_config</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"LinguisticTokenMaker\"><a class=\"viewcode-back\" href=\"../../claf.tokens.html#claf.tokens.LinguisticTokenMaker\">[docs]</a><span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;token:</span><span class=\"si\">{TokenMaker.LINGUISTIC_TYPE}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">LinguisticTokenMaker</span><span class=\"p\">(</span><span class=\"n\">TokenMaker</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Exact Match Token (Sparse Feature)</span>\n\n<span class=\"sd\">    Three simple binary features, indicating whether p_i can be exactly matched</span>\n<span class=\"sd\">    to one question word in q, either in its original, lowercase or lemma form.</span>\n\n<span class=\"sd\">    example.</span>\n<span class=\"sd\">        c: i do, q: i -&gt; [&#39;i&#39;, &#39;do&#39;] -&gt; [1, 0] -&gt; tensor</span>\n\n<span class=\"sd\">    consisting of</span>\n<span class=\"sd\">        - tokenizer: WordTokenizer</span>\n<span class=\"sd\">        - indexer: WordIndexer</span>\n<span class=\"sd\">        - embedding: SparseFeature</span>\n<span class=\"sd\">        - vocab: Vocab</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tokenizers</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">,</span> <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">vocab_config</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">LinguisticTokenMaker</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span>\n            <span class=\"n\">TokenMaker</span><span class=\"o\">.</span><span class=\"n\">LINGUISTIC_TYPE</span><span class=\"p\">,</span>\n            <span class=\"n\">tokenizer</span><span class=\"o\">=</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span>\n            <span class=\"n\">indexer</span><span class=\"o\">=</span><span class=\"n\">indexer</span><span class=\"o\">.</span><span class=\"n\">LinguisticIndexer</span><span class=\"p\">(</span><span class=\"n\">tokenizers</span><span class=\"p\">[</span><span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span> <span class=\"o\">**</span><span class=\"n\">indexer_config</span><span class=\"p\">),</span>\n            <span class=\"n\">embedding_fn</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_embedding_fn</span><span class=\"p\">(</span><span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">),</span>\n            <span class=\"n\">vocab_config</span><span class=\"o\">=</span><span class=\"n\">vocab_config</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_embedding_fn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">embedding_config</span><span class=\"p\">,</span> <span class=\"n\">indexer_config</span><span class=\"p\">):</span>\n        <span class=\"k\">def</span> <span class=\"nf\">wrapper</span><span class=\"p\">(</span><span class=\"n\">vocab</span><span class=\"p\">):</span>\n            <span class=\"n\">embed_type</span> <span class=\"o\">=</span> <span class=\"n\">embedding_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;type&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;sparse&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"s2\">&quot;type&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">embedding_config</span><span class=\"p\">:</span>\n                <span class=\"k\">del</span> <span class=\"n\">embedding_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;type&quot;</span><span class=\"p\">]</span>\n\n            <span class=\"n\">feature_count</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n            <span class=\"n\">embedding_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n            <span class=\"k\">if</span> <span class=\"n\">indexer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;pos_tag&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n                <span class=\"n\">feature_count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n                <span class=\"n\">embedding_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">POSTag</span><span class=\"o\">.</span><span class=\"n\">classes</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">indexer_config</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;ner&quot;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n                <span class=\"n\">feature_count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n                <span class=\"n\">embedding_config</span><span class=\"p\">[</span><span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">NER</span><span class=\"o\">.</span><span class=\"n\">classes</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">SparseFeature</span><span class=\"p\">(</span>\n                <span class=\"n\">vocab</span><span class=\"p\">,</span> <span class=\"n\">embed_type</span><span class=\"p\">,</span> <span class=\"n\">feature_count</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">embedding_config</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">wrapper</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/claf/utils.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.utils &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../../\" src=\"../../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../../index.html\">\n          \n\n          \n            \n            <img src=\"../../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"../index.html\">Module code</a> &raquo;</li>\n        \n      <li>claf.utils</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for claf.utils</h1><div class=\"highlight\"><pre>\n<span></span>\n<span class=\"kn\">import</span> <span class=\"nn\">logging</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">import</span> <span class=\"nn\">sys</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">claf.learn.mode</span> <span class=\"k\">import</span> <span class=\"n\">Mode</span>\n\n\n<span class=\"sd\">&quot;&quot;&quot; Interface &quot;&quot;&quot;</span>\n\n\n<div class=\"viewcode-block\" id=\"get_user_input\"><a class=\"viewcode-back\" href=\"../../claf.html#claf.utils.get_user_input\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_user_input</span><span class=\"p\">(</span><span class=\"n\">category</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"s2\">&quot;{category.capitalize()} &gt; &quot;</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stdout</span><span class=\"o\">.</span><span class=\"n\">flush</span><span class=\"p\">()</span>\n\n    <span class=\"n\">user_input</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stdin</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"nb\">eval</span><span class=\"p\">(</span><span class=\"n\">user_input</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"ne\">BaseException</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">user_input</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"flatten\"><a class=\"viewcode-back\" href=\"../../claf.html#claf.utils.flatten\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">flatten</span><span class=\"p\">(</span><span class=\"n\">l</span><span class=\"p\">):</span>\n    <span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"n\">l</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">item</span><span class=\"p\">,</span> <span class=\"nb\">list</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">in_item</span> <span class=\"ow\">in</span> <span class=\"n\">flatten</span><span class=\"p\">(</span><span class=\"n\">item</span><span class=\"p\">):</span>\n                <span class=\"k\">yield</span> <span class=\"n\">in_item</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">yield</span> <span class=\"n\">item</span></div>\n\n\n<span class=\"sd\">&quot;&quot;&quot; Logging &quot;&quot;&quot;</span>\n\n\n<div class=\"viewcode-block\" id=\"set_logging_config\"><a class=\"viewcode-back\" href=\"../../claf.html#claf.utils.set_logging_config\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">set_logging_config</span><span class=\"p\">(</span><span class=\"n\">mode</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span>\n    <span class=\"n\">stdout_handler</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">StreamHandler</span><span class=\"p\">(</span><span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stdout</span><span class=\"p\">)</span>\n\n    <span class=\"n\">logging_handlers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">stdout_handler</span><span class=\"p\">]</span>\n    <span class=\"n\">logging_level</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">INFO</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">mode</span> <span class=\"o\">==</span> <span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">TRAIN</span><span class=\"p\">:</span>\n        <span class=\"n\">log_path</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span>\n            <span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">trainer</span><span class=\"o\">.</span><span class=\"n\">log_dir</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{config.data_reader.dataset}</span><span class=\"s2\">_</span><span class=\"si\">{config.model.name}</span><span class=\"s2\">.log&quot;</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">makedirs</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">dirname</span><span class=\"p\">(</span><span class=\"n\">log_path</span><span class=\"p\">),</span> <span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"n\">file_handler</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">FileHandler</span><span class=\"p\">(</span><span class=\"n\">log_path</span><span class=\"p\">)</span>\n        <span class=\"n\">logging_handlers</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">file_handler</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">mode</span> <span class=\"o\">==</span> <span class=\"n\">Mode</span><span class=\"o\">.</span><span class=\"n\">PREDICT</span><span class=\"p\">:</span>\n        <span class=\"n\">logging_level</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">WARNING</span>\n\n    <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">basicConfig</span><span class=\"p\">(</span>\n        <span class=\"nb\">format</span><span class=\"o\">=</span><span class=\"s2\">&quot;</span><span class=\"si\">%(asctime)s</span><span class=\"s2\"> (</span><span class=\"si\">%(filename)s</span><span class=\"s2\">:</span><span class=\"si\">%(lineno)d</span><span class=\"s2\">): [</span><span class=\"si\">%(levelname)s</span><span class=\"s2\">] - </span><span class=\"si\">%(message)s</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">handlers</span><span class=\"o\">=</span><span class=\"n\">logging_handlers</span><span class=\"p\">,</span>\n        <span class=\"n\">level</span><span class=\"o\">=</span><span class=\"n\">logging_level</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span></div>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/index.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>Overview: module code &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n      <li>Overview: module code</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>All modules for which code is available</h1>\n<ul><li><a href=\"claf/config/args.html\">claf.config.args</a></li>\n<li><a href=\"claf/config/factory/base.html\">claf.config.factory.base</a></li>\n<li><a href=\"claf/config/factory/data_loader.html\">claf.config.factory.data_loader</a></li>\n<li><a href=\"claf/config/factory/data_reader.html\">claf.config.factory.data_reader</a></li>\n<li><a href=\"claf/config/factory/model.html\">claf.config.factory.model</a></li>\n<li><a href=\"claf/config/factory/optimizer.html\">claf.config.factory.optimizer</a></li>\n<li><a href=\"claf/config/factory/tokens.html\">claf.config.factory.tokens</a></li>\n<li><a href=\"claf/config/namespace.html\">claf.config.namespace</a></li>\n<li><a href=\"claf/config/pattern.html\">claf.config.pattern</a></li>\n<li><a href=\"claf/config/registry.html\">claf.config.registry</a></li>\n<li><a href=\"claf/config/utils.html\">claf.config.utils</a></li>\n<li><a href=\"claf/data/collate.html\">claf.data.collate</a></li>\n<li><a href=\"claf/data/data_handler.html\">claf.data.data_handler</a></li>\n<li><a href=\"claf/data/dataset/base.html\">claf.data.dataset.base</a></li>\n<li><a href=\"claf/data/dataset/bert/multi_task.html\">claf.data.dataset.bert.multi_task</a></li>\n<li><a href=\"claf/data/dataset/bert/regression.html\">claf.data.dataset.bert.regression</a></li>\n<li><a href=\"claf/data/dataset/bert/seq_cls.html\">claf.data.dataset.bert.seq_cls</a></li>\n<li><a href=\"claf/data/dataset/bert/squad.html\">claf.data.dataset.bert.squad</a></li>\n<li><a href=\"claf/data/dataset/bert/tok_cls.html\">claf.data.dataset.bert.tok_cls</a></li>\n<li><a href=\"claf/data/dataset/seq_cls.html\">claf.data.dataset.seq_cls</a></li>\n<li><a href=\"claf/data/dataset/squad.html\">claf.data.dataset.squad</a></li>\n<li><a href=\"claf/data/dataset/wikisql.html\">claf.data.dataset.wikisql</a></li>\n<li><a href=\"claf/data/reader/base.html\">claf.data.reader.base</a></li>\n<li><a href=\"claf/data/reader/bert/conll2003.html\">claf.data.reader.bert.conll2003</a></li>\n<li><a href=\"claf/data/reader/bert/glue/cola.html\">claf.data.reader.bert.glue.cola</a></li>\n<li><a href=\"claf/data/reader/bert/glue/mnli.html\">claf.data.reader.bert.glue.mnli</a></li>\n<li><a href=\"claf/data/reader/bert/glue/mrpc.html\">claf.data.reader.bert.glue.mrpc</a></li>\n<li><a href=\"claf/data/reader/bert/glue/qnli.html\">claf.data.reader.bert.glue.qnli</a></li>\n<li><a href=\"claf/data/reader/bert/glue/qqp.html\">claf.data.reader.bert.glue.qqp</a></li>\n<li><a href=\"claf/data/reader/bert/glue/rte.html\">claf.data.reader.bert.glue.rte</a></li>\n<li><a href=\"claf/data/reader/bert/glue/sst.html\">claf.data.reader.bert.glue.sst</a></li>\n<li><a href=\"claf/data/reader/bert/glue/stsb.html\">claf.data.reader.bert.glue.stsb</a></li>\n<li><a href=\"claf/data/reader/bert/glue/wnli.html\">claf.data.reader.bert.glue.wnli</a></li>\n<li><a href=\"claf/data/reader/bert/multi_task.html\">claf.data.reader.bert.multi_task</a></li>\n<li><a href=\"claf/data/reader/bert/regression.html\">claf.data.reader.bert.regression</a></li>\n<li><a href=\"claf/data/reader/bert/seq_cls.html\">claf.data.reader.bert.seq_cls</a></li>\n<li><a href=\"claf/data/reader/bert/squad.html\">claf.data.reader.bert.squad</a></li>\n<li><a href=\"claf/data/reader/bert/tok_cls.html\">claf.data.reader.bert.tok_cls</a></li>\n<li><a href=\"claf/data/reader/cola.html\">claf.data.reader.cola</a></li>\n<li><a href=\"claf/data/reader/seq_cls.html\">claf.data.reader.seq_cls</a></li>\n<li><a href=\"claf/data/reader/squad.html\">claf.data.reader.squad</a></li>\n<li><a href=\"claf/data/reader/wikisql.html\">claf.data.reader.wikisql</a></li>\n<li><a href=\"claf/data/utils.html\">claf.data.utils</a></li>\n<li><a href=\"claf/decorator/arguments.html\">claf.decorator.arguments</a></li>\n<li><a href=\"claf/decorator/register.html\">claf.decorator.register</a></li>\n<li><a href=\"claf/learn/experiment.html\">claf.learn.experiment</a></li>\n<li><a href=\"claf/learn/mode.html\">claf.learn.mode</a></li>\n<li><a href=\"claf/learn/tensorboard.html\">claf.learn.tensorboard</a></li>\n<li><a href=\"claf/learn/trainer.html\">claf.learn.trainer</a></li>\n<li><a href=\"claf/learn/utils.html\">claf.learn.utils</a></li>\n<li><a href=\"claf/machine/base.html\">claf.machine.base</a></li>\n<li><a href=\"claf/machine/components/retrieval/tfidf.html\">claf.machine.components.retrieval.tfidf</a></li>\n<li><a href=\"claf/machine/module.html\">claf.machine.module</a></li>\n<li><a href=\"claf/machine/nlu.html\">claf.machine.nlu</a></li>\n<li><a href=\"claf/machine/open_qa.html\">claf.machine.open_qa</a></li>\n<li><a href=\"claf/metric/classification.html\">claf.metric.classification</a></li>\n<li><a href=\"claf/metric/squad_v1_official.html\">claf.metric.squad_v1_official</a></li>\n<li><a href=\"claf/metric/squad_v2_official.html\">claf.metric.squad_v2_official</a></li>\n<li><a href=\"claf/metric/wikisql_official.html\">claf.metric.wikisql_official</a></li>\n<li><a href=\"claf/model/base.html\">claf.model.base</a></li>\n<li><a href=\"claf/model/cls_utils.html\">claf.model.cls_utils</a></li>\n<li><a href=\"claf/model/reading_comprehension/bert.html\">claf.model.reading_comprehension.bert</a></li>\n<li><a href=\"claf/model/reading_comprehension/bidaf.html\">claf.model.reading_comprehension.bidaf</a></li>\n<li><a href=\"claf/model/reading_comprehension/bidaf_no_answer.html\">claf.model.reading_comprehension.bidaf_no_answer</a></li>\n<li><a href=\"claf/model/reading_comprehension/docqa.html\">claf.model.reading_comprehension.docqa</a></li>\n<li><a href=\"claf/model/reading_comprehension/docqa_no_answer.html\">claf.model.reading_comprehension.docqa_no_answer</a></li>\n<li><a href=\"claf/model/reading_comprehension/drqa.html\">claf.model.reading_comprehension.drqa</a></li>\n<li><a href=\"claf/model/reading_comprehension/mixin.html\">claf.model.reading_comprehension.mixin</a></li>\n<li><a href=\"claf/model/reading_comprehension/qanet.html\">claf.model.reading_comprehension.qanet</a></li>\n<li><a href=\"claf/model/reading_comprehension/roberta.html\">claf.model.reading_comprehension.roberta</a></li>\n<li><a href=\"claf/model/semantic_parsing/mixin.html\">claf.model.semantic_parsing.mixin</a></li>\n<li><a href=\"claf/model/semantic_parsing/sqlnet.html\">claf.model.semantic_parsing.sqlnet</a></li>\n<li><a href=\"claf/model/semantic_parsing/utils.html\">claf.model.semantic_parsing.utils</a></li>\n<li><a href=\"claf/model/sequence_classification/bert.html\">claf.model.sequence_classification.bert</a></li>\n<li><a href=\"claf/model/sequence_classification/mixin.html\">claf.model.sequence_classification.mixin</a></li>\n<li><a href=\"claf/model/sequence_classification/roberta.html\">claf.model.sequence_classification.roberta</a></li>\n<li><a href=\"claf/model/sequence_classification/structured_self_attention.html\">claf.model.sequence_classification.structured_self_attention</a></li>\n<li><a href=\"claf/model/token_classification/bert.html\">claf.model.token_classification.bert</a></li>\n<li><a href=\"claf/model/token_classification/mixin.html\">claf.model.token_classification.mixin</a></li>\n<li><a href=\"claf/modules/activation.html\">claf.modules.activation</a></li>\n<li><a href=\"claf/modules/attention/bi_attention.html\">claf.modules.attention.bi_attention</a></li>\n<li><a href=\"claf/modules/attention/co_attention.html\">claf.modules.attention.co_attention</a></li>\n<li><a href=\"claf/modules/attention/docqa_attention.html\">claf.modules.attention.docqa_attention</a></li>\n<li><a href=\"claf/modules/attention/multi_head_attention.html\">claf.modules.attention.multi_head_attention</a></li>\n<li><a href=\"claf/modules/attention/seq_attention.html\">claf.modules.attention.seq_attention</a></li>\n<li><a href=\"claf/modules/conv/depthwise_separable_conv.html\">claf.modules.conv.depthwise_separable_conv</a></li>\n<li><a href=\"claf/modules/conv/pointwise_conv.html\">claf.modules.conv.pointwise_conv</a></li>\n<li><a href=\"claf/modules/encoder/lstm_cell_with_projection.html\">claf.modules.encoder.lstm_cell_with_projection</a></li>\n<li><a href=\"claf/modules/encoder/positional.html\">claf.modules.encoder.positional</a></li>\n<li><a href=\"claf/modules/functional.html\">claf.modules.functional</a></li>\n<li><a href=\"claf/modules/initializer.html\">claf.modules.initializer</a></li>\n<li><a href=\"claf/modules/layer/highway.html\">claf.modules.layer.highway</a></li>\n<li><a href=\"claf/modules/layer/normalization.html\">claf.modules.layer.normalization</a></li>\n<li><a href=\"claf/modules/layer/positionwise.html\">claf.modules.layer.positionwise</a></li>\n<li><a href=\"claf/modules/layer/residual.html\">claf.modules.layer.residual</a></li>\n<li><a href=\"claf/modules/layer/scalar_mix.html\">claf.modules.layer.scalar_mix</a></li>\n<li><a href=\"claf/tokens.html\">claf.tokens</a></li>\n<ul><li><a href=\"claf/tokens/cove.html\">claf.tokens.cove</a></li>\n<li><a href=\"claf/tokens/elmo.html\">claf.tokens.elmo</a></li>\n<li><a href=\"claf/tokens/embedding/base.html\">claf.tokens.embedding.base</a></li>\n<li><a href=\"claf/tokens/embedding/bert_embedding.html\">claf.tokens.embedding.bert_embedding</a></li>\n<li><a href=\"claf/tokens/embedding/char_embedding.html\">claf.tokens.embedding.char_embedding</a></li>\n<li><a href=\"claf/tokens/embedding/cove_embedding.html\">claf.tokens.embedding.cove_embedding</a></li>\n<li><a href=\"claf/tokens/embedding/elmo_embedding.html\">claf.tokens.embedding.elmo_embedding</a></li>\n<li><a href=\"claf/tokens/embedding/frequent_word_embedding.html\">claf.tokens.embedding.frequent_word_embedding</a></li>\n<li><a href=\"claf/tokens/embedding/sparse_feature.html\">claf.tokens.embedding.sparse_feature</a></li>\n<li><a href=\"claf/tokens/embedding/word_embedding.html\">claf.tokens.embedding.word_embedding</a></li>\n<li><a href=\"claf/tokens/hangul.html\">claf.tokens.hangul</a></li>\n<li><a href=\"claf/tokens/indexer/base.html\">claf.tokens.indexer.base</a></li>\n<li><a href=\"claf/tokens/indexer/bert_indexer.html\">claf.tokens.indexer.bert_indexer</a></li>\n<li><a href=\"claf/tokens/indexer/char_indexer.html\">claf.tokens.indexer.char_indexer</a></li>\n<li><a href=\"claf/tokens/indexer/elmo_indexer.html\">claf.tokens.indexer.elmo_indexer</a></li>\n<li><a href=\"claf/tokens/indexer/exact_match_indexer.html\">claf.tokens.indexer.exact_match_indexer</a></li>\n<li><a href=\"claf/tokens/indexer/linguistic_indexer.html\">claf.tokens.indexer.linguistic_indexer</a></li>\n<li><a href=\"claf/tokens/indexer/word_indexer.html\">claf.tokens.indexer.word_indexer</a></li>\n<li><a href=\"claf/tokens/linguistic.html\">claf.tokens.linguistic</a></li>\n<li><a href=\"claf/tokens/text_handler.html\">claf.tokens.text_handler</a></li>\n<li><a href=\"claf/tokens/token_embedder/base.html\">claf.tokens.token_embedder.base</a></li>\n<li><a href=\"claf/tokens/token_embedder/basic_embedder.html\">claf.tokens.token_embedder.basic_embedder</a></li>\n<li><a href=\"claf/tokens/token_embedder/reading_comprehension_embedder.html\">claf.tokens.token_embedder.reading_comprehension_embedder</a></li>\n<li><a href=\"claf/tokens/token_maker.html\">claf.tokens.token_maker</a></li>\n<li><a href=\"claf/tokens/tokenizer/base.html\">claf.tokens.tokenizer.base</a></li>\n<li><a href=\"claf/tokens/tokenizer/bpe.html\">claf.tokens.tokenizer.bpe</a></li>\n<li><a href=\"claf/tokens/tokenizer/char.html\">claf.tokens.tokenizer.char</a></li>\n<li><a href=\"claf/tokens/tokenizer/pass_text.html\">claf.tokens.tokenizer.pass_text</a></li>\n<li><a href=\"claf/tokens/tokenizer/sent.html\">claf.tokens.tokenizer.sent</a></li>\n<li><a href=\"claf/tokens/tokenizer/subword.html\">claf.tokens.tokenizer.subword</a></li>\n<li><a href=\"claf/tokens/tokenizer/utils.html\">claf.tokens.tokenizer.utils</a></li>\n<li><a href=\"claf/tokens/tokenizer/word.html\">claf.tokens.tokenizer.word</a></li>\n<li><a href=\"claf/tokens/vocabulary.html\">claf.tokens.vocabulary</a></li>\n</ul><li><a href=\"claf/utils.html\">claf.utils</a></li>\n<li><a href=\"logging.html\">logging</a></li>\n<li><a href=\"pathlib.html\">pathlib</a></li>\n</ul>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/logging.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>logging &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"index.html\">Module code</a> &raquo;</li>\n        \n      <li>logging</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for logging</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"c1\"># Copyright 2001-2016 by Vinay Sajip. All Rights Reserved.</span>\n<span class=\"c1\">#</span>\n<span class=\"c1\"># Permission to use, copy, modify, and distribute this software and its</span>\n<span class=\"c1\"># documentation for any purpose and without fee is hereby granted,</span>\n<span class=\"c1\"># provided that the above copyright notice appear in all copies and that</span>\n<span class=\"c1\"># both that copyright notice and this permission notice appear in</span>\n<span class=\"c1\"># supporting documentation, and that the name of Vinay Sajip</span>\n<span class=\"c1\"># not be used in advertising or publicity pertaining to distribution</span>\n<span class=\"c1\"># of the software without specific, written prior permission.</span>\n<span class=\"c1\"># VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING</span>\n<span class=\"c1\"># ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL</span>\n<span class=\"c1\"># VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR</span>\n<span class=\"c1\"># ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER</span>\n<span class=\"c1\"># IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT</span>\n<span class=\"c1\"># OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span>\n\n<span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">Logging package for Python. Based on PEP 282 and comments thereto in</span>\n<span class=\"sd\">comp.lang.python.</span>\n\n<span class=\"sd\">Copyright (C) 2001-2016 Vinay Sajip. All Rights Reserved.</span>\n\n<span class=\"sd\">To use, simply &#39;import logging&#39; and log away!</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">sys</span><span class=\"o\">,</span> <span class=\"nn\">os</span><span class=\"o\">,</span> <span class=\"nn\">time</span><span class=\"o\">,</span> <span class=\"nn\">io</span><span class=\"o\">,</span> <span class=\"nn\">traceback</span><span class=\"o\">,</span> <span class=\"nn\">warnings</span><span class=\"o\">,</span> <span class=\"nn\">weakref</span><span class=\"o\">,</span> <span class=\"nn\">collections</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">string</span> <span class=\"k\">import</span> <span class=\"n\">Template</span>\n\n<span class=\"n\">__all__</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;BASIC_FORMAT&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;BufferingFormatter&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;CRITICAL&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;DEBUG&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ERROR&#39;</span><span class=\"p\">,</span>\n           <span class=\"s1\">&#39;FATAL&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;FileHandler&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Filter&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Formatter&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Handler&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;INFO&#39;</span><span class=\"p\">,</span>\n           <span class=\"s1\">&#39;LogRecord&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Logger&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;LoggerAdapter&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;NOTSET&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;NullHandler&#39;</span><span class=\"p\">,</span>\n           <span class=\"s1\">&#39;StreamHandler&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;WARN&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;WARNING&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;addLevelName&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;basicConfig&#39;</span><span class=\"p\">,</span>\n           <span class=\"s1\">&#39;captureWarnings&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;critical&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;debug&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;disable&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;error&#39;</span><span class=\"p\">,</span>\n           <span class=\"s1\">&#39;exception&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;fatal&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;getLevelName&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;getLogger&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;getLoggerClass&#39;</span><span class=\"p\">,</span>\n           <span class=\"s1\">&#39;info&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;log&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;makeLogRecord&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;setLoggerClass&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;shutdown&#39;</span><span class=\"p\">,</span>\n           <span class=\"s1\">&#39;warn&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;warning&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;getLogRecordFactory&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;setLogRecordFactory&#39;</span><span class=\"p\">,</span>\n           <span class=\"s1\">&#39;lastResort&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;raiseExceptions&#39;</span><span class=\"p\">]</span>\n\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"kn\">import</span> <span class=\"nn\">threading</span>\n<span class=\"k\">except</span> <span class=\"ne\">ImportError</span><span class=\"p\">:</span> <span class=\"c1\">#pragma: no cover</span>\n    <span class=\"n\">threading</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n<span class=\"n\">__author__</span>  <span class=\"o\">=</span> <span class=\"s2\">&quot;Vinay Sajip &lt;vinay_sajip@red-dove.com&gt;&quot;</span>\n<span class=\"n\">__status__</span>  <span class=\"o\">=</span> <span class=\"s2\">&quot;production&quot;</span>\n<span class=\"c1\"># The following module attributes are no longer updated.</span>\n<span class=\"n\">__version__</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;0.5.1.2&quot;</span>\n<span class=\"n\">__date__</span>    <span class=\"o\">=</span> <span class=\"s2\">&quot;07 February 2010&quot;</span>\n\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\">#   Miscellaneous module data</span>\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n\n<span class=\"c1\">#</span>\n<span class=\"c1\">#_startTime is used as the base when calculating the relative time of events</span>\n<span class=\"c1\">#</span>\n<span class=\"n\">_startTime</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span>\n\n<span class=\"c1\">#</span>\n<span class=\"c1\">#raiseExceptions is used to see if exceptions during handling should be</span>\n<span class=\"c1\">#propagated</span>\n<span class=\"c1\">#</span>\n<span class=\"n\">raiseExceptions</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n<span class=\"c1\">#</span>\n<span class=\"c1\"># If you don&#39;t want threading information in the log, set this to zero</span>\n<span class=\"c1\">#</span>\n<span class=\"n\">logThreads</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n<span class=\"c1\">#</span>\n<span class=\"c1\"># If you don&#39;t want multiprocessing information in the log, set this to zero</span>\n<span class=\"c1\">#</span>\n<span class=\"n\">logMultiprocessing</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n<span class=\"c1\">#</span>\n<span class=\"c1\"># If you don&#39;t want process information in the log, set this to zero</span>\n<span class=\"c1\">#</span>\n<span class=\"n\">logProcesses</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\">#   Level related stuff</span>\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\">#</span>\n<span class=\"c1\"># Default levels and level names, these can be replaced with any positive set</span>\n<span class=\"c1\"># of values having corresponding names. There is a pseudo-level, NOTSET, which</span>\n<span class=\"c1\"># is only really there as a lower limit for user-defined levels. Handlers and</span>\n<span class=\"c1\"># loggers are initialized with NOTSET so that they will log all messages, even</span>\n<span class=\"c1\"># at user-defined levels.</span>\n<span class=\"c1\">#</span>\n\n<span class=\"n\">CRITICAL</span> <span class=\"o\">=</span> <span class=\"mi\">50</span>\n<span class=\"n\">FATAL</span> <span class=\"o\">=</span> <span class=\"n\">CRITICAL</span>\n<span class=\"n\">ERROR</span> <span class=\"o\">=</span> <span class=\"mi\">40</span>\n<span class=\"n\">WARNING</span> <span class=\"o\">=</span> <span class=\"mi\">30</span>\n<span class=\"n\">WARN</span> <span class=\"o\">=</span> <span class=\"n\">WARNING</span>\n<span class=\"n\">INFO</span> <span class=\"o\">=</span> <span class=\"mi\">20</span>\n<span class=\"n\">DEBUG</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n<span class=\"n\">NOTSET</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n\n<span class=\"n\">_levelToName</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"n\">CRITICAL</span><span class=\"p\">:</span> <span class=\"s1\">&#39;CRITICAL&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">ERROR</span><span class=\"p\">:</span> <span class=\"s1\">&#39;ERROR&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">WARNING</span><span class=\"p\">:</span> <span class=\"s1\">&#39;WARNING&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">INFO</span><span class=\"p\">:</span> <span class=\"s1\">&#39;INFO&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">DEBUG</span><span class=\"p\">:</span> <span class=\"s1\">&#39;DEBUG&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">NOTSET</span><span class=\"p\">:</span> <span class=\"s1\">&#39;NOTSET&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n<span class=\"n\">_nameToLevel</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;CRITICAL&#39;</span><span class=\"p\">:</span> <span class=\"n\">CRITICAL</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;FATAL&#39;</span><span class=\"p\">:</span> <span class=\"n\">FATAL</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;ERROR&#39;</span><span class=\"p\">:</span> <span class=\"n\">ERROR</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;WARN&#39;</span><span class=\"p\">:</span> <span class=\"n\">WARNING</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;WARNING&#39;</span><span class=\"p\">:</span> <span class=\"n\">WARNING</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;INFO&#39;</span><span class=\"p\">:</span> <span class=\"n\">INFO</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;DEBUG&#39;</span><span class=\"p\">:</span> <span class=\"n\">DEBUG</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;NOTSET&#39;</span><span class=\"p\">:</span> <span class=\"n\">NOTSET</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">getLevelName</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Return the textual representation of logging level &#39;level&#39;.</span>\n\n<span class=\"sd\">    If the level is one of the predefined levels (CRITICAL, ERROR, WARNING,</span>\n<span class=\"sd\">    INFO, DEBUG) then you get the corresponding string. If you have</span>\n<span class=\"sd\">    associated levels with names using addLevelName then the name you have</span>\n<span class=\"sd\">    associated with &#39;level&#39; is returned.</span>\n\n<span class=\"sd\">    If a numeric value corresponding to one of the defined levels is passed</span>\n<span class=\"sd\">    in, the corresponding string representation is returned.</span>\n\n<span class=\"sd\">    Otherwise, the string &quot;Level %s&quot; % level is returned.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># See Issues #22386, #27937 and #29220 for why it&#39;s this way</span>\n    <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"n\">_levelToName</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">result</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">result</span>\n    <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"n\">_nameToLevel</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">result</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">result</span>\n    <span class=\"k\">return</span> <span class=\"s2\">&quot;Level </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">level</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">addLevelName</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">levelName</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Associate &#39;levelName&#39; with &#39;level&#39;.</span>\n\n<span class=\"sd\">    This is used when converting levels to text during message formatting.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">_acquireLock</span><span class=\"p\">()</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>    <span class=\"c1\">#unlikely to cause an exception, but you never know...</span>\n        <span class=\"n\">_levelToName</span><span class=\"p\">[</span><span class=\"n\">level</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">levelName</span>\n        <span class=\"n\">_nameToLevel</span><span class=\"p\">[</span><span class=\"n\">levelName</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">level</span>\n    <span class=\"k\">finally</span><span class=\"p\">:</span>\n        <span class=\"n\">_releaseLock</span><span class=\"p\">()</span>\n\n<span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">sys</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_getframe&#39;</span><span class=\"p\">):</span>\n    <span class=\"n\">currentframe</span> <span class=\"o\">=</span> <span class=\"k\">lambda</span><span class=\"p\">:</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">_getframe</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span> <span class=\"c1\">#pragma: no cover</span>\n    <span class=\"k\">def</span> <span class=\"nf\">currentframe</span><span class=\"p\">():</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return the frame object for the caller&#39;s stack frame.&quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">Exception</span>\n        <span class=\"k\">except</span> <span class=\"ne\">Exception</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">exc_info</span><span class=\"p\">()[</span><span class=\"mi\">2</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">tb_frame</span><span class=\"o\">.</span><span class=\"n\">f_back</span>\n\n<span class=\"c1\">#</span>\n<span class=\"c1\"># _srcfile is used when walking the stack to check when we&#39;ve got the first</span>\n<span class=\"c1\"># caller stack frame, by skipping frames whose filename is that of this</span>\n<span class=\"c1\"># module&#39;s source. It therefore should contain the filename of this module&#39;s</span>\n<span class=\"c1\"># source file.</span>\n<span class=\"c1\">#</span>\n<span class=\"c1\"># Ordinarily we would use __file__ for this, but frozen modules don&#39;t always</span>\n<span class=\"c1\"># have __file__ set, for some reason (see Issue #21736). Thus, we get the</span>\n<span class=\"c1\"># filename from a handy code object from a function defined in this module.</span>\n<span class=\"c1\"># (There&#39;s no particular reason for picking addLevelName.)</span>\n<span class=\"c1\">#</span>\n\n<span class=\"n\">_srcfile</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">normcase</span><span class=\"p\">(</span><span class=\"n\">addLevelName</span><span class=\"o\">.</span><span class=\"vm\">__code__</span><span class=\"o\">.</span><span class=\"n\">co_filename</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># _srcfile is only used in conjunction with sys._getframe().</span>\n<span class=\"c1\"># To provide compatibility with older versions of Python, set _srcfile</span>\n<span class=\"c1\"># to None if _getframe() is not available; this value will prevent</span>\n<span class=\"c1\"># findCaller() from being called. You can also do this if you want to avoid</span>\n<span class=\"c1\"># the overhead of fetching caller information, even when _getframe() is</span>\n<span class=\"c1\"># available.</span>\n<span class=\"c1\">#if not hasattr(sys, &#39;_getframe&#39;):</span>\n<span class=\"c1\">#    _srcfile = None</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_checkLevel</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"nb\">int</span><span class=\"p\">):</span>\n        <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"n\">level</span>\n    <span class=\"k\">elif</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">level</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">level</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">_nameToLevel</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Unknown level: </span><span class=\"si\">%r</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">level</span><span class=\"p\">)</span>\n        <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"n\">_nameToLevel</span><span class=\"p\">[</span><span class=\"n\">level</span><span class=\"p\">]</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Level not an integer or a valid string: </span><span class=\"si\">%r</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">level</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">rv</span>\n\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\">#   Thread-related stuff</span>\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n\n<span class=\"c1\">#</span>\n<span class=\"c1\">#_lock is used to serialize access to shared data structures in this module.</span>\n<span class=\"c1\">#This needs to be an RLock because fileConfig() creates and configures</span>\n<span class=\"c1\">#Handlers, and so might arbitrary user threads. Since Handler code updates the</span>\n<span class=\"c1\">#shared dictionary _handlers, it needs to acquire the lock. But if configuring,</span>\n<span class=\"c1\">#the lock would already have been acquired - so we need an RLock.</span>\n<span class=\"c1\">#The same argument applies to Loggers and Manager.loggerDict.</span>\n<span class=\"c1\">#</span>\n<span class=\"k\">if</span> <span class=\"n\">threading</span><span class=\"p\">:</span>\n    <span class=\"n\">_lock</span> <span class=\"o\">=</span> <span class=\"n\">threading</span><span class=\"o\">.</span><span class=\"n\">RLock</span><span class=\"p\">()</span>\n<span class=\"k\">else</span><span class=\"p\">:</span> <span class=\"c1\">#pragma: no cover</span>\n    <span class=\"n\">_lock</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_acquireLock</span><span class=\"p\">():</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Acquire the module-level lock for serializing access to shared data.</span>\n\n<span class=\"sd\">    This should be released with _releaseLock().</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">_lock</span><span class=\"p\">:</span>\n        <span class=\"n\">_lock</span><span class=\"o\">.</span><span class=\"n\">acquire</span><span class=\"p\">()</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">_releaseLock</span><span class=\"p\">():</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Release the module-level lock acquired by calling _acquireLock().</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">_lock</span><span class=\"p\">:</span>\n        <span class=\"n\">_lock</span><span class=\"o\">.</span><span class=\"n\">release</span><span class=\"p\">()</span>\n\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\">#   The logging record</span>\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">LogRecord</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A LogRecord instance represents an event being logged.</span>\n\n<span class=\"sd\">    LogRecord instances are created every time something is logged. They</span>\n<span class=\"sd\">    contain all the information pertinent to the event being logged. The</span>\n<span class=\"sd\">    main information passed in is in msg and args, which are combined</span>\n<span class=\"sd\">    using str(msg) % args to create the message field of the record. The</span>\n<span class=\"sd\">    record also includes information such as when the record was created,</span>\n<span class=\"sd\">    the source line where the logging call was made, and any exception</span>\n<span class=\"sd\">    information to be logged.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">pathname</span><span class=\"p\">,</span> <span class=\"n\">lineno</span><span class=\"p\">,</span>\n                 <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"p\">,</span> <span class=\"n\">func</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">sinfo</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initialize a logging record with interesting information.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">ct</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">time</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">msg</span> <span class=\"o\">=</span> <span class=\"n\">msg</span>\n        <span class=\"c1\">#</span>\n        <span class=\"c1\"># The following statement allows passing of a dictionary as a sole</span>\n        <span class=\"c1\"># argument, so that you can do something like</span>\n        <span class=\"c1\">#  logging.debug(&quot;a %(a)d b %(b)s&quot;, {&#39;a&#39;:1, &#39;b&#39;:2})</span>\n        <span class=\"c1\"># Suggested by Stefan Behnel.</span>\n        <span class=\"c1\"># Note that without the test for args[0], we get a problem because</span>\n        <span class=\"c1\"># during formatting, we test to see if the arg is present using</span>\n        <span class=\"c1\"># &#39;if self.args:&#39;. If the event being logged is e.g. &#39;Value is %d&#39;</span>\n        <span class=\"c1\"># and if the passed arg fails &#39;if self.args:&#39; then no formatting</span>\n        <span class=\"c1\"># is done. For example, logger.warning(&#39;Value is %d&#39;, 0) would log</span>\n        <span class=\"c1\"># &#39;Value is %d&#39; instead of &#39;Value is 0&#39;.</span>\n        <span class=\"c1\"># For the use case of passing a dictionary, this should not be a</span>\n        <span class=\"c1\"># problem.</span>\n        <span class=\"c1\"># Issue #21172: a request was made to relax the isinstance check</span>\n        <span class=\"c1\"># to hasattr(args[0], &#39;__getitem__&#39;). However, the docs on string</span>\n        <span class=\"c1\"># formatting still seem to suggest a mapping object is required.</span>\n        <span class=\"c1\"># Thus, while not removing the isinstance check, it does now look</span>\n        <span class=\"c1\"># for collections.Mapping rather than, as before, dict.</span>\n        <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">args</span> <span class=\"ow\">and</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">1</span> <span class=\"ow\">and</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">collections</span><span class=\"o\">.</span><span class=\"n\">Mapping</span><span class=\"p\">)</span>\n            <span class=\"ow\">and</span> <span class=\"n\">args</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]):</span>\n            <span class=\"n\">args</span> <span class=\"o\">=</span> <span class=\"n\">args</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">args</span> <span class=\"o\">=</span> <span class=\"n\">args</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">levelname</span> <span class=\"o\">=</span> <span class=\"n\">getLevelName</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">levelno</span> <span class=\"o\">=</span> <span class=\"n\">level</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pathname</span> <span class=\"o\">=</span> <span class=\"n\">pathname</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">basename</span><span class=\"p\">(</span><span class=\"n\">pathname</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">module</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">splitext</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filename</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"k\">except</span> <span class=\"p\">(</span><span class=\"ne\">TypeError</span><span class=\"p\">,</span> <span class=\"ne\">ValueError</span><span class=\"p\">,</span> <span class=\"ne\">AttributeError</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"n\">pathname</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">module</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Unknown module&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">exc_info</span> <span class=\"o\">=</span> <span class=\"n\">exc_info</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">exc_text</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>      <span class=\"c1\"># used to cache the traceback text</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stack_info</span> <span class=\"o\">=</span> <span class=\"n\">sinfo</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lineno</span> <span class=\"o\">=</span> <span class=\"n\">lineno</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">funcName</span> <span class=\"o\">=</span> <span class=\"n\">func</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">created</span> <span class=\"o\">=</span> <span class=\"n\">ct</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">msecs</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">ct</span> <span class=\"o\">-</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">ct</span><span class=\"p\">))</span> <span class=\"o\">*</span> <span class=\"mi\">1000</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">relativeCreated</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">created</span> <span class=\"o\">-</span> <span class=\"n\">_startTime</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mi\">1000</span>\n        <span class=\"k\">if</span> <span class=\"n\">logThreads</span> <span class=\"ow\">and</span> <span class=\"n\">threading</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">thread</span> <span class=\"o\">=</span> <span class=\"n\">threading</span><span class=\"o\">.</span><span class=\"n\">get_ident</span><span class=\"p\">()</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">threadName</span> <span class=\"o\">=</span> <span class=\"n\">threading</span><span class=\"o\">.</span><span class=\"n\">current_thread</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">name</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span> <span class=\"c1\"># pragma: no cover</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">thread</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">threadName</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">logMultiprocessing</span><span class=\"p\">:</span> <span class=\"c1\"># pragma: no cover</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">processName</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">processName</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;MainProcess&#39;</span>\n            <span class=\"n\">mp</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">modules</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;multiprocessing&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">mp</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Errors may occur if multiprocessing has not finished loading</span>\n                <span class=\"c1\"># yet - e.g. if a custom import hook causes third-party code</span>\n                <span class=\"c1\"># to run when multiprocessing calls import. See issue 8200</span>\n                <span class=\"c1\"># for an example</span>\n                <span class=\"k\">try</span><span class=\"p\">:</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">processName</span> <span class=\"o\">=</span> <span class=\"n\">mp</span><span class=\"o\">.</span><span class=\"n\">current_process</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">name</span>\n                <span class=\"k\">except</span> <span class=\"ne\">Exception</span><span class=\"p\">:</span> <span class=\"c1\">#pragma: no cover</span>\n                    <span class=\"k\">pass</span>\n        <span class=\"k\">if</span> <span class=\"n\">logProcesses</span> <span class=\"ow\">and</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"p\">,</span> <span class=\"s1\">&#39;getpid&#39;</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">process</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">getpid</span><span class=\"p\">()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">process</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&lt;LogRecord: </span><span class=\"si\">%s</span><span class=\"s1\">, </span><span class=\"si\">%s</span><span class=\"s1\">, </span><span class=\"si\">%s</span><span class=\"s1\">, </span><span class=\"si\">%s</span><span class=\"s1\">, &quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot;&gt;&#39;</span><span class=\"o\">%</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">levelno</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pathname</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lineno</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">msg</span><span class=\"p\">)</span>\n\n    <span class=\"fm\">__repr__</span> <span class=\"o\">=</span> <span class=\"fm\">__str__</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">getMessage</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return the message for this LogRecord.</span>\n\n<span class=\"sd\">        Return the message for this LogRecord after merging any user-supplied</span>\n<span class=\"sd\">        arguments with the message.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">msg</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">msg</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">args</span><span class=\"p\">:</span>\n            <span class=\"n\">msg</span> <span class=\"o\">=</span> <span class=\"n\">msg</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">args</span>\n        <span class=\"k\">return</span> <span class=\"n\">msg</span>\n\n<span class=\"c1\">#</span>\n<span class=\"c1\">#   Determine which class to use when instantiating log records.</span>\n<span class=\"c1\">#</span>\n<span class=\"n\">_logRecordFactory</span> <span class=\"o\">=</span> <span class=\"n\">LogRecord</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">setLogRecordFactory</span><span class=\"p\">(</span><span class=\"n\">factory</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Set the factory to be used when instantiating a log record.</span>\n\n<span class=\"sd\">    :param factory: A callable which will be called to instantiate</span>\n<span class=\"sd\">    a log record.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">global</span> <span class=\"n\">_logRecordFactory</span>\n    <span class=\"n\">_logRecordFactory</span> <span class=\"o\">=</span> <span class=\"n\">factory</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">getLogRecordFactory</span><span class=\"p\">():</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Return the factory to be used when instantiating a log record.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">_logRecordFactory</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">makeLogRecord</span><span class=\"p\">(</span><span class=\"nb\">dict</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Make a LogRecord whose attributes are defined by the specified dictionary,</span>\n<span class=\"sd\">    This function is useful for converting a logging event received over</span>\n<span class=\"sd\">    a socket connection (which is sent as a dictionary) into a LogRecord</span>\n<span class=\"sd\">    instance.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"n\">_logRecordFactory</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"p\">(),</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">rv</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"nb\">dict</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">rv</span>\n\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\">#   Formatter classes and functions</span>\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">PercentStyle</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n\n    <span class=\"n\">default_format</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%(message)s</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">asctime_format</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%(asctime)s</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">asctime_search</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;%(asctime)&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">fmt</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_fmt</span> <span class=\"o\">=</span> <span class=\"n\">fmt</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">default_format</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">usesTime</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_fmt</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">asctime_search</span><span class=\"p\">)</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">format</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_fmt</span> <span class=\"o\">%</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">StrFormatStyle</span><span class=\"p\">(</span><span class=\"n\">PercentStyle</span><span class=\"p\">):</span>\n    <span class=\"n\">default_format</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{message}</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">asctime_format</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{asctime}</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">asctime_search</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;{asctime&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">format</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_fmt</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">record</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">StringTemplateStyle</span><span class=\"p\">(</span><span class=\"n\">PercentStyle</span><span class=\"p\">):</span>\n    <span class=\"n\">default_format</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;$</span><span class=\"si\">{message}</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">asctime_format</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;$</span><span class=\"si\">{asctime}</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">asctime_search</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;$</span><span class=\"si\">{asctime}</span><span class=\"s1\">&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">fmt</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_fmt</span> <span class=\"o\">=</span> <span class=\"n\">fmt</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">default_format</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_tpl</span> <span class=\"o\">=</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_fmt</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">usesTime</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">fmt</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_fmt</span>\n        <span class=\"k\">return</span> <span class=\"n\">fmt</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"s1\">&#39;$asctime&#39;</span><span class=\"p\">)</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span> <span class=\"ow\">or</span> <span class=\"n\">fmt</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">asctime_format</span><span class=\"p\">)</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">format</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_tpl</span><span class=\"o\">.</span><span class=\"n\">substitute</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">record</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">)</span>\n\n<span class=\"n\">BASIC_FORMAT</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"si\">%(levelname)s</span><span class=\"s2\">:</span><span class=\"si\">%(name)s</span><span class=\"s2\">:</span><span class=\"si\">%(message)s</span><span class=\"s2\">&quot;</span>\n\n<span class=\"n\">_STYLES</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;%&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"n\">PercentStyle</span><span class=\"p\">,</span> <span class=\"n\">BASIC_FORMAT</span><span class=\"p\">),</span>\n    <span class=\"s1\">&#39;{&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"n\">StrFormatStyle</span><span class=\"p\">,</span> <span class=\"s1\">&#39;</span><span class=\"si\">{levelname}</span><span class=\"s1\">:</span><span class=\"si\">{name}</span><span class=\"s1\">:</span><span class=\"si\">{message}</span><span class=\"s1\">&#39;</span><span class=\"p\">),</span>\n    <span class=\"s1\">&#39;$&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"n\">StringTemplateStyle</span><span class=\"p\">,</span> <span class=\"s1\">&#39;$</span><span class=\"si\">{levelname}</span><span class=\"s1\">:$</span><span class=\"si\">{name}</span><span class=\"s1\">:$</span><span class=\"si\">{message}</span><span class=\"s1\">&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Formatter</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Formatter instances are used to convert a LogRecord to text.</span>\n\n<span class=\"sd\">    Formatters need to know how a LogRecord is constructed. They are</span>\n<span class=\"sd\">    responsible for converting a LogRecord to (usually) a string which can</span>\n<span class=\"sd\">    be interpreted by either a human or an external system. The base Formatter</span>\n<span class=\"sd\">    allows a formatting string to be specified. If none is supplied, the</span>\n<span class=\"sd\">    the style-dependent default value, &quot;%(message)s&quot;, &quot;{message}&quot;, or</span>\n<span class=\"sd\">    &quot;${message}&quot;, is used.</span>\n\n<span class=\"sd\">    The Formatter can be initialized with a format string which makes use of</span>\n<span class=\"sd\">    knowledge of the LogRecord attributes - e.g. the default value mentioned</span>\n<span class=\"sd\">    above makes use of the fact that the user&#39;s message and arguments are pre-</span>\n<span class=\"sd\">    formatted into a LogRecord&#39;s message attribute. Currently, the useful</span>\n<span class=\"sd\">    attributes in a LogRecord are described by:</span>\n\n<span class=\"sd\">    %(name)s            Name of the logger (logging channel)</span>\n<span class=\"sd\">    %(levelno)s         Numeric logging level for the message (DEBUG, INFO,</span>\n<span class=\"sd\">                        WARNING, ERROR, CRITICAL)</span>\n<span class=\"sd\">    %(levelname)s       Text logging level for the message (&quot;DEBUG&quot;, &quot;INFO&quot;,</span>\n<span class=\"sd\">                        &quot;WARNING&quot;, &quot;ERROR&quot;, &quot;CRITICAL&quot;)</span>\n<span class=\"sd\">    %(pathname)s        Full pathname of the source file where the logging</span>\n<span class=\"sd\">                        call was issued (if available)</span>\n<span class=\"sd\">    %(filename)s        Filename portion of pathname</span>\n<span class=\"sd\">    %(module)s          Module (name portion of filename)</span>\n<span class=\"sd\">    %(lineno)d          Source line number where the logging call was issued</span>\n<span class=\"sd\">                        (if available)</span>\n<span class=\"sd\">    %(funcName)s        Function name</span>\n<span class=\"sd\">    %(created)f         Time when the LogRecord was created (time.time()</span>\n<span class=\"sd\">                        return value)</span>\n<span class=\"sd\">    %(asctime)s         Textual time when the LogRecord was created</span>\n<span class=\"sd\">    %(msecs)d           Millisecond portion of the creation time</span>\n<span class=\"sd\">    %(relativeCreated)d Time in milliseconds when the LogRecord was created,</span>\n<span class=\"sd\">                        relative to the time the logging module was loaded</span>\n<span class=\"sd\">                        (typically at application startup time)</span>\n<span class=\"sd\">    %(thread)d          Thread ID (if available)</span>\n<span class=\"sd\">    %(threadName)s      Thread name (if available)</span>\n<span class=\"sd\">    %(process)d         Process ID (if available)</span>\n<span class=\"sd\">    %(message)s         The result of record.getMessage(), computed just as</span>\n<span class=\"sd\">                        the record is emitted</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">converter</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">localtime</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">fmt</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">datefmt</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">style</span><span class=\"o\">=</span><span class=\"s1\">&#39;%&#39;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initialize the formatter with specified format strings.</span>\n\n<span class=\"sd\">        Initialize the formatter either with the specified format string, or a</span>\n<span class=\"sd\">        default as described above. Allow for specialized date formatting with</span>\n<span class=\"sd\">        the optional datefmt argument. If datefmt is omitted, you get an</span>\n<span class=\"sd\">        ISO8601-like (or RFC 3339-like) format.</span>\n\n<span class=\"sd\">        Use a style parameter of &#39;%&#39;, &#39;{&#39; or &#39;$&#39; to specify that you want to</span>\n<span class=\"sd\">        use one of %-formatting, :meth:`str.format` (``{}``) formatting or</span>\n<span class=\"sd\">        :class:`string.Template` formatting in your format string.</span>\n\n<span class=\"sd\">        .. versionchanged:: 3.2</span>\n<span class=\"sd\">           Added the ``style`` parameter.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">style</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">_STYLES</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s1\">&#39;Style must be one of: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"s1\">&#39;,&#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span>\n                             <span class=\"n\">_STYLES</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">()))</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_style</span> <span class=\"o\">=</span> <span class=\"n\">_STYLES</span><span class=\"p\">[</span><span class=\"n\">style</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">](</span><span class=\"n\">fmt</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_fmt</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_style</span><span class=\"o\">.</span><span class=\"n\">_fmt</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">datefmt</span> <span class=\"o\">=</span> <span class=\"n\">datefmt</span>\n\n    <span class=\"n\">default_time_format</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\"> %H:%M:%S&#39;</span>\n    <span class=\"n\">default_msec_format</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">,</span><span class=\"si\">%03d</span><span class=\"s1\">&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">formatTime</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">,</span> <span class=\"n\">datefmt</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return the creation time of the specified LogRecord as formatted text.</span>\n\n<span class=\"sd\">        This method should be called from format() by a formatter which</span>\n<span class=\"sd\">        wants to make use of a formatted time. This method can be overridden</span>\n<span class=\"sd\">        in formatters to provide for any specific requirement, but the</span>\n<span class=\"sd\">        basic behaviour is as follows: if datefmt (a string) is specified,</span>\n<span class=\"sd\">        it is used with time.strftime() to format the creation time of the</span>\n<span class=\"sd\">        record. Otherwise, an ISO8601-like (or RFC 3339-like) format is used.</span>\n<span class=\"sd\">        The resulting string is returned. This function uses a user-configurable</span>\n<span class=\"sd\">        function to convert the creation time to a tuple. By default,</span>\n<span class=\"sd\">        time.localtime() is used; to change this for a particular formatter</span>\n<span class=\"sd\">        instance, set the &#39;converter&#39; attribute to a function with the same</span>\n<span class=\"sd\">        signature as time.localtime() or time.gmtime(). To change it for all</span>\n<span class=\"sd\">        formatters, for example if you want all logging times to be shown in GMT,</span>\n<span class=\"sd\">        set the &#39;converter&#39; attribute in the Formatter class.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">ct</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">converter</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">created</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">datefmt</span><span class=\"p\">:</span>\n            <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"n\">datefmt</span><span class=\"p\">,</span> <span class=\"n\">ct</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">t</span> <span class=\"o\">=</span> <span class=\"n\">time</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">default_time_format</span><span class=\"p\">,</span> <span class=\"n\">ct</span><span class=\"p\">)</span>\n            <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">default_msec_format</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">t</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">msecs</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">s</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">formatException</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">ei</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Format and return the specified exception information as a string.</span>\n\n<span class=\"sd\">        This default implementation just uses</span>\n<span class=\"sd\">        traceback.print_exception()</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">sio</span> <span class=\"o\">=</span> <span class=\"n\">io</span><span class=\"o\">.</span><span class=\"n\">StringIO</span><span class=\"p\">()</span>\n        <span class=\"n\">tb</span> <span class=\"o\">=</span> <span class=\"n\">ei</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n        <span class=\"c1\"># See issues #9427, #1553375. Commented out for now.</span>\n        <span class=\"c1\">#if getattr(self, &#39;fullstack&#39;, False):</span>\n        <span class=\"c1\">#    traceback.print_stack(tb.tb_frame.f_back, file=sio)</span>\n        <span class=\"n\">traceback</span><span class=\"o\">.</span><span class=\"n\">print_exception</span><span class=\"p\">(</span><span class=\"n\">ei</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">ei</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">tb</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">sio</span><span class=\"p\">)</span>\n        <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">sio</span><span class=\"o\">.</span><span class=\"n\">getvalue</span><span class=\"p\">()</span>\n        <span class=\"n\">sio</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">s</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">:]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">s</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">usesTime</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if the format uses the creation time of the record.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_style</span><span class=\"o\">.</span><span class=\"n\">usesTime</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">formatMessage</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_style</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">formatStack</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">stack_info</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        This method is provided as an extension point for specialized</span>\n<span class=\"sd\">        formatting of stack information.</span>\n\n<span class=\"sd\">        The input data is a string as returned from a call to</span>\n<span class=\"sd\">        :func:`traceback.print_stack`, but with the last trailing newline</span>\n<span class=\"sd\">        removed.</span>\n\n<span class=\"sd\">        The base implementation just returns the value passed in.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">stack_info</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">format</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Format the specified record as text.</span>\n\n<span class=\"sd\">        The record&#39;s attribute dictionary is used as the operand to a</span>\n<span class=\"sd\">        string formatting operation which yields the returned string.</span>\n<span class=\"sd\">        Before formatting the dictionary, a couple of preparatory steps</span>\n<span class=\"sd\">        are carried out. The message attribute of the record is computed</span>\n<span class=\"sd\">        using LogRecord.getMessage(). If the formatting string uses the</span>\n<span class=\"sd\">        time (as determined by a call to usesTime(), formatTime() is</span>\n<span class=\"sd\">        called to format the event time. If there is exception information,</span>\n<span class=\"sd\">        it is formatted using formatException() and appended to the message.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">getMessage</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">usesTime</span><span class=\"p\">():</span>\n            <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">asctime</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">formatTime</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">datefmt</span><span class=\"p\">)</span>\n        <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">formatMessage</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">exc_info</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Cache the traceback text to avoid converting it multiple times</span>\n            <span class=\"c1\"># (it&#39;s constant anyway)</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">exc_text</span><span class=\"p\">:</span>\n                <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">exc_text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">formatException</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">exc_info</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">exc_text</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">s</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">:]</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">:</span>\n                <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span>\n            <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span> <span class=\"o\">+</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">exc_text</span>\n        <span class=\"k\">if</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">stack_info</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">s</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">:]</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">:</span>\n                <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span>\n            <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">formatStack</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">stack_info</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">s</span>\n\n<span class=\"c1\">#</span>\n<span class=\"c1\">#   The default formatter to use when no other is specified</span>\n<span class=\"c1\">#</span>\n<span class=\"n\">_defaultFormatter</span> <span class=\"o\">=</span> <span class=\"n\">Formatter</span><span class=\"p\">()</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">BufferingFormatter</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A formatter suitable for formatting a number of records.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">linefmt</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Optionally specify a formatter which will be used to format each</span>\n<span class=\"sd\">        individual record.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">linefmt</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linefmt</span> <span class=\"o\">=</span> <span class=\"n\">linefmt</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linefmt</span> <span class=\"o\">=</span> <span class=\"n\">_defaultFormatter</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">formatHeader</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">records</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return the header string for the specified records.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">formatFooter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">records</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return the footer string for the specified records.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">format</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">records</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Format the specified records and return the result as a string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">records</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"n\">rv</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">formatHeader</span><span class=\"p\">(</span><span class=\"n\">records</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">record</span> <span class=\"ow\">in</span> <span class=\"n\">records</span><span class=\"p\">:</span>\n                <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"n\">rv</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">linefmt</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n            <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"n\">rv</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">formatFooter</span><span class=\"p\">(</span><span class=\"n\">records</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">rv</span>\n\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\">#   Filter classes and functions</span>\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Filter</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Filter instances are used to perform arbitrary filtering of LogRecords.</span>\n\n<span class=\"sd\">    Loggers and Handlers can optionally use Filter instances to filter</span>\n<span class=\"sd\">    records as desired. The base filter class only allows events which are</span>\n<span class=\"sd\">    below a certain point in the logger hierarchy. For example, a filter</span>\n<span class=\"sd\">    initialized with &quot;A.B&quot; will allow events logged by loggers &quot;A.B&quot;,</span>\n<span class=\"sd\">    &quot;A.B.C&quot;, &quot;A.B.C.D&quot;, &quot;A.B.D&quot; etc. but not &quot;A.BB&quot;, &quot;B.A.B&quot; etc. If</span>\n<span class=\"sd\">    initialized with the empty string, all events are passed.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initialize a filter.</span>\n\n<span class=\"sd\">        Initialize with the name of the logger which, together with its</span>\n<span class=\"sd\">        children, will have its events allowed through the filter. If no</span>\n<span class=\"sd\">        name is specified, allow every event.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nlen</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">filter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Determine if the specified record is to be logged.</span>\n\n<span class=\"sd\">        Is the specified record to be logged? Returns 0 for no, nonzero for</span>\n<span class=\"sd\">        yes. If deemed appropriate, the record may be modified in-place.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nlen</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">True</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">True</span>\n        <span class=\"k\">elif</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nlen</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nlen</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;.&quot;</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Filterer</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A base class for loggers and handlers which allows them to share</span>\n<span class=\"sd\">    common code.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initialize the list of filters to be an empty list.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filters</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">addFilter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Add the specified filter to this handler.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"p\">(</span><span class=\"nb\">filter</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filters</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filters</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"nb\">filter</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">removeFilter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Remove the specified filter from this handler.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"nb\">filter</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filters</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filters</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"nb\">filter</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">filter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Determine if a record is loggable by consulting all the filters.</span>\n\n<span class=\"sd\">        The default is to allow the record to be logged; any filter can veto</span>\n<span class=\"sd\">        this and the record is then dropped. Returns a zero value if a record</span>\n<span class=\"sd\">        is to be dropped, else non-zero.</span>\n\n<span class=\"sd\">        .. versionchanged:: 3.2</span>\n\n<span class=\"sd\">           Allow filters to be just callables.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filters</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"s1\">&#39;filter&#39;</span><span class=\"p\">):</span>\n                <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span> <span class=\"c1\"># assume callable - will raise if not</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">result</span><span class=\"p\">:</span>\n                <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n                <span class=\"k\">break</span>\n        <span class=\"k\">return</span> <span class=\"n\">rv</span>\n\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\">#   Handler classes and functions</span>\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n\n<span class=\"n\">_handlers</span> <span class=\"o\">=</span> <span class=\"n\">weakref</span><span class=\"o\">.</span><span class=\"n\">WeakValueDictionary</span><span class=\"p\">()</span>  <span class=\"c1\">#map of handler names to handlers</span>\n<span class=\"n\">_handlerList</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\"># added to allow handlers to be removed in reverse of order initialized</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">_removeHandlerRef</span><span class=\"p\">(</span><span class=\"n\">wr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Remove a handler reference from the internal cleanup list.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># This function can be called during module teardown, when globals are</span>\n    <span class=\"c1\"># set to None. It can also be called from another thread. So we need to</span>\n    <span class=\"c1\"># pre-emptively grab the necessary globals and check if they&#39;re None,</span>\n    <span class=\"c1\"># to prevent race conditions and failures during interpreter shutdown.</span>\n    <span class=\"n\">acquire</span><span class=\"p\">,</span> <span class=\"n\">release</span><span class=\"p\">,</span> <span class=\"n\">handlers</span> <span class=\"o\">=</span> <span class=\"n\">_acquireLock</span><span class=\"p\">,</span> <span class=\"n\">_releaseLock</span><span class=\"p\">,</span> <span class=\"n\">_handlerList</span>\n    <span class=\"k\">if</span> <span class=\"n\">acquire</span> <span class=\"ow\">and</span> <span class=\"n\">release</span> <span class=\"ow\">and</span> <span class=\"n\">handlers</span><span class=\"p\">:</span>\n        <span class=\"n\">acquire</span><span class=\"p\">()</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">wr</span> <span class=\"ow\">in</span> <span class=\"n\">handlers</span><span class=\"p\">:</span>\n                <span class=\"n\">handlers</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">wr</span><span class=\"p\">)</span>\n        <span class=\"k\">finally</span><span class=\"p\">:</span>\n            <span class=\"n\">release</span><span class=\"p\">()</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">_addHandlerRef</span><span class=\"p\">(</span><span class=\"n\">handler</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Add a handler to the internal cleanup list using a weak reference.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">_acquireLock</span><span class=\"p\">()</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">_handlerList</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">weakref</span><span class=\"o\">.</span><span class=\"n\">ref</span><span class=\"p\">(</span><span class=\"n\">handler</span><span class=\"p\">,</span> <span class=\"n\">_removeHandlerRef</span><span class=\"p\">))</span>\n    <span class=\"k\">finally</span><span class=\"p\">:</span>\n        <span class=\"n\">_releaseLock</span><span class=\"p\">()</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Handler</span><span class=\"p\">(</span><span class=\"n\">Filterer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Handler instances dispatch logging events to specific destinations.</span>\n\n<span class=\"sd\">    The base handler class. Acts as a placeholder which defines the Handler</span>\n<span class=\"sd\">    interface. Handlers can optionally use Formatter instances to format</span>\n<span class=\"sd\">    records as desired. By default, no formatter is specified; in this case,</span>\n<span class=\"sd\">    the &#39;raw&#39; message as determined by record.message is logged.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"o\">=</span><span class=\"n\">NOTSET</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initializes the instance - basically setting the formatter to None</span>\n<span class=\"sd\">        and the filter list to empty.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">Filterer</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">level</span> <span class=\"o\">=</span> <span class=\"n\">_checkLevel</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">formatter</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"c1\"># Add the handler to the global _handlerList (for cleanup on shutdown)</span>\n        <span class=\"n\">_addHandlerRef</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">createLock</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">set_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n        <span class=\"n\">_acquireLock</span><span class=\"p\">()</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name</span> <span class=\"ow\">in</span> <span class=\"n\">_handlers</span><span class=\"p\">:</span>\n                <span class=\"k\">del</span> <span class=\"n\">_handlers</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name</span><span class=\"p\">]</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name</span> <span class=\"o\">=</span> <span class=\"n\">name</span>\n            <span class=\"k\">if</span> <span class=\"n\">name</span><span class=\"p\">:</span>\n                <span class=\"n\">_handlers</span><span class=\"p\">[</span><span class=\"n\">name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span>\n        <span class=\"k\">finally</span><span class=\"p\">:</span>\n            <span class=\"n\">_releaseLock</span><span class=\"p\">()</span>\n\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"nb\">property</span><span class=\"p\">(</span><span class=\"n\">get_name</span><span class=\"p\">,</span> <span class=\"n\">set_name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">createLock</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Acquire a thread lock for serializing access to the underlying I/O.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">threading</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lock</span> <span class=\"o\">=</span> <span class=\"n\">threading</span><span class=\"o\">.</span><span class=\"n\">RLock</span><span class=\"p\">()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span> <span class=\"c1\">#pragma: no cover</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lock</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">acquire</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Acquire the I/O thread lock.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lock</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lock</span><span class=\"o\">.</span><span class=\"n\">acquire</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">release</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Release the I/O thread lock.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lock</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lock</span><span class=\"o\">.</span><span class=\"n\">release</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">setLevel</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Set the logging level of this handler.  level must be an int or a str.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">level</span> <span class=\"o\">=</span> <span class=\"n\">_checkLevel</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">format</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Format the specified record.</span>\n\n<span class=\"sd\">        If a formatter is set, use it. Otherwise, use the default formatter</span>\n<span class=\"sd\">        for the module.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">formatter</span><span class=\"p\">:</span>\n            <span class=\"n\">fmt</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">formatter</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">fmt</span> <span class=\"o\">=</span> <span class=\"n\">_defaultFormatter</span>\n        <span class=\"k\">return</span> <span class=\"n\">fmt</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">emit</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Do whatever it takes to actually log the specified logging record.</span>\n\n<span class=\"sd\">        This version is intended to be implemented by subclasses and so</span>\n<span class=\"sd\">        raises a NotImplementedError.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s1\">&#39;emit must be implemented &#39;</span>\n                                  <span class=\"s1\">&#39;by Handler subclasses&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">handle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Conditionally emit the specified logging record.</span>\n\n<span class=\"sd\">        Emission depends on filters which may have been added to the handler.</span>\n<span class=\"sd\">        Wrap the actual emission of the record with acquisition/release of</span>\n<span class=\"sd\">        the I/O thread lock. Returns whether the filter passed the record for</span>\n<span class=\"sd\">        emission.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">rv</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">acquire</span><span class=\"p\">()</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">emit</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n            <span class=\"k\">finally</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">release</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">rv</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">setFormatter</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">fmt</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Set the formatter for this handler.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">formatter</span> <span class=\"o\">=</span> <span class=\"n\">fmt</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">flush</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Ensure all logging output has been flushed.</span>\n\n<span class=\"sd\">        This version does nothing and is intended to be implemented by</span>\n<span class=\"sd\">        subclasses.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">close</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Tidy up any resources used by the handler.</span>\n\n<span class=\"sd\">        This version removes the handler from an internal map of handlers,</span>\n<span class=\"sd\">        _handlers, which is used for handler lookup by name. Subclasses</span>\n<span class=\"sd\">        should ensure that this gets called from overridden close()</span>\n<span class=\"sd\">        methods.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\">#get the module data lock, as we&#39;re updating a shared structure.</span>\n        <span class=\"n\">_acquireLock</span><span class=\"p\">()</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>    <span class=\"c1\">#unlikely to raise an exception, but you never know...</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name</span> <span class=\"ow\">in</span> <span class=\"n\">_handlers</span><span class=\"p\">:</span>\n                <span class=\"k\">del</span> <span class=\"n\">_handlers</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_name</span><span class=\"p\">]</span>\n        <span class=\"k\">finally</span><span class=\"p\">:</span>\n            <span class=\"n\">_releaseLock</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">handleError</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Handle errors which occur during an emit() call.</span>\n\n<span class=\"sd\">        This method should be called from handlers when an exception is</span>\n<span class=\"sd\">        encountered during an emit() call. If raiseExceptions is false,</span>\n<span class=\"sd\">        exceptions get silently ignored. This is what is mostly wanted</span>\n<span class=\"sd\">        for a logging system - most users will not care about errors in</span>\n<span class=\"sd\">        the logging system, they are more interested in application errors.</span>\n<span class=\"sd\">        You could, however, replace this with a custom handler if you wish.</span>\n<span class=\"sd\">        The record which was being processed is passed in to this method.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">raiseExceptions</span> <span class=\"ow\">and</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span><span class=\"p\">:</span>  <span class=\"c1\"># see issue 13807</span>\n            <span class=\"n\">t</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"p\">,</span> <span class=\"n\">tb</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">exc_info</span><span class=\"p\">()</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s1\">&#39;--- Logging error ---</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n                <span class=\"n\">traceback</span><span class=\"o\">.</span><span class=\"n\">print_exception</span><span class=\"p\">(</span><span class=\"n\">t</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"p\">,</span> <span class=\"n\">tb</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span><span class=\"p\">)</span>\n                <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s1\">&#39;Call stack:</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n                <span class=\"c1\"># Walk the stack frame up until we&#39;re out of logging,</span>\n                <span class=\"c1\"># so as to print the calling context.</span>\n                <span class=\"n\">frame</span> <span class=\"o\">=</span> <span class=\"n\">tb</span><span class=\"o\">.</span><span class=\"n\">tb_frame</span>\n                <span class=\"k\">while</span> <span class=\"p\">(</span><span class=\"n\">frame</span> <span class=\"ow\">and</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">dirname</span><span class=\"p\">(</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">f_code</span><span class=\"o\">.</span><span class=\"n\">co_filename</span><span class=\"p\">)</span> <span class=\"o\">==</span>\n                       <span class=\"n\">__path__</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]):</span>\n                    <span class=\"n\">frame</span> <span class=\"o\">=</span> <span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">f_back</span>\n                <span class=\"k\">if</span> <span class=\"n\">frame</span><span class=\"p\">:</span>\n                    <span class=\"n\">traceback</span><span class=\"o\">.</span><span class=\"n\">print_stack</span><span class=\"p\">(</span><span class=\"n\">frame</span><span class=\"p\">,</span> <span class=\"n\">file</span><span class=\"o\">=</span><span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span><span class=\"p\">)</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"c1\"># couldn&#39;t find the right stack frame, for some reason</span>\n                    <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s1\">&#39;Logged from file </span><span class=\"si\">%s</span><span class=\"s1\">, line </span><span class=\"si\">%s</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n                                     <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">filename</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">lineno</span><span class=\"p\">))</span>\n                <span class=\"c1\"># Issue 18671: output logging message and arguments</span>\n                <span class=\"k\">try</span><span class=\"p\">:</span>\n                    <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s1\">&#39;Message: </span><span class=\"si\">%r</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n                                     <span class=\"s1\">&#39;Arguments: </span><span class=\"si\">%s</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">msg</span><span class=\"p\">,</span>\n                                                          <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">args</span><span class=\"p\">))</span>\n                <span class=\"k\">except</span> <span class=\"ne\">Exception</span><span class=\"p\">:</span>\n                    <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s1\">&#39;Unable to print the message and arguments&#39;</span>\n                                     <span class=\"s1\">&#39; - possible formatting error.</span><span class=\"se\">\\n</span><span class=\"s1\">Use the&#39;</span>\n                                     <span class=\"s1\">&#39; traceback above to help find the error.</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n                                    <span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"ne\">OSError</span><span class=\"p\">:</span> <span class=\"c1\">#pragma: no cover</span>\n                <span class=\"k\">pass</span>    <span class=\"c1\"># see issue 5971</span>\n            <span class=\"k\">finally</span><span class=\"p\">:</span>\n                <span class=\"k\">del</span> <span class=\"n\">t</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"p\">,</span> <span class=\"n\">tb</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">level</span> <span class=\"o\">=</span> <span class=\"n\">getLevelName</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">level</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&lt;</span><span class=\"si\">%s</span><span class=\"s1\"> (</span><span class=\"si\">%s</span><span class=\"s1\">)&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__class__</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">StreamHandler</span><span class=\"p\">(</span><span class=\"n\">Handler</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A handler class which writes logging records, appropriately formatted,</span>\n<span class=\"sd\">    to a stream. Note that this class does not close the stream, as</span>\n<span class=\"sd\">    sys.stdout or sys.stderr may be used.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">terminator</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">stream</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initialize the handler.</span>\n\n<span class=\"sd\">        If stream is not specified, sys.stderr is used.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">Handler</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">stream</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">stream</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span> <span class=\"o\">=</span> <span class=\"n\">stream</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">flush</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Flushes the stream.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">acquire</span><span class=\"p\">()</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span> <span class=\"ow\">and</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span><span class=\"p\">,</span> <span class=\"s2\">&quot;flush&quot;</span><span class=\"p\">):</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">flush</span><span class=\"p\">()</span>\n        <span class=\"k\">finally</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">release</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">emit</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Emit a record.</span>\n\n<span class=\"sd\">        If a formatter is specified, it is used to format the record.</span>\n<span class=\"sd\">        The record is then written to the stream with a trailing newline.  If</span>\n<span class=\"sd\">        exception information is present, it is formatted using</span>\n<span class=\"sd\">        traceback.print_exception and appended to the stream.  If the stream</span>\n<span class=\"sd\">        has an &#39;encoding&#39; attribute, it is used to determine how to do the</span>\n<span class=\"sd\">        output to the stream.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">msg</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n            <span class=\"n\">stream</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span>\n            <span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">)</span>\n            <span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">terminator</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">flush</span><span class=\"p\">()</span>\n        <span class=\"k\">except</span> <span class=\"ne\">Exception</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">handleError</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">level</span> <span class=\"o\">=</span> <span class=\"n\">getLevelName</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">level</span><span class=\"p\">)</span>\n        <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span><span class=\"p\">,</span> <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">name</span><span class=\"p\">:</span>\n            <span class=\"n\">name</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; &#39;</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&lt;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">(</span><span class=\"si\">%s</span><span class=\"s1\">)&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__class__</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">FileHandler</span><span class=\"p\">(</span><span class=\"n\">StreamHandler</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A handler class which writes formatted logging records to disk files.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">filename</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">delay</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Open the specified file and use it as the stream for logging.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># Issue #27493: add support for Path objects to be passed in</span>\n        <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">fspath</span><span class=\"p\">(</span><span class=\"n\">filename</span><span class=\"p\">)</span>\n        <span class=\"c1\">#keep the absolute path, otherwise derived classes which use this</span>\n        <span class=\"c1\">#may come a cropper when the current directory changes</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">baseFilename</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">abspath</span><span class=\"p\">(</span><span class=\"n\">filename</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mode</span> <span class=\"o\">=</span> <span class=\"n\">mode</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">encoding</span> <span class=\"o\">=</span> <span class=\"n\">encoding</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">delay</span> <span class=\"o\">=</span> <span class=\"n\">delay</span>\n        <span class=\"k\">if</span> <span class=\"n\">delay</span><span class=\"p\">:</span>\n            <span class=\"c1\">#We don&#39;t open the stream, but we still need to call the</span>\n            <span class=\"c1\">#Handler constructor to set level, formatter, lock etc.</span>\n            <span class=\"n\">Handler</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">StreamHandler</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_open</span><span class=\"p\">())</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">close</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Closes the stream.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">acquire</span><span class=\"p\">()</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span><span class=\"p\">:</span>\n                    <span class=\"k\">try</span><span class=\"p\">:</span>\n                        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">flush</span><span class=\"p\">()</span>\n                    <span class=\"k\">finally</span><span class=\"p\">:</span>\n                        <span class=\"n\">stream</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span>\n                        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n                        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">stream</span><span class=\"p\">,</span> <span class=\"s2\">&quot;close&quot;</span><span class=\"p\">):</span>\n                            <span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n            <span class=\"k\">finally</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Issue #19523: call unconditionally to</span>\n                <span class=\"c1\"># prevent a handler leak when delay is set</span>\n                <span class=\"n\">StreamHandler</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">finally</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">release</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_open</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Open the current base file with the (original) mode and encoding.</span>\n<span class=\"sd\">        Return the resulting stream.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">baseFilename</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mode</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">encoding</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">emit</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Emit a record.</span>\n\n<span class=\"sd\">        If the stream was not opened because &#39;delay&#39; was specified in the</span>\n<span class=\"sd\">        constructor, open it before calling the superclass&#39;s emit.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_open</span><span class=\"p\">()</span>\n        <span class=\"n\">StreamHandler</span><span class=\"o\">.</span><span class=\"n\">emit</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">level</span> <span class=\"o\">=</span> <span class=\"n\">getLevelName</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">level</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&lt;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\"> (</span><span class=\"si\">%s</span><span class=\"s1\">)&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__class__</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">baseFilename</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_StderrHandler</span><span class=\"p\">(</span><span class=\"n\">StreamHandler</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This class is like a StreamHandler using sys.stderr, but always uses</span>\n<span class=\"sd\">    whatever sys.stderr is currently set to rather than the value of</span>\n<span class=\"sd\">    sys.stderr at handler construction time.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"o\">=</span><span class=\"n\">NOTSET</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initialize the handler.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">Handler</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">stream</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span>\n\n\n<span class=\"n\">_defaultLastResort</span> <span class=\"o\">=</span> <span class=\"n\">_StderrHandler</span><span class=\"p\">(</span><span class=\"n\">WARNING</span><span class=\"p\">)</span>\n<span class=\"n\">lastResort</span> <span class=\"o\">=</span> <span class=\"n\">_defaultLastResort</span>\n\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\">#   Manager classes and functions</span>\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">PlaceHolder</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    PlaceHolder instances are used in the Manager logger hierarchy to take</span>\n<span class=\"sd\">    the place of nodes for which no loggers have been defined. This class is</span>\n<span class=\"sd\">    intended for internal use only and not as part of the public API.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">alogger</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initialize with the specified logger being a child of this placeholder.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerMap</span> <span class=\"o\">=</span> <span class=\"p\">{</span> <span class=\"n\">alogger</span> <span class=\"p\">:</span> <span class=\"kc\">None</span> <span class=\"p\">}</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">append</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">alogger</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Add the specified logger as a child of this placeholder.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">alogger</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerMap</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerMap</span><span class=\"p\">[</span><span class=\"n\">alogger</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n<span class=\"c1\">#</span>\n<span class=\"c1\">#   Determine which class to use when instantiating loggers.</span>\n<span class=\"c1\">#</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">setLoggerClass</span><span class=\"p\">(</span><span class=\"n\">klass</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Set the class to be used when instantiating a logger. The class should</span>\n<span class=\"sd\">    define __init__() such that only a name argument is required, and the</span>\n<span class=\"sd\">    __init__() should call Logger.__init__()</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">klass</span> <span class=\"o\">!=</span> <span class=\"n\">Logger</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">issubclass</span><span class=\"p\">(</span><span class=\"n\">klass</span><span class=\"p\">,</span> <span class=\"n\">Logger</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;logger not derived from logging.Logger: &quot;</span>\n                            <span class=\"o\">+</span> <span class=\"n\">klass</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n    <span class=\"k\">global</span> <span class=\"n\">_loggerClass</span>\n    <span class=\"n\">_loggerClass</span> <span class=\"o\">=</span> <span class=\"n\">klass</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">getLoggerClass</span><span class=\"p\">():</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Return the class to be used when instantiating a logger.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">_loggerClass</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Manager</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    There is [under normal circumstances] just one Manager instance, which</span>\n<span class=\"sd\">    holds the hierarchy of loggers.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">rootnode</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initialize the manager with the root node of the logger hierarchy.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">root</span> <span class=\"o\">=</span> <span class=\"n\">rootnode</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">disable</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">emittedNoHandlerWarning</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerDict</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerClass</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logRecordFactory</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">getLogger</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Get a logger with the specified name (channel name), creating it</span>\n<span class=\"sd\">        if it doesn&#39;t yet exist. This name is a dot-separated hierarchical</span>\n<span class=\"sd\">        name, such as &quot;a&quot;, &quot;a.b&quot;, &quot;a.b.c&quot; or similar.</span>\n\n<span class=\"sd\">        If a PlaceHolder existed for the specified name [i.e. the logger</span>\n<span class=\"sd\">        didn&#39;t exist but a child of it did], replace it with the created</span>\n<span class=\"sd\">        logger and fix up the parent/child references which pointed to the</span>\n<span class=\"sd\">        placeholder to now point to the logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"nb\">str</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s1\">&#39;A logger name must be a string&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">_acquireLock</span><span class=\"p\">()</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">name</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerDict</span><span class=\"p\">:</span>\n                <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerDict</span><span class=\"p\">[</span><span class=\"n\">name</span><span class=\"p\">]</span>\n                <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">rv</span><span class=\"p\">,</span> <span class=\"n\">PlaceHolder</span><span class=\"p\">):</span>\n                    <span class=\"n\">ph</span> <span class=\"o\">=</span> <span class=\"n\">rv</span>\n                    <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerClass</span> <span class=\"ow\">or</span> <span class=\"n\">_loggerClass</span><span class=\"p\">)(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n                    <span class=\"n\">rv</span><span class=\"o\">.</span><span class=\"n\">manager</span> <span class=\"o\">=</span> <span class=\"bp\">self</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerDict</span><span class=\"p\">[</span><span class=\"n\">name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">rv</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_fixupChildren</span><span class=\"p\">(</span><span class=\"n\">ph</span><span class=\"p\">,</span> <span class=\"n\">rv</span><span class=\"p\">)</span>\n                    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_fixupParents</span><span class=\"p\">(</span><span class=\"n\">rv</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerClass</span> <span class=\"ow\">or</span> <span class=\"n\">_loggerClass</span><span class=\"p\">)(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n                <span class=\"n\">rv</span><span class=\"o\">.</span><span class=\"n\">manager</span> <span class=\"o\">=</span> <span class=\"bp\">self</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerDict</span><span class=\"p\">[</span><span class=\"n\">name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">rv</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_fixupParents</span><span class=\"p\">(</span><span class=\"n\">rv</span><span class=\"p\">)</span>\n        <span class=\"k\">finally</span><span class=\"p\">:</span>\n            <span class=\"n\">_releaseLock</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">rv</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">setLoggerClass</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">klass</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Set the class to be used when instantiating a logger with this Manager.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">klass</span> <span class=\"o\">!=</span> <span class=\"n\">Logger</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">issubclass</span><span class=\"p\">(</span><span class=\"n\">klass</span><span class=\"p\">,</span> <span class=\"n\">Logger</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;logger not derived from logging.Logger: &quot;</span>\n                                <span class=\"o\">+</span> <span class=\"n\">klass</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerClass</span> <span class=\"o\">=</span> <span class=\"n\">klass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">setLogRecordFactory</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">factory</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Set the factory to be used when instantiating a log record with this</span>\n<span class=\"sd\">        Manager.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logRecordFactory</span> <span class=\"o\">=</span> <span class=\"n\">factory</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_fixupParents</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">alogger</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Ensure that there are either loggers or placeholders all the way</span>\n<span class=\"sd\">        from the specified logger to the root of the logger hierarchy.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">alogger</span><span class=\"o\">.</span><span class=\"n\">name</span>\n        <span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">rfind</span><span class=\"p\">(</span><span class=\"s2\">&quot;.&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">while</span> <span class=\"p\">(</span><span class=\"n\">i</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">rv</span><span class=\"p\">:</span>\n            <span class=\"n\">substr</span> <span class=\"o\">=</span> <span class=\"n\">name</span><span class=\"p\">[:</span><span class=\"n\">i</span><span class=\"p\">]</span>\n            <span class=\"k\">if</span> <span class=\"n\">substr</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerDict</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerDict</span><span class=\"p\">[</span><span class=\"n\">substr</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">PlaceHolder</span><span class=\"p\">(</span><span class=\"n\">alogger</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">loggerDict</span><span class=\"p\">[</span><span class=\"n\">substr</span><span class=\"p\">]</span>\n                <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">Logger</span><span class=\"p\">):</span>\n                    <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"n\">obj</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"k\">assert</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">PlaceHolder</span><span class=\"p\">)</span>\n                    <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">alogger</span><span class=\"p\">)</span>\n            <span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">rfind</span><span class=\"p\">(</span><span class=\"s2\">&quot;.&quot;</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">i</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">rv</span><span class=\"p\">:</span>\n            <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">root</span>\n        <span class=\"n\">alogger</span><span class=\"o\">.</span><span class=\"n\">parent</span> <span class=\"o\">=</span> <span class=\"n\">rv</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_fixupChildren</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">ph</span><span class=\"p\">,</span> <span class=\"n\">alogger</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Ensure that children of the placeholder ph are connected to the</span>\n<span class=\"sd\">        specified logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">alogger</span><span class=\"o\">.</span><span class=\"n\">name</span>\n        <span class=\"n\">namelen</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">ph</span><span class=\"o\">.</span><span class=\"n\">loggerMap</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">():</span>\n            <span class=\"c1\">#The if means ... if not c.parent.name.startswith(nm)</span>\n            <span class=\"k\">if</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">parent</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">[:</span><span class=\"n\">namelen</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"n\">name</span><span class=\"p\">:</span>\n                <span class=\"n\">alogger</span><span class=\"o\">.</span><span class=\"n\">parent</span> <span class=\"o\">=</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">parent</span>\n                <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">parent</span> <span class=\"o\">=</span> <span class=\"n\">alogger</span>\n\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\">#   Logger classes and functions</span>\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">Logger</span><span class=\"p\">(</span><span class=\"n\">Filterer</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Instances of the Logger class represent a single logging channel. A</span>\n<span class=\"sd\">    &quot;logging channel&quot; indicates an area of an application. Exactly how an</span>\n<span class=\"sd\">    &quot;area&quot; is defined is up to the application developer. Since an</span>\n<span class=\"sd\">    application can have any number of areas, logging channels are identified</span>\n<span class=\"sd\">    by a unique string. Application areas can be nested (e.g. an area</span>\n<span class=\"sd\">    of &quot;input processing&quot; might include sub-areas &quot;read CSV files&quot;, &quot;read</span>\n<span class=\"sd\">    XLS files&quot; and &quot;read Gnumeric files&quot;). To cater for this natural nesting,</span>\n<span class=\"sd\">    channel names are organized into a namespace hierarchy where levels are</span>\n<span class=\"sd\">    separated by periods, much like the Java or Python package namespace. So</span>\n<span class=\"sd\">    in the instance given above, channel names might be &quot;input&quot; for the upper</span>\n<span class=\"sd\">    level, and &quot;input.csv&quot;, &quot;input.xls&quot; and &quot;input.gnu&quot; for the sub-levels.</span>\n<span class=\"sd\">    There is no arbitrary limit to the depth of nesting.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"o\">=</span><span class=\"n\">NOTSET</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initialize the logger with a name and an optional level.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">Filterer</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">level</span> <span class=\"o\">=</span> <span class=\"n\">_checkLevel</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">parent</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">propagate</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">handlers</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">disabled</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">setLevel</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Set the logging level of this logger.  level must be an int or a str.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">level</span> <span class=\"o\">=</span> <span class=\"n\">_checkLevel</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">debug</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Log &#39;msg % args&#39; with severity &#39;DEBUG&#39;.</span>\n\n<span class=\"sd\">        To pass exception information, use the keyword argument exc_info with</span>\n<span class=\"sd\">        a true value, e.g.</span>\n\n<span class=\"sd\">        logger.debug(&quot;Houston, we have a %s&quot;, &quot;thorny problem&quot;, exc_info=1)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">isEnabledFor</span><span class=\"p\">(</span><span class=\"n\">DEBUG</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log</span><span class=\"p\">(</span><span class=\"n\">DEBUG</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">info</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Log &#39;msg % args&#39; with severity &#39;INFO&#39;.</span>\n\n<span class=\"sd\">        To pass exception information, use the keyword argument exc_info with</span>\n<span class=\"sd\">        a true value, e.g.</span>\n\n<span class=\"sd\">        logger.info(&quot;Houston, we have a %s&quot;, &quot;interesting problem&quot;, exc_info=1)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">isEnabledFor</span><span class=\"p\">(</span><span class=\"n\">INFO</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log</span><span class=\"p\">(</span><span class=\"n\">INFO</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">warning</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Log &#39;msg % args&#39; with severity &#39;WARNING&#39;.</span>\n\n<span class=\"sd\">        To pass exception information, use the keyword argument exc_info with</span>\n<span class=\"sd\">        a true value, e.g.</span>\n\n<span class=\"sd\">        logger.warning(&quot;Houston, we have a %s&quot;, &quot;bit of a problem&quot;, exc_info=1)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">isEnabledFor</span><span class=\"p\">(</span><span class=\"n\">WARNING</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log</span><span class=\"p\">(</span><span class=\"n\">WARNING</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">warn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">warn</span><span class=\"p\">(</span><span class=\"s2\">&quot;The &#39;warn&#39; method is deprecated, &quot;</span>\n            <span class=\"s2\">&quot;use &#39;warning&#39; instead&quot;</span><span class=\"p\">,</span> <span class=\"ne\">DeprecationWarning</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">error</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Log &#39;msg % args&#39; with severity &#39;ERROR&#39;.</span>\n\n<span class=\"sd\">        To pass exception information, use the keyword argument exc_info with</span>\n<span class=\"sd\">        a true value, e.g.</span>\n\n<span class=\"sd\">        logger.error(&quot;Houston, we have a %s&quot;, &quot;major problem&quot;, exc_info=1)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">isEnabledFor</span><span class=\"p\">(</span><span class=\"n\">ERROR</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log</span><span class=\"p\">(</span><span class=\"n\">ERROR</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">exception</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Convenience method for logging an ERROR with exception information.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">error</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"o\">=</span><span class=\"n\">exc_info</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">critical</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Log &#39;msg % args&#39; with severity &#39;CRITICAL&#39;.</span>\n\n<span class=\"sd\">        To pass exception information, use the keyword argument exc_info with</span>\n<span class=\"sd\">        a true value, e.g.</span>\n\n<span class=\"sd\">        logger.critical(&quot;Houston, we have a %s&quot;, &quot;major disaster&quot;, exc_info=1)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">isEnabledFor</span><span class=\"p\">(</span><span class=\"n\">CRITICAL</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log</span><span class=\"p\">(</span><span class=\"n\">CRITICAL</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"n\">fatal</span> <span class=\"o\">=</span> <span class=\"n\">critical</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">log</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Log &#39;msg % args&#39; with the integer severity &#39;level&#39;.</span>\n\n<span class=\"sd\">        To pass exception information, use the keyword argument exc_info with</span>\n<span class=\"sd\">        a true value, e.g.</span>\n\n<span class=\"sd\">        logger.log(level, &quot;We have a %s&quot;, &quot;mysterious problem&quot;, exc_info=1)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"nb\">int</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">raiseExceptions</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;level must be an integer&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">isEnabledFor</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_log</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">findCaller</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">stack_info</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Find the stack frame of the caller so that we can note the source</span>\n<span class=\"sd\">        file name, line number and function name.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">currentframe</span><span class=\"p\">()</span>\n        <span class=\"c1\">#On some versions of IronPython, currentframe() returns None if</span>\n        <span class=\"c1\">#IronPython isn&#39;t run with -X:Frames.</span>\n        <span class=\"k\">if</span> <span class=\"n\">f</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">f_back</span>\n        <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;(unknown file)&quot;</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"s2\">&quot;(unknown function)&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span>\n        <span class=\"k\">while</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"s2\">&quot;f_code&quot;</span><span class=\"p\">):</span>\n            <span class=\"n\">co</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">f_code</span>\n            <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">normcase</span><span class=\"p\">(</span><span class=\"n\">co</span><span class=\"o\">.</span><span class=\"n\">co_filename</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">filename</span> <span class=\"o\">==</span> <span class=\"n\">_srcfile</span><span class=\"p\">:</span>\n                <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">f_back</span>\n                <span class=\"k\">continue</span>\n            <span class=\"n\">sinfo</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n            <span class=\"k\">if</span> <span class=\"n\">stack_info</span><span class=\"p\">:</span>\n                <span class=\"n\">sio</span> <span class=\"o\">=</span> <span class=\"n\">io</span><span class=\"o\">.</span><span class=\"n\">StringIO</span><span class=\"p\">()</span>\n                <span class=\"n\">sio</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s1\">&#39;Stack (most recent call last):</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n                <span class=\"n\">traceback</span><span class=\"o\">.</span><span class=\"n\">print_stack</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">file</span><span class=\"o\">=</span><span class=\"n\">sio</span><span class=\"p\">)</span>\n                <span class=\"n\">sinfo</span> <span class=\"o\">=</span> <span class=\"n\">sio</span><span class=\"o\">.</span><span class=\"n\">getvalue</span><span class=\"p\">()</span>\n                <span class=\"k\">if</span> <span class=\"n\">sinfo</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">:</span>\n                    <span class=\"n\">sinfo</span> <span class=\"o\">=</span> <span class=\"n\">sinfo</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n                <span class=\"n\">sio</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n            <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">co</span><span class=\"o\">.</span><span class=\"n\">co_filename</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">f_lineno</span><span class=\"p\">,</span> <span class=\"n\">co</span><span class=\"o\">.</span><span class=\"n\">co_name</span><span class=\"p\">,</span> <span class=\"n\">sinfo</span><span class=\"p\">)</span>\n            <span class=\"k\">break</span>\n        <span class=\"k\">return</span> <span class=\"n\">rv</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">makeRecord</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">fn</span><span class=\"p\">,</span> <span class=\"n\">lno</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"p\">,</span>\n                   <span class=\"n\">func</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">extra</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">sinfo</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        A factory method which can be overridden in subclasses to create</span>\n<span class=\"sd\">        specialized LogRecords.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"n\">_logRecordFactory</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">fn</span><span class=\"p\">,</span> <span class=\"n\">lno</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"p\">,</span> <span class=\"n\">func</span><span class=\"p\">,</span>\n                             <span class=\"n\">sinfo</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">extra</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">extra</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s2\">&quot;message&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;asctime&quot;</span><span class=\"p\">])</span> <span class=\"ow\">or</span> <span class=\"p\">(</span><span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">rv</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">):</span>\n                    <span class=\"k\">raise</span> <span class=\"ne\">KeyError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Attempt to overwrite </span><span class=\"si\">%r</span><span class=\"s2\"> in LogRecord&quot;</span> <span class=\"o\">%</span> <span class=\"n\">key</span><span class=\"p\">)</span>\n                <span class=\"n\">rv</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">extra</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">rv</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_log</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">extra</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">stack_info</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Low-level logging routine which creates a LogRecord and then calls</span>\n<span class=\"sd\">        all the handlers of this logger to handle the record.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">sinfo</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"n\">_srcfile</span><span class=\"p\">:</span>\n            <span class=\"c1\">#IronPython doesn&#39;t track Python frames, so findCaller raises an</span>\n            <span class=\"c1\">#exception on some versions of IronPython. We trap it here so that</span>\n            <span class=\"c1\">#IronPython can use logging.</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">fn</span><span class=\"p\">,</span> <span class=\"n\">lno</span><span class=\"p\">,</span> <span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"n\">sinfo</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">findCaller</span><span class=\"p\">(</span><span class=\"n\">stack_info</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"ne\">ValueError</span><span class=\"p\">:</span> <span class=\"c1\"># pragma: no cover</span>\n                <span class=\"n\">fn</span><span class=\"p\">,</span> <span class=\"n\">lno</span><span class=\"p\">,</span> <span class=\"n\">func</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;(unknown file)&quot;</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"s2\">&quot;(unknown function)&quot;</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span> <span class=\"c1\"># pragma: no cover</span>\n            <span class=\"n\">fn</span><span class=\"p\">,</span> <span class=\"n\">lno</span><span class=\"p\">,</span> <span class=\"n\">func</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;(unknown file)&quot;</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"s2\">&quot;(unknown function)&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">exc_info</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">exc_info</span><span class=\"p\">,</span> <span class=\"ne\">BaseException</span><span class=\"p\">):</span>\n                <span class=\"n\">exc_info</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">exc_info</span><span class=\"p\">),</span> <span class=\"n\">exc_info</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"o\">.</span><span class=\"n\">__traceback__</span><span class=\"p\">)</span>\n            <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">exc_info</span><span class=\"p\">,</span> <span class=\"nb\">tuple</span><span class=\"p\">):</span>\n                <span class=\"n\">exc_info</span> <span class=\"o\">=</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">exc_info</span><span class=\"p\">()</span>\n        <span class=\"n\">record</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">makeRecord</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">fn</span><span class=\"p\">,</span> <span class=\"n\">lno</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span>\n                                 <span class=\"n\">exc_info</span><span class=\"p\">,</span> <span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"n\">extra</span><span class=\"p\">,</span> <span class=\"n\">sinfo</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">handle</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">handle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Call the handlers for the specified record.</span>\n\n<span class=\"sd\">        This method is used for unpickled records received from a socket, as</span>\n<span class=\"sd\">        well as those created locally. Logger-level filtering is applied.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">disabled</span><span class=\"p\">)</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">callHandlers</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">addHandler</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">hdlr</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Add the specified handler to this logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">_acquireLock</span><span class=\"p\">()</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"p\">(</span><span class=\"n\">hdlr</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">):</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">hdlr</span><span class=\"p\">)</span>\n        <span class=\"k\">finally</span><span class=\"p\">:</span>\n            <span class=\"n\">_releaseLock</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">removeHandler</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">hdlr</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Remove the specified handler from this logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">_acquireLock</span><span class=\"p\">()</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">hdlr</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">hdlr</span><span class=\"p\">)</span>\n        <span class=\"k\">finally</span><span class=\"p\">:</span>\n            <span class=\"n\">_releaseLock</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">hasHandlers</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        See if this logger has any handlers configured.</span>\n\n<span class=\"sd\">        Loop through all handlers for this logger and its parents in the</span>\n<span class=\"sd\">        logger hierarchy. Return True if a handler was found, else False.</span>\n<span class=\"sd\">        Stop searching up the hierarchy whenever a logger with the &quot;propagate&quot;</span>\n<span class=\"sd\">        attribute set to zero is found - that will be the last logger which</span>\n<span class=\"sd\">        is checked for the existence of handlers.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"bp\">self</span>\n        <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"k\">while</span> <span class=\"n\">c</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">:</span>\n                <span class=\"n\">rv</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n                <span class=\"k\">break</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">propagate</span><span class=\"p\">:</span>\n                <span class=\"k\">break</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">parent</span>\n        <span class=\"k\">return</span> <span class=\"n\">rv</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">callHandlers</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Pass a record to all relevant handlers.</span>\n\n<span class=\"sd\">        Loop through all handlers for this logger and its parents in the</span>\n<span class=\"sd\">        logger hierarchy. If no handler was found, output a one-off error</span>\n<span class=\"sd\">        message to sys.stderr. Stop searching up the hierarchy whenever a</span>\n<span class=\"sd\">        logger with the &quot;propagate&quot; attribute set to zero is found - that</span>\n<span class=\"sd\">        will be the last logger whose handlers are called.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"bp\">self</span>\n        <span class=\"n\">found</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"k\">while</span> <span class=\"n\">c</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">hdlr</span> <span class=\"ow\">in</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">:</span>\n                <span class=\"n\">found</span> <span class=\"o\">=</span> <span class=\"n\">found</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n                <span class=\"k\">if</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">levelno</span> <span class=\"o\">&gt;=</span> <span class=\"n\">hdlr</span><span class=\"o\">.</span><span class=\"n\">level</span><span class=\"p\">:</span>\n                    <span class=\"n\">hdlr</span><span class=\"o\">.</span><span class=\"n\">handle</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">propagate</span><span class=\"p\">:</span>\n                <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>    <span class=\"c1\">#break out</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">parent</span>\n        <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">found</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">lastResort</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">levelno</span> <span class=\"o\">&gt;=</span> <span class=\"n\">lastResort</span><span class=\"o\">.</span><span class=\"n\">level</span><span class=\"p\">:</span>\n                    <span class=\"n\">lastResort</span><span class=\"o\">.</span><span class=\"n\">handle</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">)</span>\n            <span class=\"k\">elif</span> <span class=\"n\">raiseExceptions</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">manager</span><span class=\"o\">.</span><span class=\"n\">emittedNoHandlerWarning</span><span class=\"p\">:</span>\n                <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">stderr</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;No handlers could be found for logger&quot;</span>\n                                 <span class=\"s2\">&quot; </span><span class=\"se\">\\&quot;</span><span class=\"si\">%s</span><span class=\"se\">\\&quot;\\n</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">manager</span><span class=\"o\">.</span><span class=\"n\">emittedNoHandlerWarning</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">getEffectiveLevel</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Get the effective level for this logger.</span>\n\n<span class=\"sd\">        Loop through this logger and its parents in the logger hierarchy,</span>\n<span class=\"sd\">        looking for a non-zero logging level. Return the first one found.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"bp\">self</span>\n        <span class=\"k\">while</span> <span class=\"n\">logger</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">level</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">level</span>\n            <span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">parent</span>\n        <span class=\"k\">return</span> <span class=\"n\">NOTSET</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">isEnabledFor</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Is this logger enabled for level &#39;level&#39;?</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">manager</span><span class=\"o\">.</span><span class=\"n\">disable</span> <span class=\"o\">&gt;=</span> <span class=\"n\">level</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"n\">level</span> <span class=\"o\">&gt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">getEffectiveLevel</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">getChild</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">suffix</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Get a logger which is a descendant to this one.</span>\n\n<span class=\"sd\">        This is a convenience method, such that</span>\n\n<span class=\"sd\">        logging.getLogger(&#39;abc&#39;).getChild(&#39;def.ghi&#39;)</span>\n\n<span class=\"sd\">        is the same as</span>\n\n<span class=\"sd\">        logging.getLogger(&#39;abc.def.ghi&#39;)</span>\n\n<span class=\"sd\">        It&#39;s useful, for example, when the parent logger is named using</span>\n<span class=\"sd\">        __name__ rather than a literal string.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">root</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"p\">:</span>\n            <span class=\"n\">suffix</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;.&#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">((</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">suffix</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">manager</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"n\">suffix</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">level</span> <span class=\"o\">=</span> <span class=\"n\">getLevelName</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">getEffectiveLevel</span><span class=\"p\">())</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&lt;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\"> (</span><span class=\"si\">%s</span><span class=\"s1\">)&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__class__</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">RootLogger</span><span class=\"p\">(</span><span class=\"n\">Logger</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A root logger is not that different to any other logger, except that</span>\n<span class=\"sd\">    it must have a logging level and there is only one instance of it in</span>\n<span class=\"sd\">    the hierarchy.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initialize the logger with the name &quot;root&quot;.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">Logger</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s2\">&quot;root&quot;</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">)</span>\n\n<span class=\"n\">_loggerClass</span> <span class=\"o\">=</span> <span class=\"n\">Logger</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">LoggerAdapter</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    An adapter for loggers which makes it easier to specify contextual</span>\n<span class=\"sd\">    information in logging output.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">logger</span><span class=\"p\">,</span> <span class=\"n\">extra</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Initialize the adapter with a logger and a dict-like object which</span>\n<span class=\"sd\">        provides contextual information. This constructor signature allows</span>\n<span class=\"sd\">        easy stacking of LoggerAdapters, if so desired.</span>\n\n<span class=\"sd\">        You can effectively pass keyword arguments as shown in the</span>\n<span class=\"sd\">        following example:</span>\n\n<span class=\"sd\">        adapter = LoggerAdapter(someLogger, dict(p1=v1, p2=&quot;v2&quot;))</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logger</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">extra</span> <span class=\"o\">=</span> <span class=\"n\">extra</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">process</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Process the logging message and keyword arguments passed in to</span>\n<span class=\"sd\">        a logging call to insert contextual information. You can either</span>\n<span class=\"sd\">        manipulate the message itself, the keyword args or both. Return</span>\n<span class=\"sd\">        the message and kwargs modified (or not) to suit your needs.</span>\n\n<span class=\"sd\">        Normally, you&#39;ll only need to override this one method in a</span>\n<span class=\"sd\">        LoggerAdapter subclass for your specific needs.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;extra&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">extra</span>\n        <span class=\"k\">return</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span>\n\n    <span class=\"c1\">#</span>\n    <span class=\"c1\"># Boilerplate convenience methods</span>\n    <span class=\"c1\">#</span>\n    <span class=\"k\">def</span> <span class=\"nf\">debug</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Delegate a debug call to the underlying logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"n\">DEBUG</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">info</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Delegate an info call to the underlying logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"n\">INFO</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">warning</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Delegate a warning call to the underlying logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"n\">WARNING</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">warn</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">warn</span><span class=\"p\">(</span><span class=\"s2\">&quot;The &#39;warn&#39; method is deprecated, &quot;</span>\n            <span class=\"s2\">&quot;use &#39;warning&#39; instead&quot;</span><span class=\"p\">,</span> <span class=\"ne\">DeprecationWarning</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">error</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Delegate an error call to the underlying logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"n\">ERROR</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">exception</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Delegate an exception call to the underlying logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"n\">ERROR</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"o\">=</span><span class=\"n\">exc_info</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">critical</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Delegate a critical call to the underlying logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"n\">CRITICAL</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">log</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Delegate a log call to the underlying logger, after adding</span>\n<span class=\"sd\">        contextual information from this adapter instance.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">isEnabledFor</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">):</span>\n            <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">process</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">isEnabledFor</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Is this logger enabled for level &#39;level&#39;?</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">manager</span><span class=\"o\">.</span><span class=\"n\">disable</span> <span class=\"o\">&gt;=</span> <span class=\"n\">level</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"n\">level</span> <span class=\"o\">&gt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">getEffectiveLevel</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">setLevel</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Set the specified level on the underlying logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">setLevel</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">getEffectiveLevel</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Get the effective level for the underlying logger.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">getEffectiveLevel</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">hasHandlers</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        See if the underlying logger has any handlers.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">hasHandlers</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_log</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">extra</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">stack_info</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Low-level log implementation, proxied to allow nested logger adapters.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">_log</span><span class=\"p\">(</span>\n            <span class=\"n\">level</span><span class=\"p\">,</span>\n            <span class=\"n\">msg</span><span class=\"p\">,</span>\n            <span class=\"n\">args</span><span class=\"p\">,</span>\n            <span class=\"n\">exc_info</span><span class=\"o\">=</span><span class=\"n\">exc_info</span><span class=\"p\">,</span>\n            <span class=\"n\">extra</span><span class=\"o\">=</span><span class=\"n\">extra</span><span class=\"p\">,</span>\n            <span class=\"n\">stack_info</span><span class=\"o\">=</span><span class=\"n\">stack_info</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">manager</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">manager</span>\n\n    <span class=\"nd\">@manager</span><span class=\"o\">.</span><span class=\"n\">setter</span>\n    <span class=\"k\">def</span> <span class=\"nf\">manager</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">manager</span> <span class=\"o\">=</span> <span class=\"n\">value</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">name</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">logger</span>\n        <span class=\"n\">level</span> <span class=\"o\">=</span> <span class=\"n\">getLevelName</span><span class=\"p\">(</span><span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">getEffectiveLevel</span><span class=\"p\">())</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&lt;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\"> (</span><span class=\"si\">%s</span><span class=\"s1\">)&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__class__</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">,</span> <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">level</span><span class=\"p\">)</span>\n\n<span class=\"n\">root</span> <span class=\"o\">=</span> <span class=\"n\">RootLogger</span><span class=\"p\">(</span><span class=\"n\">WARNING</span><span class=\"p\">)</span>\n<span class=\"n\">Logger</span><span class=\"o\">.</span><span class=\"n\">root</span> <span class=\"o\">=</span> <span class=\"n\">root</span>\n<span class=\"n\">Logger</span><span class=\"o\">.</span><span class=\"n\">manager</span> <span class=\"o\">=</span> <span class=\"n\">Manager</span><span class=\"p\">(</span><span class=\"n\">Logger</span><span class=\"o\">.</span><span class=\"n\">root</span><span class=\"p\">)</span>\n\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\"># Configuration classes and functions</span>\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">basicConfig</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Do basic configuration for the logging system.</span>\n\n<span class=\"sd\">    This function does nothing if the root logger already has handlers</span>\n<span class=\"sd\">    configured. It is a convenience method intended for use by simple scripts</span>\n<span class=\"sd\">    to do one-shot configuration of the logging package.</span>\n\n<span class=\"sd\">    The default behaviour is to create a StreamHandler which writes to</span>\n<span class=\"sd\">    sys.stderr, set a formatter using the BASIC_FORMAT format string, and</span>\n<span class=\"sd\">    add the handler to the root logger.</span>\n\n<span class=\"sd\">    A number of optional keyword arguments may be specified, which can alter</span>\n<span class=\"sd\">    the default behaviour.</span>\n\n<span class=\"sd\">    filename  Specifies that a FileHandler be created, using the specified</span>\n<span class=\"sd\">              filename, rather than a StreamHandler.</span>\n<span class=\"sd\">    filemode  Specifies the mode to open the file, if filename is specified</span>\n<span class=\"sd\">              (if filemode is unspecified, it defaults to &#39;a&#39;).</span>\n<span class=\"sd\">    format    Use the specified format string for the handler.</span>\n<span class=\"sd\">    datefmt   Use the specified date/time format.</span>\n<span class=\"sd\">    style     If a format string is specified, use this to specify the</span>\n<span class=\"sd\">              type of format string (possible values &#39;%&#39;, &#39;{&#39;, &#39;$&#39;, for</span>\n<span class=\"sd\">              %-formatting, :meth:`str.format` and :class:`string.Template`</span>\n<span class=\"sd\">              - defaults to &#39;%&#39;).</span>\n<span class=\"sd\">    level     Set the root logger level to the specified level.</span>\n<span class=\"sd\">    stream    Use the specified stream to initialize the StreamHandler. Note</span>\n<span class=\"sd\">              that this argument is incompatible with &#39;filename&#39; - if both</span>\n<span class=\"sd\">              are present, &#39;stream&#39; is ignored.</span>\n<span class=\"sd\">    handlers  If specified, this should be an iterable of already created</span>\n<span class=\"sd\">              handlers, which will be added to the root handler. Any handler</span>\n<span class=\"sd\">              in the list which does not have a formatter assigned will be</span>\n<span class=\"sd\">              assigned the formatter created in this function.</span>\n\n<span class=\"sd\">    Note that you could specify a stream created using open(filename, mode)</span>\n<span class=\"sd\">    rather than passing the filename and mode in. However, it should be</span>\n<span class=\"sd\">    remembered that StreamHandler does not close its stream (since it may be</span>\n<span class=\"sd\">    using sys.stdout or sys.stderr), whereas FileHandler closes its stream</span>\n<span class=\"sd\">    when the handler is closed.</span>\n\n<span class=\"sd\">    .. versionchanged:: 3.2</span>\n<span class=\"sd\">       Added the ``style`` parameter.</span>\n\n<span class=\"sd\">    .. versionchanged:: 3.3</span>\n<span class=\"sd\">       Added the ``handlers`` parameter. A ``ValueError`` is now thrown for</span>\n<span class=\"sd\">       incompatible arguments (e.g. ``handlers`` specified together with</span>\n<span class=\"sd\">       ``filename``/``filemode``, or ``filename``/``filemode`` specified</span>\n<span class=\"sd\">       together with ``stream``, or ``handlers`` specified together with</span>\n<span class=\"sd\">       ``stream``.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># Add thread safety in case someone mistakenly calls</span>\n    <span class=\"c1\"># basicConfig() from multiple threads</span>\n    <span class=\"n\">_acquireLock</span><span class=\"p\">()</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"n\">handlers</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">handlers</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"s2\">&quot;stream&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">kwargs</span> <span class=\"ow\">and</span> <span class=\"s2\">&quot;filename&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">kwargs</span><span class=\"p\">:</span>\n                    <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;stream&#39; and &#39;filename&#39; should not be &quot;</span>\n                                     <span class=\"s2\">&quot;specified together&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"s2\">&quot;stream&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">kwargs</span> <span class=\"ow\">or</span> <span class=\"s2\">&quot;filename&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">kwargs</span><span class=\"p\">:</span>\n                    <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;stream&#39; or &#39;filename&#39; should not be &quot;</span>\n                                     <span class=\"s2\">&quot;specified together with &#39;handlers&#39;&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">handlers</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;filename&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n                <span class=\"n\">mode</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;filemode&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">if</span> <span class=\"n\">filename</span><span class=\"p\">:</span>\n                    <span class=\"n\">h</span> <span class=\"o\">=</span> <span class=\"n\">FileHandler</span><span class=\"p\">(</span><span class=\"n\">filename</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">)</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">stream</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;stream&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n                    <span class=\"n\">h</span> <span class=\"o\">=</span> <span class=\"n\">StreamHandler</span><span class=\"p\">(</span><span class=\"n\">stream</span><span class=\"p\">)</span>\n                <span class=\"n\">handlers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">h</span><span class=\"p\">]</span>\n            <span class=\"n\">dfs</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;datefmt&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n            <span class=\"n\">style</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;style&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;%&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">style</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">_STYLES</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s1\">&#39;Style must be one of: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"s1\">&#39;,&#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span>\n                                 <span class=\"n\">_STYLES</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">()))</span>\n            <span class=\"n\">fs</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;format&quot;</span><span class=\"p\">,</span> <span class=\"n\">_STYLES</span><span class=\"p\">[</span><span class=\"n\">style</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n            <span class=\"n\">fmt</span> <span class=\"o\">=</span> <span class=\"n\">Formatter</span><span class=\"p\">(</span><span class=\"n\">fs</span><span class=\"p\">,</span> <span class=\"n\">dfs</span><span class=\"p\">,</span> <span class=\"n\">style</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">h</span> <span class=\"ow\">in</span> <span class=\"n\">handlers</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">h</span><span class=\"o\">.</span><span class=\"n\">formatter</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                    <span class=\"n\">h</span><span class=\"o\">.</span><span class=\"n\">setFormatter</span><span class=\"p\">(</span><span class=\"n\">fmt</span><span class=\"p\">)</span>\n                <span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">addHandler</span><span class=\"p\">(</span><span class=\"n\">h</span><span class=\"p\">)</span>\n            <span class=\"n\">level</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s2\">&quot;level&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">level</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">setLevel</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">kwargs</span><span class=\"p\">:</span>\n                <span class=\"n\">keys</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;, &#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s1\">&#39;Unrecognised argument(s): </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"n\">keys</span><span class=\"p\">)</span>\n    <span class=\"k\">finally</span><span class=\"p\">:</span>\n        <span class=\"n\">_releaseLock</span><span class=\"p\">()</span>\n\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n<span class=\"c1\"># Utility functions at module level.</span>\n<span class=\"c1\"># Basically delegate everything to the root logger.</span>\n<span class=\"c1\">#---------------------------------------------------------------------------</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">getLogger</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Return a logger with the specified name, creating it if necessary.</span>\n\n<span class=\"sd\">    If no name is specified, return the root logger.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">name</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">Logger</span><span class=\"o\">.</span><span class=\"n\">manager</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">root</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">critical</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Log a message with severity &#39;CRITICAL&#39; on the root logger. If the logger</span>\n<span class=\"sd\">    has no handlers, call basicConfig() to add a console handler with a</span>\n<span class=\"sd\">    pre-defined format.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"n\">basicConfig</span><span class=\"p\">()</span>\n    <span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">critical</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n<span class=\"n\">fatal</span> <span class=\"o\">=</span> <span class=\"n\">critical</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">error</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Log a message with severity &#39;ERROR&#39; on the root logger. If the logger has</span>\n<span class=\"sd\">    no handlers, call basicConfig() to add a console handler with a pre-defined</span>\n<span class=\"sd\">    format.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"n\">basicConfig</span><span class=\"p\">()</span>\n    <span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">error</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">exception</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Log a message with severity &#39;ERROR&#39; on the root logger, with exception</span>\n<span class=\"sd\">    information. If the logger has no handlers, basicConfig() is called to add</span>\n<span class=\"sd\">    a console handler with a pre-defined format.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">error</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">exc_info</span><span class=\"o\">=</span><span class=\"n\">exc_info</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">warning</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Log a message with severity &#39;WARNING&#39; on the root logger. If the logger has</span>\n<span class=\"sd\">    no handlers, call basicConfig() to add a console handler with a pre-defined</span>\n<span class=\"sd\">    format.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"n\">basicConfig</span><span class=\"p\">()</span>\n    <span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">warn</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">warn</span><span class=\"p\">(</span><span class=\"s2\">&quot;The &#39;warn&#39; function is deprecated, &quot;</span>\n        <span class=\"s2\">&quot;use &#39;warning&#39; instead&quot;</span><span class=\"p\">,</span> <span class=\"ne\">DeprecationWarning</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n    <span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">info</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Log a message with severity &#39;INFO&#39; on the root logger. If the logger has</span>\n<span class=\"sd\">    no handlers, call basicConfig() to add a console handler with a pre-defined</span>\n<span class=\"sd\">    format.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"n\">basicConfig</span><span class=\"p\">()</span>\n    <span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">info</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">debug</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Log a message with severity &#39;DEBUG&#39; on the root logger. If the logger has</span>\n<span class=\"sd\">    no handlers, call basicConfig() to add a console handler with a pre-defined</span>\n<span class=\"sd\">    format.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"n\">basicConfig</span><span class=\"p\">()</span>\n    <span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">debug</span><span class=\"p\">(</span><span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">log</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Log &#39;msg % args&#39; with the integer severity &#39;level&#39; on the root logger. If</span>\n<span class=\"sd\">    the logger has no handlers, call basicConfig() to add a console handler</span>\n<span class=\"sd\">    with a pre-defined format.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"n\">basicConfig</span><span class=\"p\">()</span>\n    <span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">disable</span><span class=\"p\">(</span><span class=\"n\">level</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Disable all logging calls of severity &#39;level&#39; and below.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">root</span><span class=\"o\">.</span><span class=\"n\">manager</span><span class=\"o\">.</span><span class=\"n\">disable</span> <span class=\"o\">=</span> <span class=\"n\">level</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">shutdown</span><span class=\"p\">(</span><span class=\"n\">handlerList</span><span class=\"o\">=</span><span class=\"n\">_handlerList</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Perform any cleanup actions in the logging system (e.g. flushing</span>\n<span class=\"sd\">    buffers).</span>\n\n<span class=\"sd\">    Should be called at application exit.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">for</span> <span class=\"n\">wr</span> <span class=\"ow\">in</span> <span class=\"nb\">reversed</span><span class=\"p\">(</span><span class=\"n\">handlerList</span><span class=\"p\">[:]):</span>\n        <span class=\"c1\">#errors might occur, for example, if files are locked</span>\n        <span class=\"c1\">#we just ignore them if raiseExceptions is not set</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">h</span> <span class=\"o\">=</span> <span class=\"n\">wr</span><span class=\"p\">()</span>\n            <span class=\"k\">if</span> <span class=\"n\">h</span><span class=\"p\">:</span>\n                <span class=\"k\">try</span><span class=\"p\">:</span>\n                    <span class=\"n\">h</span><span class=\"o\">.</span><span class=\"n\">acquire</span><span class=\"p\">()</span>\n                    <span class=\"n\">h</span><span class=\"o\">.</span><span class=\"n\">flush</span><span class=\"p\">()</span>\n                    <span class=\"n\">h</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n                <span class=\"k\">except</span> <span class=\"p\">(</span><span class=\"ne\">OSError</span><span class=\"p\">,</span> <span class=\"ne\">ValueError</span><span class=\"p\">):</span>\n                    <span class=\"c1\"># Ignore errors which might be caused</span>\n                    <span class=\"c1\"># because handlers have been closed but</span>\n                    <span class=\"c1\"># references to them are still around at</span>\n                    <span class=\"c1\"># application exit.</span>\n                    <span class=\"k\">pass</span>\n                <span class=\"k\">finally</span><span class=\"p\">:</span>\n                    <span class=\"n\">h</span><span class=\"o\">.</span><span class=\"n\">release</span><span class=\"p\">()</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span> <span class=\"c1\"># ignore everything, as we&#39;re shutting down</span>\n            <span class=\"k\">if</span> <span class=\"n\">raiseExceptions</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span>\n            <span class=\"c1\">#else, swallow</span>\n\n<span class=\"c1\">#Let&#39;s try and shutdown automatically on application exit...</span>\n<span class=\"kn\">import</span> <span class=\"nn\">atexit</span>\n<span class=\"n\">atexit</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">shutdown</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Null handler</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">NullHandler</span><span class=\"p\">(</span><span class=\"n\">Handler</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This handler does nothing. It&#39;s intended to be used to avoid the</span>\n<span class=\"sd\">    &quot;No handlers could be found for logger XXX&quot; one-off warning. This is</span>\n<span class=\"sd\">    important for library code, which may contain code to log events. If a user</span>\n<span class=\"sd\">    of the library does not configure logging, the one-off warning might be</span>\n<span class=\"sd\">    produced; to avoid this, the library developer simply needs to instantiate</span>\n<span class=\"sd\">    a NullHandler and add it to the top-level logger of the library module or</span>\n<span class=\"sd\">    package.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">handle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Stub.&quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">emit</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">record</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Stub.&quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">createLock</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lock</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n<span class=\"c1\"># Warnings integration</span>\n\n<span class=\"n\">_warnings_showwarning</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">_showwarning</span><span class=\"p\">(</span><span class=\"n\">message</span><span class=\"p\">,</span> <span class=\"n\">category</span><span class=\"p\">,</span> <span class=\"n\">filename</span><span class=\"p\">,</span> <span class=\"n\">lineno</span><span class=\"p\">,</span> <span class=\"n\">file</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">line</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Implementation of showwarnings which redirects to logging, which will first</span>\n<span class=\"sd\">    check to see if the file parameter is None. If a file is specified, it will</span>\n<span class=\"sd\">    delegate to the original warnings implementation of showwarning. Otherwise,</span>\n<span class=\"sd\">    it will call warnings.formatwarning and will log the resulting string to a</span>\n<span class=\"sd\">    warnings logger named &quot;py.warnings&quot; with level logging.WARNING.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">file</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">_warnings_showwarning</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">_warnings_showwarning</span><span class=\"p\">(</span><span class=\"n\">message</span><span class=\"p\">,</span> <span class=\"n\">category</span><span class=\"p\">,</span> <span class=\"n\">filename</span><span class=\"p\">,</span> <span class=\"n\">lineno</span><span class=\"p\">,</span> <span class=\"n\">file</span><span class=\"p\">,</span> <span class=\"n\">line</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">formatwarning</span><span class=\"p\">(</span><span class=\"n\">message</span><span class=\"p\">,</span> <span class=\"n\">category</span><span class=\"p\">,</span> <span class=\"n\">filename</span><span class=\"p\">,</span> <span class=\"n\">lineno</span><span class=\"p\">,</span> <span class=\"n\">line</span><span class=\"p\">)</span>\n        <span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"s2\">&quot;py.warnings&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">handlers</span><span class=\"p\">:</span>\n            <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">addHandler</span><span class=\"p\">(</span><span class=\"n\">NullHandler</span><span class=\"p\">())</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"n\">s</span><span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">captureWarnings</span><span class=\"p\">(</span><span class=\"n\">capture</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If capture is true, redirect all warnings to the logging package.</span>\n<span class=\"sd\">    If capture is False, ensure that warnings are not redirected to logging</span>\n<span class=\"sd\">    but to their original destinations.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">global</span> <span class=\"n\">_warnings_showwarning</span>\n    <span class=\"k\">if</span> <span class=\"n\">capture</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">_warnings_showwarning</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">_warnings_showwarning</span> <span class=\"o\">=</span> <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">showwarning</span>\n            <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">showwarning</span> <span class=\"o\">=</span> <span class=\"n\">_showwarning</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">_warnings_showwarning</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">showwarning</span> <span class=\"o\">=</span> <span class=\"n\">_warnings_showwarning</span>\n            <span class=\"n\">_warnings_showwarning</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_modules/pathlib.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>pathlib &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"index.html\">Module code</a> &raquo;</li>\n        \n      <li>pathlib</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <h1>Source code for pathlib</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">fnmatch</span>\n<span class=\"kn\">import</span> <span class=\"nn\">functools</span>\n<span class=\"kn\">import</span> <span class=\"nn\">io</span>\n<span class=\"kn\">import</span> <span class=\"nn\">ntpath</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">import</span> <span class=\"nn\">posixpath</span>\n<span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"kn\">import</span> <span class=\"nn\">sys</span>\n<span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"k\">import</span> <span class=\"n\">Sequence</span>\n<span class=\"kn\">from</span> <span class=\"nn\">contextlib</span> <span class=\"k\">import</span> <span class=\"n\">contextmanager</span>\n<span class=\"kn\">from</span> <span class=\"nn\">errno</span> <span class=\"k\">import</span> <span class=\"n\">EINVAL</span><span class=\"p\">,</span> <span class=\"n\">ENOENT</span><span class=\"p\">,</span> <span class=\"n\">ENOTDIR</span>\n<span class=\"kn\">from</span> <span class=\"nn\">operator</span> <span class=\"k\">import</span> <span class=\"n\">attrgetter</span>\n<span class=\"kn\">from</span> <span class=\"nn\">stat</span> <span class=\"k\">import</span> <span class=\"n\">S_ISDIR</span><span class=\"p\">,</span> <span class=\"n\">S_ISLNK</span><span class=\"p\">,</span> <span class=\"n\">S_ISREG</span><span class=\"p\">,</span> <span class=\"n\">S_ISSOCK</span><span class=\"p\">,</span> <span class=\"n\">S_ISBLK</span><span class=\"p\">,</span> <span class=\"n\">S_ISCHR</span><span class=\"p\">,</span> <span class=\"n\">S_ISFIFO</span>\n<span class=\"kn\">from</span> <span class=\"nn\">urllib.parse</span> <span class=\"k\">import</span> <span class=\"n\">quote_from_bytes</span> <span class=\"k\">as</span> <span class=\"n\">urlquote_from_bytes</span>\n\n\n<span class=\"n\">supports_symlinks</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n<span class=\"k\">if</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;nt&#39;</span><span class=\"p\">:</span>\n    <span class=\"kn\">import</span> <span class=\"nn\">nt</span>\n    <span class=\"k\">if</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">getwindowsversion</span><span class=\"p\">()[:</span><span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">&gt;=</span> <span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">):</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">nt</span> <span class=\"k\">import</span> <span class=\"n\">_getfinalpathname</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">supports_symlinks</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">_getfinalpathname</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"n\">nt</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n\n<span class=\"n\">__all__</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;PurePath&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;PurePosixPath&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;PureWindowsPath&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;Path&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;PosixPath&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;WindowsPath&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n\n<span class=\"c1\">#</span>\n<span class=\"c1\"># Internals</span>\n<span class=\"c1\">#</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">_is_wildcard_pattern</span><span class=\"p\">(</span><span class=\"n\">pat</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Whether this pattern needs actual matching using fnmatch, or can</span>\n    <span class=\"c1\"># be looked up directly as a file.</span>\n    <span class=\"k\">return</span> <span class=\"s2\">&quot;*&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">pat</span> <span class=\"ow\">or</span> <span class=\"s2\">&quot;?&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">pat</span> <span class=\"ow\">or</span> <span class=\"s2\">&quot;[&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">pat</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_Flavour</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;A flavour implements a particular (platform-specific) set of path</span>\n<span class=\"sd\">    semantics.&quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">join</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep</span><span class=\"o\">.</span><span class=\"n\">join</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">parse_parts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">):</span>\n        <span class=\"n\">parsed</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"n\">sep</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep</span>\n        <span class=\"n\">altsep</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">altsep</span>\n        <span class=\"n\">drv</span> <span class=\"o\">=</span> <span class=\"n\">root</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"n\">it</span> <span class=\"o\">=</span> <span class=\"nb\">reversed</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">part</span> <span class=\"ow\">in</span> <span class=\"n\">it</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">part</span><span class=\"p\">:</span>\n                <span class=\"k\">continue</span>\n            <span class=\"k\">if</span> <span class=\"n\">altsep</span><span class=\"p\">:</span>\n                <span class=\"n\">part</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"n\">altsep</span><span class=\"p\">,</span> <span class=\"n\">sep</span><span class=\"p\">)</span>\n            <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">rel</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">splitroot</span><span class=\"p\">(</span><span class=\"n\">part</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">sep</span> <span class=\"ow\">in</span> <span class=\"n\">rel</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">reversed</span><span class=\"p\">(</span><span class=\"n\">rel</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"n\">sep</span><span class=\"p\">)):</span>\n                    <span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"ow\">and</span> <span class=\"n\">x</span> <span class=\"o\">!=</span> <span class=\"s1\">&#39;.&#39;</span><span class=\"p\">:</span>\n                        <span class=\"n\">parsed</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">intern</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">))</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">rel</span> <span class=\"ow\">and</span> <span class=\"n\">rel</span> <span class=\"o\">!=</span> <span class=\"s1\">&#39;.&#39;</span><span class=\"p\">:</span>\n                    <span class=\"n\">parsed</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">intern</span><span class=\"p\">(</span><span class=\"n\">rel</span><span class=\"p\">))</span>\n            <span class=\"k\">if</span> <span class=\"n\">drv</span> <span class=\"ow\">or</span> <span class=\"n\">root</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">drv</span><span class=\"p\">:</span>\n                    <span class=\"c1\"># If no drive is present, try to find one in the previous</span>\n                    <span class=\"c1\"># parts. This makes the result of parsing e.g.</span>\n                    <span class=\"c1\"># (&quot;C:&quot;, &quot;/&quot;, &quot;a&quot;) reasonably intuitive.</span>\n                    <span class=\"k\">for</span> <span class=\"n\">part</span> <span class=\"ow\">in</span> <span class=\"n\">it</span><span class=\"p\">:</span>\n                        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">part</span><span class=\"p\">:</span>\n                            <span class=\"k\">continue</span>\n                        <span class=\"k\">if</span> <span class=\"n\">altsep</span><span class=\"p\">:</span>\n                            <span class=\"n\">part</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"n\">altsep</span><span class=\"p\">,</span> <span class=\"n\">sep</span><span class=\"p\">)</span>\n                        <span class=\"n\">drv</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">splitroot</span><span class=\"p\">(</span><span class=\"n\">part</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n                        <span class=\"k\">if</span> <span class=\"n\">drv</span><span class=\"p\">:</span>\n                            <span class=\"k\">break</span>\n                <span class=\"k\">break</span>\n        <span class=\"k\">if</span> <span class=\"n\">drv</span> <span class=\"ow\">or</span> <span class=\"n\">root</span><span class=\"p\">:</span>\n            <span class=\"n\">parsed</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">drv</span> <span class=\"o\">+</span> <span class=\"n\">root</span><span class=\"p\">)</span>\n        <span class=\"n\">parsed</span><span class=\"o\">.</span><span class=\"n\">reverse</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parsed</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">join_parsed_parts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">,</span> <span class=\"n\">drv2</span><span class=\"p\">,</span> <span class=\"n\">root2</span><span class=\"p\">,</span> <span class=\"n\">parts2</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Join the two paths represented by the respective</span>\n<span class=\"sd\">        (drive, root, parts) tuples.  Return a new (drive, root, parts) tuple.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"n\">root2</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">drv2</span> <span class=\"ow\">and</span> <span class=\"n\">drv</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root2</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"n\">drv</span> <span class=\"o\">+</span> <span class=\"n\">root2</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">parts2</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:]</span>\n        <span class=\"k\">elif</span> <span class=\"n\">drv2</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">drv2</span> <span class=\"o\">==</span> <span class=\"n\">drv</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">casefold</span><span class=\"p\">(</span><span class=\"n\">drv2</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">casefold</span><span class=\"p\">(</span><span class=\"n\">drv</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Same drive =&gt; second path is relative to the first</span>\n                <span class=\"k\">return</span> <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span> <span class=\"o\">+</span> <span class=\"n\">parts2</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Second path is non-anchored (common case)</span>\n            <span class=\"k\">return</span> <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span> <span class=\"o\">+</span> <span class=\"n\">parts2</span>\n        <span class=\"k\">return</span> <span class=\"n\">drv2</span><span class=\"p\">,</span> <span class=\"n\">root2</span><span class=\"p\">,</span> <span class=\"n\">parts2</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_WindowsFlavour</span><span class=\"p\">(</span><span class=\"n\">_Flavour</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Reference for Windows paths can be found at</span>\n    <span class=\"c1\"># http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx</span>\n\n    <span class=\"n\">sep</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\\\</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">altsep</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;/&#39;</span>\n    <span class=\"n\">has_drv</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">pathmod</span> <span class=\"o\">=</span> <span class=\"n\">ntpath</span>\n\n    <span class=\"n\">is_supported</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;nt&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">drive_letters</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"nb\">chr</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">),</span> <span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"s1\">&#39;z&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">))</span> <span class=\"o\">|</span>\n        <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"nb\">chr</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"s1\">&#39;A&#39;</span><span class=\"p\">),</span> <span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"s1\">&#39;Z&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">ext_namespace_prefix</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\\\\\\\</span><span class=\"s1\">?</span><span class=\"se\">\\\\</span><span class=\"s1\">&#39;</span>\n\n    <span class=\"n\">reserved_names</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"p\">{</span><span class=\"s1\">&#39;CON&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;PRN&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;AUX&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;NUL&#39;</span><span class=\"p\">}</span> <span class=\"o\">|</span>\n        <span class=\"p\">{</span><span class=\"s1\">&#39;COM</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"n\">i</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">)}</span> <span class=\"o\">|</span>\n        <span class=\"p\">{</span><span class=\"s1\">&#39;LPT</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"n\">i</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">)}</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"c1\"># Interesting findings about extended paths:</span>\n    <span class=\"c1\"># - &#39;\\\\?\\c:\\a&#39;, &#39;//?/c:\\a&#39; and &#39;//?/c:/a&#39; are all supported</span>\n    <span class=\"c1\">#   but &#39;\\\\?\\c:/a&#39; is not</span>\n    <span class=\"c1\"># - extended paths are always absolute; &quot;relative&quot; extended paths will</span>\n    <span class=\"c1\">#   fail.</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">splitroot</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">part</span><span class=\"p\">,</span> <span class=\"n\">sep</span><span class=\"o\">=</span><span class=\"n\">sep</span><span class=\"p\">):</span>\n        <span class=\"n\">first</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">:</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"n\">second</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">second</span> <span class=\"o\">==</span> <span class=\"n\">sep</span> <span class=\"ow\">and</span> <span class=\"n\">first</span> <span class=\"o\">==</span> <span class=\"n\">sep</span><span class=\"p\">):</span>\n            <span class=\"c1\"># XXX extended paths should also disable the collapsing of &quot;.&quot;</span>\n            <span class=\"c1\"># components (according to MSDN docs).</span>\n            <span class=\"n\">prefix</span><span class=\"p\">,</span> <span class=\"n\">part</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_split_extended_path</span><span class=\"p\">(</span><span class=\"n\">part</span><span class=\"p\">)</span>\n            <span class=\"n\">first</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">:</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n            <span class=\"n\">second</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">prefix</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"n\">third</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">:</span><span class=\"mi\">3</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">second</span> <span class=\"o\">==</span> <span class=\"n\">sep</span> <span class=\"ow\">and</span> <span class=\"n\">first</span> <span class=\"o\">==</span> <span class=\"n\">sep</span> <span class=\"ow\">and</span> <span class=\"n\">third</span> <span class=\"o\">!=</span> <span class=\"n\">sep</span><span class=\"p\">):</span>\n            <span class=\"c1\"># is a UNC path:</span>\n            <span class=\"c1\"># vvvvvvvvvvvvvvvvvvvvv root</span>\n            <span class=\"c1\"># \\\\machine\\mountpoint\\directory\\etc\\...</span>\n            <span class=\"c1\">#            directory ^^^^^^^^^^^^^^</span>\n            <span class=\"n\">index</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">sep</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">index</span> <span class=\"o\">!=</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">index2</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">sep</span><span class=\"p\">,</span> <span class=\"n\">index</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n                <span class=\"c1\"># a UNC path can&#39;t have two slashes in a row</span>\n                <span class=\"c1\"># (after the initial two)</span>\n                <span class=\"k\">if</span> <span class=\"n\">index2</span> <span class=\"o\">!=</span> <span class=\"n\">index</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                    <span class=\"k\">if</span> <span class=\"n\">index2</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">:</span>\n                        <span class=\"n\">index2</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">part</span><span class=\"p\">)</span>\n                    <span class=\"k\">if</span> <span class=\"n\">prefix</span><span class=\"p\">:</span>\n                        <span class=\"k\">return</span> <span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"n\">part</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"n\">index2</span><span class=\"p\">],</span> <span class=\"n\">sep</span><span class=\"p\">,</span> <span class=\"n\">part</span><span class=\"p\">[</span><span class=\"n\">index2</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">:]</span>\n                    <span class=\"k\">else</span><span class=\"p\">:</span>\n                        <span class=\"k\">return</span> <span class=\"n\">part</span><span class=\"p\">[:</span><span class=\"n\">index2</span><span class=\"p\">],</span> <span class=\"n\">sep</span><span class=\"p\">,</span> <span class=\"n\">part</span><span class=\"p\">[</span><span class=\"n\">index2</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">:]</span>\n        <span class=\"n\">drv</span> <span class=\"o\">=</span> <span class=\"n\">root</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"n\">second</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;:&#39;</span> <span class=\"ow\">and</span> <span class=\"n\">first</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">drive_letters</span><span class=\"p\">:</span>\n            <span class=\"n\">drv</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"p\">[:</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n            <span class=\"n\">part</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">:]</span>\n            <span class=\"n\">first</span> <span class=\"o\">=</span> <span class=\"n\">third</span>\n        <span class=\"k\">if</span> <span class=\"n\">first</span> <span class=\"o\">==</span> <span class=\"n\">sep</span><span class=\"p\">:</span>\n            <span class=\"n\">root</span> <span class=\"o\">=</span> <span class=\"n\">first</span>\n            <span class=\"n\">part</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"o\">.</span><span class=\"n\">lstrip</span><span class=\"p\">(</span><span class=\"n\">sep</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">part</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">casefold</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">s</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">s</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">casefold_parts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">parts</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">resolve</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">strict</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">s</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">getcwd</span><span class=\"p\">()</span>\n        <span class=\"n\">previous_s</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">if</span> <span class=\"n\">_getfinalpathname</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">strict</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_ext_to_normal</span><span class=\"p\">(</span><span class=\"n\">_getfinalpathname</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">))</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">tail_parts</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>  <span class=\"c1\"># End of the path after the first one not found</span>\n                <span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n                    <span class=\"k\">try</span><span class=\"p\">:</span>\n                        <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_ext_to_normal</span><span class=\"p\">(</span><span class=\"n\">_getfinalpathname</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">))</span>\n                    <span class=\"k\">except</span> <span class=\"ne\">FileNotFoundError</span><span class=\"p\">:</span>\n                        <span class=\"n\">previous_s</span> <span class=\"o\">=</span> <span class=\"n\">s</span>\n                        <span class=\"n\">s</span><span class=\"p\">,</span> <span class=\"n\">tail</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)</span>\n                        <span class=\"n\">tail_parts</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">tail</span><span class=\"p\">)</span>\n                        <span class=\"k\">if</span> <span class=\"n\">previous_s</span> <span class=\"o\">==</span> <span class=\"n\">s</span><span class=\"p\">:</span>\n                            <span class=\"k\">return</span> <span class=\"n\">path</span>\n                    <span class=\"k\">else</span><span class=\"p\">:</span>\n                        <span class=\"k\">return</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"nb\">reversed</span><span class=\"p\">(</span><span class=\"n\">tail_parts</span><span class=\"p\">))</span>\n        <span class=\"c1\"># Means fallback on absolute</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_split_extended_path</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">s</span><span class=\"p\">,</span> <span class=\"n\">ext_prefix</span><span class=\"o\">=</span><span class=\"n\">ext_namespace_prefix</span><span class=\"p\">):</span>\n        <span class=\"n\">prefix</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"n\">s</span><span class=\"o\">.</span><span class=\"n\">startswith</span><span class=\"p\">(</span><span class=\"n\">ext_prefix</span><span class=\"p\">):</span>\n            <span class=\"n\">prefix</span> <span class=\"o\">=</span> <span class=\"n\">s</span><span class=\"p\">[:</span><span class=\"mi\">4</span><span class=\"p\">]</span>\n            <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">:]</span>\n            <span class=\"k\">if</span> <span class=\"n\">s</span><span class=\"o\">.</span><span class=\"n\">startswith</span><span class=\"p\">(</span><span class=\"s1\">&#39;UNC</span><span class=\"se\">\\\\</span><span class=\"s1\">&#39;</span><span class=\"p\">):</span>\n                <span class=\"n\">prefix</span> <span class=\"o\">+=</span> <span class=\"n\">s</span><span class=\"p\">[:</span><span class=\"mi\">3</span><span class=\"p\">]</span>\n                <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\\\</span><span class=\"s1\">&#39;</span> <span class=\"o\">+</span> <span class=\"n\">s</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">:]</span>\n        <span class=\"k\">return</span> <span class=\"n\">prefix</span><span class=\"p\">,</span> <span class=\"n\">s</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_ext_to_normal</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">s</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Turn back an extended path into a normal DOS-like path</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_split_extended_path</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_reserved</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">):</span>\n        <span class=\"c1\"># NOTE: the rules for reserved names seem somewhat complicated</span>\n        <span class=\"c1\"># (e.g. r&quot;..\\NUL&quot; is reserved but not r&quot;foo\\NUL&quot;).</span>\n        <span class=\"c1\"># We err on the side of caution and return True for paths which are</span>\n        <span class=\"c1\"># not considered reserved by Windows.</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">parts</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">if</span> <span class=\"n\">parts</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">startswith</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\\\\\\\</span><span class=\"s1\">&#39;</span><span class=\"p\">):</span>\n            <span class=\"c1\"># UNC paths are never reserved</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"n\">parts</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">()</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reserved_names</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">make_uri</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Under Windows, file URIs use the UTF-8 encoding.</span>\n        <span class=\"n\">drive</span> <span class=\"o\">=</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">drive</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">drive</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">2</span> <span class=\"ow\">and</span> <span class=\"n\">drive</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;:&#39;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># It&#39;s a path on a local drive =&gt; &#39;file:///c:/a/b&#39;</span>\n            <span class=\"n\">rest</span> <span class=\"o\">=</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">as_posix</span><span class=\"p\">()[</span><span class=\"mi\">2</span><span class=\"p\">:]</span><span class=\"o\">.</span><span class=\"n\">lstrip</span><span class=\"p\">(</span><span class=\"s1\">&#39;/&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;file:///</span><span class=\"si\">%s</span><span class=\"s1\">/</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n                <span class=\"n\">drive</span><span class=\"p\">,</span> <span class=\"n\">urlquote_from_bytes</span><span class=\"p\">(</span><span class=\"n\">rest</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># It&#39;s a path on a network drive =&gt; &#39;file://host/share/a/b&#39;</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;file:&#39;</span> <span class=\"o\">+</span> <span class=\"n\">urlquote_from_bytes</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">as_posix</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">gethomedir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">username</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;HOME&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">:</span>\n            <span class=\"n\">userhome</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s1\">&#39;HOME&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"s1\">&#39;USERPROFILE&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">:</span>\n            <span class=\"n\">userhome</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s1\">&#39;USERPROFILE&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"s1\">&#39;HOMEPATH&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">:</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">drv</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s1\">&#39;HOMEDRIVE&#39;</span><span class=\"p\">]</span>\n            <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n                <span class=\"n\">drv</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n            <span class=\"n\">userhome</span> <span class=\"o\">=</span> <span class=\"n\">drv</span> <span class=\"o\">+</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s1\">&#39;HOMEPATH&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">RuntimeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Can&#39;t determine home directory&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">username</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Try to guess user home directory.  By default all users</span>\n            <span class=\"c1\"># directories are located in the same place and are named by</span>\n            <span class=\"c1\"># corresponding usernames.  If current user home directory points</span>\n            <span class=\"c1\"># to nonstandard place, this guess is likely wrong.</span>\n            <span class=\"k\">if</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s1\">&#39;USERNAME&#39;</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"n\">username</span><span class=\"p\">:</span>\n                <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">parse_parts</span><span class=\"p\">((</span><span class=\"n\">userhome</span><span class=\"p\">,))</span>\n                <span class=\"k\">if</span> <span class=\"n\">parts</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s1\">&#39;USERNAME&#39;</span><span class=\"p\">]:</span>\n                    <span class=\"k\">raise</span> <span class=\"ne\">RuntimeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Can&#39;t determine home directory &quot;</span>\n                                       <span class=\"s2\">&quot;for </span><span class=\"si\">%r</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">username</span><span class=\"p\">)</span>\n                <span class=\"n\">parts</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">username</span>\n                <span class=\"k\">if</span> <span class=\"n\">drv</span> <span class=\"ow\">or</span> <span class=\"n\">root</span><span class=\"p\">:</span>\n                    <span class=\"n\">userhome</span> <span class=\"o\">=</span> <span class=\"n\">drv</span> <span class=\"o\">+</span> <span class=\"n\">root</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:])</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">userhome</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">userhome</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">_PosixFlavour</span><span class=\"p\">(</span><span class=\"n\">_Flavour</span><span class=\"p\">):</span>\n    <span class=\"n\">sep</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;/&#39;</span>\n    <span class=\"n\">altsep</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n    <span class=\"n\">has_drv</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">pathmod</span> <span class=\"o\">=</span> <span class=\"n\">posixpath</span>\n\n    <span class=\"n\">is_supported</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">!=</span> <span class=\"s1\">&#39;nt&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">splitroot</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">part</span><span class=\"p\">,</span> <span class=\"n\">sep</span><span class=\"o\">=</span><span class=\"n\">sep</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">part</span> <span class=\"ow\">and</span> <span class=\"n\">part</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"n\">sep</span><span class=\"p\">:</span>\n            <span class=\"n\">stripped_part</span> <span class=\"o\">=</span> <span class=\"n\">part</span><span class=\"o\">.</span><span class=\"n\">lstrip</span><span class=\"p\">(</span><span class=\"n\">sep</span><span class=\"p\">)</span>\n            <span class=\"c1\"># According to POSIX path resolution:</span>\n            <span class=\"c1\"># http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11</span>\n            <span class=\"c1\"># &quot;A pathname that begins with two successive slashes may be</span>\n            <span class=\"c1\"># interpreted in an implementation-defined manner, although more</span>\n            <span class=\"c1\"># than two leading slashes shall be treated as a single slash&quot;.</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">part</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">stripped_part</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"n\">sep</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">stripped_part</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"n\">sep</span><span class=\"p\">,</span> <span class=\"n\">stripped_part</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"n\">part</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">casefold</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">s</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">s</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">casefold_parts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">parts</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">resolve</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">strict</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"n\">sep</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">sep</span>\n        <span class=\"n\">accessor</span> <span class=\"o\">=</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">_accessor</span>\n        <span class=\"n\">seen</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n        <span class=\"k\">def</span> <span class=\"nf\">_resolve</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">rest</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">rest</span><span class=\"o\">.</span><span class=\"n\">startswith</span><span class=\"p\">(</span><span class=\"n\">sep</span><span class=\"p\">):</span>\n                <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n\n            <span class=\"k\">for</span> <span class=\"n\">name</span> <span class=\"ow\">in</span> <span class=\"n\">rest</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"n\">sep</span><span class=\"p\">):</span>\n                <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">name</span> <span class=\"ow\">or</span> <span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;.&#39;</span><span class=\"p\">:</span>\n                    <span class=\"c1\"># current dir</span>\n                    <span class=\"k\">continue</span>\n                <span class=\"k\">if</span> <span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;..&#39;</span><span class=\"p\">:</span>\n                    <span class=\"c1\"># parent dir</span>\n                    <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">_</span> <span class=\"o\">=</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">rpartition</span><span class=\"p\">(</span><span class=\"n\">sep</span><span class=\"p\">)</span>\n                    <span class=\"k\">continue</span>\n                <span class=\"n\">newpath</span> <span class=\"o\">=</span> <span class=\"n\">path</span> <span class=\"o\">+</span> <span class=\"n\">sep</span> <span class=\"o\">+</span> <span class=\"n\">name</span>\n                <span class=\"k\">if</span> <span class=\"n\">newpath</span> <span class=\"ow\">in</span> <span class=\"n\">seen</span><span class=\"p\">:</span>\n                    <span class=\"c1\"># Already seen this path</span>\n                    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">seen</span><span class=\"p\">[</span><span class=\"n\">newpath</span><span class=\"p\">]</span>\n                    <span class=\"k\">if</span> <span class=\"n\">path</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                        <span class=\"c1\"># use cached value</span>\n                        <span class=\"k\">continue</span>\n                    <span class=\"c1\"># The symlink is not resolved, so we must have a symlink loop.</span>\n                    <span class=\"k\">raise</span> <span class=\"ne\">RuntimeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Symlink loop from </span><span class=\"si\">%r</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">newpath</span><span class=\"p\">)</span>\n                <span class=\"c1\"># Resolve the symbolic link</span>\n                <span class=\"k\">try</span><span class=\"p\">:</span>\n                    <span class=\"n\">target</span> <span class=\"o\">=</span> <span class=\"n\">accessor</span><span class=\"o\">.</span><span class=\"n\">readlink</span><span class=\"p\">(</span><span class=\"n\">newpath</span><span class=\"p\">)</span>\n                <span class=\"k\">except</span> <span class=\"ne\">OSError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n                    <span class=\"k\">if</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">errno</span> <span class=\"o\">!=</span> <span class=\"n\">EINVAL</span> <span class=\"ow\">and</span> <span class=\"n\">strict</span><span class=\"p\">:</span>\n                        <span class=\"k\">raise</span>\n                    <span class=\"c1\"># Not a symlink, or non-strict mode. We just leave the path</span>\n                    <span class=\"c1\"># untouched.</span>\n                    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">newpath</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">seen</span><span class=\"p\">[</span><span class=\"n\">newpath</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span> <span class=\"c1\"># not resolved symlink</span>\n                    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">_resolve</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">target</span><span class=\"p\">)</span>\n                    <span class=\"n\">seen</span><span class=\"p\">[</span><span class=\"n\">newpath</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">path</span> <span class=\"c1\"># resolved symlink</span>\n\n            <span class=\"k\">return</span> <span class=\"n\">path</span>\n        <span class=\"c1\"># NOTE: according to POSIX, getcwd() cannot contain path components</span>\n        <span class=\"c1\"># which are symlinks.</span>\n        <span class=\"n\">base</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span> <span class=\"k\">if</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">is_absolute</span><span class=\"p\">()</span> <span class=\"k\">else</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">getcwd</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">_resolve</span><span class=\"p\">(</span><span class=\"n\">base</span><span class=\"p\">,</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">))</span> <span class=\"ow\">or</span> <span class=\"n\">sep</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_reserved</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">make_uri</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"c1\"># We represent the path using the local filesystem encoding,</span>\n        <span class=\"c1\"># for portability to other applications.</span>\n        <span class=\"n\">bpath</span> <span class=\"o\">=</span> <span class=\"nb\">bytes</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;file://&#39;</span> <span class=\"o\">+</span> <span class=\"n\">urlquote_from_bytes</span><span class=\"p\">(</span><span class=\"n\">bpath</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">gethomedir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">username</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">username</span><span class=\"p\">:</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s1\">&#39;HOME&#39;</span><span class=\"p\">]</span>\n            <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n                <span class=\"kn\">import</span> <span class=\"nn\">pwd</span>\n                <span class=\"k\">return</span> <span class=\"n\">pwd</span><span class=\"o\">.</span><span class=\"n\">getpwuid</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">getuid</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">pw_dir</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"kn\">import</span> <span class=\"nn\">pwd</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">pwd</span><span class=\"o\">.</span><span class=\"n\">getpwnam</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">pw_dir</span>\n            <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">RuntimeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Can&#39;t determine home directory &quot;</span>\n                                   <span class=\"s2\">&quot;for </span><span class=\"si\">%r</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">username</span><span class=\"p\">)</span>\n\n\n<span class=\"n\">_windows_flavour</span> <span class=\"o\">=</span> <span class=\"n\">_WindowsFlavour</span><span class=\"p\">()</span>\n<span class=\"n\">_posix_flavour</span> <span class=\"o\">=</span> <span class=\"n\">_PosixFlavour</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_Accessor</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;An accessor implements a particular (system-specific or not) way of</span>\n<span class=\"sd\">    accessing paths on the filesystem.&quot;&quot;&quot;</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_NormalAccessor</span><span class=\"p\">(</span><span class=\"n\">_Accessor</span><span class=\"p\">):</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">strfunc</span><span class=\"p\">):</span>\n        <span class=\"nd\">@functools</span><span class=\"o\">.</span><span class=\"n\">wraps</span><span class=\"p\">(</span><span class=\"n\">strfunc</span><span class=\"p\">)</span>\n        <span class=\"k\">def</span> <span class=\"nf\">wrapped</span><span class=\"p\">(</span><span class=\"n\">pathobj</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">strfunc</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">pathobj</span><span class=\"p\">),</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">staticmethod</span><span class=\"p\">(</span><span class=\"n\">wrapped</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_wrap_binary_strfunc</span><span class=\"p\">(</span><span class=\"n\">strfunc</span><span class=\"p\">):</span>\n        <span class=\"nd\">@functools</span><span class=\"o\">.</span><span class=\"n\">wraps</span><span class=\"p\">(</span><span class=\"n\">strfunc</span><span class=\"p\">)</span>\n        <span class=\"k\">def</span> <span class=\"nf\">wrapped</span><span class=\"p\">(</span><span class=\"n\">pathobjA</span><span class=\"p\">,</span> <span class=\"n\">pathobjB</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">strfunc</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">pathobjA</span><span class=\"p\">),</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">pathobjB</span><span class=\"p\">),</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">staticmethod</span><span class=\"p\">(</span><span class=\"n\">wrapped</span><span class=\"p\">)</span>\n\n    <span class=\"n\">stat</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">)</span>\n\n    <span class=\"n\">lstat</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">lstat</span><span class=\"p\">)</span>\n\n    <span class=\"nb\">open</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">)</span>\n\n    <span class=\"n\">listdir</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">listdir</span><span class=\"p\">)</span>\n\n    <span class=\"n\">scandir</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">scandir</span><span class=\"p\">)</span>\n\n    <span class=\"n\">chmod</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">chmod</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"p\">,</span> <span class=\"s2\">&quot;lchmod&quot;</span><span class=\"p\">):</span>\n        <span class=\"n\">lchmod</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">lchmod</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">def</span> <span class=\"nf\">lchmod</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">pathobj</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;lchmod() not available on this system&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">mkdir</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">mkdir</span><span class=\"p\">)</span>\n\n    <span class=\"n\">unlink</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">unlink</span><span class=\"p\">)</span>\n\n    <span class=\"n\">rmdir</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">rmdir</span><span class=\"p\">)</span>\n\n    <span class=\"n\">rename</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_binary_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">rename</span><span class=\"p\">)</span>\n\n    <span class=\"n\">replace</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_binary_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">nt</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">supports_symlinks</span><span class=\"p\">:</span>\n            <span class=\"n\">symlink</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_binary_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">symlink</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">def</span> <span class=\"nf\">symlink</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">target_is_directory</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;symlink() not available on this system&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Under POSIX, os.symlink() takes two args</span>\n        <span class=\"nd\">@staticmethod</span>\n        <span class=\"k\">def</span> <span class=\"nf\">symlink</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">target_is_directory</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">symlink</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">),</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">))</span>\n\n    <span class=\"n\">utime</span> <span class=\"o\">=</span> <span class=\"n\">_wrap_strfunc</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">utime</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Helper for resolve()</span>\n    <span class=\"k\">def</span> <span class=\"nf\">readlink</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">readlink</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span>\n\n\n<span class=\"n\">_normal_accessor</span> <span class=\"o\">=</span> <span class=\"n\">_NormalAccessor</span><span class=\"p\">()</span>\n\n\n<span class=\"c1\">#</span>\n<span class=\"c1\"># Globbing helpers</span>\n<span class=\"c1\">#</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">_make_selector</span><span class=\"p\">(</span><span class=\"n\">pattern_parts</span><span class=\"p\">):</span>\n    <span class=\"n\">pat</span> <span class=\"o\">=</span> <span class=\"n\">pattern_parts</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"n\">child_parts</span> <span class=\"o\">=</span> <span class=\"n\">pattern_parts</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:]</span>\n    <span class=\"k\">if</span> <span class=\"n\">pat</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;**&#39;</span><span class=\"p\">:</span>\n        <span class=\"bp\">cls</span> <span class=\"o\">=</span> <span class=\"n\">_RecursiveWildcardSelector</span>\n    <span class=\"k\">elif</span> <span class=\"s1\">&#39;**&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">pat</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Invalid pattern: &#39;**&#39; can only be an entire path component&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">_is_wildcard_pattern</span><span class=\"p\">(</span><span class=\"n\">pat</span><span class=\"p\">):</span>\n        <span class=\"bp\">cls</span> <span class=\"o\">=</span> <span class=\"n\">_WildcardSelector</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"bp\">cls</span> <span class=\"o\">=</span> <span class=\"n\">_PreciseSelector</span>\n    <span class=\"k\">return</span> <span class=\"bp\">cls</span><span class=\"p\">(</span><span class=\"n\">pat</span><span class=\"p\">,</span> <span class=\"n\">child_parts</span><span class=\"p\">)</span>\n\n<span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">functools</span><span class=\"p\">,</span> <span class=\"s2\">&quot;lru_cache&quot;</span><span class=\"p\">):</span>\n    <span class=\"n\">_make_selector</span> <span class=\"o\">=</span> <span class=\"n\">functools</span><span class=\"o\">.</span><span class=\"n\">lru_cache</span><span class=\"p\">()(</span><span class=\"n\">_make_selector</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_Selector</span><span class=\"p\">:</span>\n    <span class=\"sd\">&quot;&quot;&quot;A selector matches a specific glob pattern part against the children</span>\n<span class=\"sd\">    of a given path.&quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">child_parts</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">child_parts</span> <span class=\"o\">=</span> <span class=\"n\">child_parts</span>\n        <span class=\"k\">if</span> <span class=\"n\">child_parts</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">successor</span> <span class=\"o\">=</span> <span class=\"n\">_make_selector</span><span class=\"p\">(</span><span class=\"n\">child_parts</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dironly</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">successor</span> <span class=\"o\">=</span> <span class=\"n\">_TerminatingSelector</span><span class=\"p\">()</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dironly</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">select_from</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parent_path</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Iterate over all child paths of `parent_path` matched by this</span>\n<span class=\"sd\">        selector.  This can contain parent_path itself.&quot;&quot;&quot;</span>\n        <span class=\"n\">path_cls</span> <span class=\"o\">=</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">parent_path</span><span class=\"p\">)</span>\n        <span class=\"n\">is_dir</span> <span class=\"o\">=</span> <span class=\"n\">path_cls</span><span class=\"o\">.</span><span class=\"n\">is_dir</span>\n        <span class=\"n\">exists</span> <span class=\"o\">=</span> <span class=\"n\">path_cls</span><span class=\"o\">.</span><span class=\"n\">exists</span>\n        <span class=\"n\">scandir</span> <span class=\"o\">=</span> <span class=\"n\">parent_path</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">scandir</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">is_dir</span><span class=\"p\">(</span><span class=\"n\">parent_path</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"nb\">iter</span><span class=\"p\">([])</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_select_from</span><span class=\"p\">(</span><span class=\"n\">parent_path</span><span class=\"p\">,</span> <span class=\"n\">is_dir</span><span class=\"p\">,</span> <span class=\"n\">exists</span><span class=\"p\">,</span> <span class=\"n\">scandir</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_TerminatingSelector</span><span class=\"p\">:</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_select_from</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parent_path</span><span class=\"p\">,</span> <span class=\"n\">is_dir</span><span class=\"p\">,</span> <span class=\"n\">exists</span><span class=\"p\">,</span> <span class=\"n\">scandir</span><span class=\"p\">):</span>\n        <span class=\"k\">yield</span> <span class=\"n\">parent_path</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_PreciseSelector</span><span class=\"p\">(</span><span class=\"n\">_Selector</span><span class=\"p\">):</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">child_parts</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span>\n        <span class=\"n\">_Selector</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">child_parts</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_select_from</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parent_path</span><span class=\"p\">,</span> <span class=\"n\">is_dir</span><span class=\"p\">,</span> <span class=\"n\">exists</span><span class=\"p\">,</span> <span class=\"n\">scandir</span><span class=\"p\">):</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">parent_path</span><span class=\"o\">.</span><span class=\"n\">_make_child_relpath</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">is_dir</span> <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dironly</span> <span class=\"k\">else</span> <span class=\"n\">exists</span><span class=\"p\">)(</span><span class=\"n\">path</span><span class=\"p\">):</span>\n                <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">successor</span><span class=\"o\">.</span><span class=\"n\">_select_from</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">is_dir</span><span class=\"p\">,</span> <span class=\"n\">exists</span><span class=\"p\">,</span> <span class=\"n\">scandir</span><span class=\"p\">):</span>\n                    <span class=\"k\">yield</span> <span class=\"n\">p</span>\n        <span class=\"k\">except</span> <span class=\"ne\">PermissionError</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_WildcardSelector</span><span class=\"p\">(</span><span class=\"n\">_Selector</span><span class=\"p\">):</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">pat</span><span class=\"p\">,</span> <span class=\"n\">child_parts</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pat</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">compile</span><span class=\"p\">(</span><span class=\"n\">fnmatch</span><span class=\"o\">.</span><span class=\"n\">translate</span><span class=\"p\">(</span><span class=\"n\">pat</span><span class=\"p\">))</span>\n        <span class=\"n\">_Selector</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">child_parts</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_select_from</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parent_path</span><span class=\"p\">,</span> <span class=\"n\">is_dir</span><span class=\"p\">,</span> <span class=\"n\">exists</span><span class=\"p\">,</span> <span class=\"n\">scandir</span><span class=\"p\">):</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">cf</span> <span class=\"o\">=</span> <span class=\"n\">parent_path</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">casefold</span>\n            <span class=\"n\">entries</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">scandir</span><span class=\"p\">(</span><span class=\"n\">parent_path</span><span class=\"p\">))</span>\n            <span class=\"k\">for</span> <span class=\"n\">entry</span> <span class=\"ow\">in</span> <span class=\"n\">entries</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">dironly</span> <span class=\"ow\">or</span> <span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">is_dir</span><span class=\"p\">():</span>\n                    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">name</span>\n                    <span class=\"n\">casefolded</span> <span class=\"o\">=</span> <span class=\"n\">cf</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n                    <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pat</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"n\">casefolded</span><span class=\"p\">):</span>\n                        <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">parent_path</span><span class=\"o\">.</span><span class=\"n\">_make_child_relpath</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n                        <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">successor</span><span class=\"o\">.</span><span class=\"n\">_select_from</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">is_dir</span><span class=\"p\">,</span> <span class=\"n\">exists</span><span class=\"p\">,</span> <span class=\"n\">scandir</span><span class=\"p\">):</span>\n                            <span class=\"k\">yield</span> <span class=\"n\">p</span>\n        <span class=\"k\">except</span> <span class=\"ne\">PermissionError</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span>\n\n\n\n<span class=\"k\">class</span> <span class=\"nc\">_RecursiveWildcardSelector</span><span class=\"p\">(</span><span class=\"n\">_Selector</span><span class=\"p\">):</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">pat</span><span class=\"p\">,</span> <span class=\"n\">child_parts</span><span class=\"p\">):</span>\n        <span class=\"n\">_Selector</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">child_parts</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_iterate_directories</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parent_path</span><span class=\"p\">,</span> <span class=\"n\">is_dir</span><span class=\"p\">,</span> <span class=\"n\">scandir</span><span class=\"p\">):</span>\n        <span class=\"k\">yield</span> <span class=\"n\">parent_path</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">entries</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">scandir</span><span class=\"p\">(</span><span class=\"n\">parent_path</span><span class=\"p\">))</span>\n            <span class=\"k\">for</span> <span class=\"n\">entry</span> <span class=\"ow\">in</span> <span class=\"n\">entries</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">is_dir</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">is_symlink</span><span class=\"p\">():</span>\n                    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">parent_path</span><span class=\"o\">.</span><span class=\"n\">_make_child_relpath</span><span class=\"p\">(</span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)</span>\n                    <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_iterate_directories</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">is_dir</span><span class=\"p\">,</span> <span class=\"n\">scandir</span><span class=\"p\">):</span>\n                        <span class=\"k\">yield</span> <span class=\"n\">p</span>\n        <span class=\"k\">except</span> <span class=\"ne\">PermissionError</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_select_from</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parent_path</span><span class=\"p\">,</span> <span class=\"n\">is_dir</span><span class=\"p\">,</span> <span class=\"n\">exists</span><span class=\"p\">,</span> <span class=\"n\">scandir</span><span class=\"p\">):</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">yielded</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">()</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">successor_select</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">successor</span><span class=\"o\">.</span><span class=\"n\">_select_from</span>\n                <span class=\"k\">for</span> <span class=\"n\">starting_point</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_iterate_directories</span><span class=\"p\">(</span><span class=\"n\">parent_path</span><span class=\"p\">,</span> <span class=\"n\">is_dir</span><span class=\"p\">,</span> <span class=\"n\">scandir</span><span class=\"p\">):</span>\n                    <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">successor_select</span><span class=\"p\">(</span><span class=\"n\">starting_point</span><span class=\"p\">,</span> <span class=\"n\">is_dir</span><span class=\"p\">,</span> <span class=\"n\">exists</span><span class=\"p\">,</span> <span class=\"n\">scandir</span><span class=\"p\">):</span>\n                        <span class=\"k\">if</span> <span class=\"n\">p</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">yielded</span><span class=\"p\">:</span>\n                            <span class=\"k\">yield</span> <span class=\"n\">p</span>\n                            <span class=\"n\">yielded</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n            <span class=\"k\">finally</span><span class=\"p\">:</span>\n                <span class=\"n\">yielded</span><span class=\"o\">.</span><span class=\"n\">clear</span><span class=\"p\">()</span>\n        <span class=\"k\">except</span> <span class=\"ne\">PermissionError</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span>\n\n\n<span class=\"c1\">#</span>\n<span class=\"c1\"># Public API</span>\n<span class=\"c1\">#</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">_PathParents</span><span class=\"p\">(</span><span class=\"n\">Sequence</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;This object provides sequence-like access to the logical ancestors</span>\n<span class=\"sd\">    of a path.  Don&#39;t try to construct it yourself.&quot;&quot;&quot;</span>\n    <span class=\"vm\">__slots__</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;_pathcls&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_drv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_root&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_parts&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"c1\"># We don&#39;t store the instance to avoid reference cycles</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_pathcls</span> <span class=\"o\">=</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span> <span class=\"o\">=</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">_drv</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span> <span class=\"o\">=</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">_root</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span> <span class=\"o\">=</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">_parts</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__len__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__getitem__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">idx</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">idx</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span> <span class=\"ow\">or</span> <span class=\"n\">idx</span> <span class=\"o\">&gt;=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">IndexError</span><span class=\"p\">(</span><span class=\"n\">idx</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_pathcls</span><span class=\"o\">.</span><span class=\"n\">_from_parsed_parts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span><span class=\"p\">,</span>\n                                                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"n\">idx</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">])</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;&lt;</span><span class=\"si\">{}</span><span class=\"s2\">.parents&gt;&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_pathcls</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PurePath</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;Base class for manipulating paths without I/O.</span>\n\n<span class=\"sd\">    PurePath represents a filesystem path and offers operations which</span>\n<span class=\"sd\">    don&#39;t imply any actual filesystem I/O.  Depending on your system,</span>\n<span class=\"sd\">    instantiating a PurePath will return either a PurePosixPath or a</span>\n<span class=\"sd\">    PureWindowsPath object.  You can also instantiate either of these classes</span>\n<span class=\"sd\">    directly, regardless of your system.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"vm\">__slots__</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;_drv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_root&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_parts&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;_str&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_hash&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_pparts&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_cached_cparts&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__new__</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Construct a PurePath from one or several strings and or existing</span>\n<span class=\"sd\">        PurePath objects.  The strings and path objects are combined so as</span>\n<span class=\"sd\">        to yield a canonicalized path, which is incorporated into the</span>\n<span class=\"sd\">        new PurePath object.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">cls</span> <span class=\"ow\">is</span> <span class=\"n\">PurePath</span><span class=\"p\">:</span>\n            <span class=\"bp\">cls</span> <span class=\"o\">=</span> <span class=\"n\">PureWindowsPath</span> <span class=\"k\">if</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;nt&#39;</span> <span class=\"k\">else</span> <span class=\"n\">PurePosixPath</span>\n        <span class=\"k\">return</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_from_parts</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__reduce__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Using the parts tuple helps share interned path parts</span>\n        <span class=\"c1\"># when pickling related paths.</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__class__</span><span class=\"p\">,</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">))</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_parse_args</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">):</span>\n        <span class=\"c1\"># This is useful when you don&#39;t want to create an instance, just</span>\n        <span class=\"c1\"># canonicalize some constructor arguments.</span>\n        <span class=\"n\">parts</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">a</span> <span class=\"ow\">in</span> <span class=\"n\">args</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">PurePath</span><span class=\"p\">):</span>\n                <span class=\"n\">parts</span> <span class=\"o\">+=</span> <span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">_parts</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">fspath</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n                <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"nb\">str</span><span class=\"p\">):</span>\n                    <span class=\"c1\"># Force-cast str subclasses to str (issue #21127)</span>\n                    <span class=\"n\">parts</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">))</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span>\n                        <span class=\"s2\">&quot;argument should be a str object or an os.PathLike &quot;</span>\n                        <span class=\"s2\">&quot;object returning str, not </span><span class=\"si\">%r</span><span class=\"s2\">&quot;</span>\n                        <span class=\"o\">%</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">parse_parts</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_from_parts</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">init</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"c1\"># We need to call _parse_args on the instance, so as to get the</span>\n        <span class=\"c1\"># right flavour.</span>\n        <span class=\"bp\">self</span> <span class=\"o\">=</span> <span class=\"nb\">object</span><span class=\"o\">.</span><span class=\"fm\">__new__</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">)</span>\n        <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parse_args</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span> <span class=\"o\">=</span> <span class=\"n\">drv</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span> <span class=\"o\">=</span> <span class=\"n\">root</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span> <span class=\"o\">=</span> <span class=\"n\">parts</span>\n        <span class=\"k\">if</span> <span class=\"n\">init</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_init</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_from_parsed_parts</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">,</span> <span class=\"n\">init</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span> <span class=\"o\">=</span> <span class=\"nb\">object</span><span class=\"o\">.</span><span class=\"fm\">__new__</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span> <span class=\"o\">=</span> <span class=\"n\">drv</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span> <span class=\"o\">=</span> <span class=\"n\">root</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span> <span class=\"o\">=</span> <span class=\"n\">parts</span>\n        <span class=\"k\">if</span> <span class=\"n\">init</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_init</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_format_parsed_parts</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">drv</span> <span class=\"ow\">or</span> <span class=\"n\">root</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">drv</span> <span class=\"o\">+</span> <span class=\"n\">root</span> <span class=\"o\">+</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:])</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_init</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Overridden in concrete Path</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_make_child</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">):</span>\n        <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parse_args</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">)</span>\n        <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">join_parsed_parts</span><span class=\"p\">(</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">,</span> <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_from_parsed_parts</span><span class=\"p\">(</span><span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return the string representation of the path, suitable for</span>\n<span class=\"sd\">        passing to system calls.&quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_str</span>\n        <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_str</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_format_parsed_parts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span><span class=\"p\">,</span>\n                                                  <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"s1\">&#39;.&#39;</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_str</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__fspath__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">as_posix</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return the string representation of the path with forward (/)</span>\n<span class=\"sd\">        slashes.&quot;&quot;&quot;</span>\n        <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span>\n        <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">sep</span><span class=\"p\">,</span> <span class=\"s1\">&#39;/&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__bytes__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return the bytes representation of the path.  This is only</span>\n<span class=\"sd\">        recommended to use under Unix.&quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">fsencode</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">{}</span><span class=\"s2\">(</span><span class=\"si\">{!r}</span><span class=\"s2\">)&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__class__</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">as_posix</span><span class=\"p\">())</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">as_uri</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return the path as a &#39;file&#39; URI.&quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_absolute</span><span class=\"p\">():</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;relative path can&#39;t be expressed as a file URI&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">make_uri</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_cparts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Cached casefolded parts, for hashing and comparison</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_cached_cparts</span>\n        <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_cached_cparts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">casefold_parts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_cached_cparts</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__eq__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">PurePath</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"bp\">NotImplemented</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_cparts</span> <span class=\"o\">==</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">_cparts</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span> <span class=\"ow\">is</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">_flavour</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__hash__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_hash</span>\n        <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_hash</span> <span class=\"o\">=</span> <span class=\"nb\">hash</span><span class=\"p\">(</span><span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_cparts</span><span class=\"p\">))</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_hash</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__lt__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">PurePath</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">NotImplemented</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_cparts</span> <span class=\"o\">&lt;</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">_cparts</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__le__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">PurePath</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">NotImplemented</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_cparts</span> <span class=\"o\">&lt;=</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">_cparts</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__gt__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">PurePath</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">NotImplemented</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_cparts</span> <span class=\"o\">&gt;</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">_cparts</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__ge__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">PurePath</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">NotImplemented</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_cparts</span> <span class=\"o\">&gt;=</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">_cparts</span>\n\n    <span class=\"n\">drive</span> <span class=\"o\">=</span> <span class=\"nb\">property</span><span class=\"p\">(</span><span class=\"n\">attrgetter</span><span class=\"p\">(</span><span class=\"s1\">&#39;_drv&#39;</span><span class=\"p\">),</span>\n                     <span class=\"n\">doc</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;The drive prefix (letter or UNC path), if any.&quot;&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">root</span> <span class=\"o\">=</span> <span class=\"nb\">property</span><span class=\"p\">(</span><span class=\"n\">attrgetter</span><span class=\"p\">(</span><span class=\"s1\">&#39;_root&#39;</span><span class=\"p\">),</span>\n                    <span class=\"n\">doc</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;&quot;The root of the path, if any.&quot;&quot;&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">anchor</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;The concatenation of the drive and root, or &#39;&#39;.&quot;&quot;&quot;</span>\n        <span class=\"n\">anchor</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span>\n        <span class=\"k\">return</span> <span class=\"n\">anchor</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;The final path component, if any.&quot;&quot;&quot;</span>\n        <span class=\"n\">parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span><span class=\"p\">)</span> <span class=\"k\">else</span> <span class=\"mi\">0</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">return</span> <span class=\"n\">parts</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">suffix</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;The final component&#39;s last suffix, if any.&quot;&quot;&quot;</span>\n        <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n        <span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">rfind</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"mi\">0</span> <span class=\"o\">&lt;</span> <span class=\"n\">i</span> <span class=\"o\">&lt;</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">name</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">:]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">suffixes</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;A list of the final component&#39;s suffixes, if any.&quot;&quot;&quot;</span>\n        <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n        <span class=\"k\">if</span> <span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">endswith</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"p\">[]</span>\n        <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">lstrip</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"s1\">&#39;.&#39;</span> <span class=\"o\">+</span> <span class=\"n\">suffix</span> <span class=\"k\">for</span> <span class=\"n\">suffix</span> <span class=\"ow\">in</span> <span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">)[</span><span class=\"mi\">1</span><span class=\"p\">:]]</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">stem</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;The final path component, minus its last suffix.&quot;&quot;&quot;</span>\n        <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n        <span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"n\">name</span><span class=\"o\">.</span><span class=\"n\">rfind</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"mi\">0</span> <span class=\"o\">&lt;</span> <span class=\"n\">i</span> <span class=\"o\">&lt;</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">name</span><span class=\"p\">[:</span><span class=\"n\">i</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">name</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">with_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return a new path with the file name changed.&quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">%r</span><span class=\"s2\"> has an empty name&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,))</span>\n        <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">parse_parts</span><span class=\"p\">((</span><span class=\"n\">name</span><span class=\"p\">,))</span>\n        <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"ow\">not</span> <span class=\"n\">name</span> <span class=\"ow\">or</span> <span class=\"n\">name</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">sep</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">altsep</span><span class=\"p\">]</span>\n            <span class=\"ow\">or</span> <span class=\"n\">drv</span> <span class=\"ow\">or</span> <span class=\"n\">root</span> <span class=\"ow\">or</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"mi\">1</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Invalid name </span><span class=\"si\">%r</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_from_parsed_parts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span><span class=\"p\">,</span>\n                                       <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"n\">name</span><span class=\"p\">])</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">with_suffix</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">suffix</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return a new path with the file suffix changed.  If the path</span>\n<span class=\"sd\">        has no suffix, add given suffix.  If the given suffix is an empty</span>\n<span class=\"sd\">        string, remove the suffix from the path.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span>\n        <span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">sep</span> <span class=\"ow\">in</span> <span class=\"n\">suffix</span> <span class=\"ow\">or</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">altsep</span> <span class=\"ow\">and</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">altsep</span> <span class=\"ow\">in</span> <span class=\"n\">suffix</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Invalid suffix </span><span class=\"si\">%r</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">suffix</span><span class=\"p\">))</span>\n        <span class=\"k\">if</span> <span class=\"n\">suffix</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">suffix</span><span class=\"o\">.</span><span class=\"n\">startswith</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"n\">suffix</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;.&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Invalid suffix </span><span class=\"si\">%r</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">suffix</span><span class=\"p\">))</span>\n        <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">name</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">%r</span><span class=\"s2\"> has an empty name&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,))</span>\n        <span class=\"n\">old_suffix</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">suffix</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">old_suffix</span><span class=\"p\">:</span>\n            <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span> <span class=\"o\">+</span> <span class=\"n\">suffix</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">old_suffix</span><span class=\"p\">)]</span> <span class=\"o\">+</span> <span class=\"n\">suffix</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_from_parsed_parts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span><span class=\"p\">,</span>\n                                       <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"n\">name</span><span class=\"p\">])</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">relative_to</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">other</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return the relative path to another path identified by the passed</span>\n<span class=\"sd\">        arguments.  If the operation is not possible (because this is not</span>\n<span class=\"sd\">        a subpath of the other path), raise ValueError.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># For the purpose of this method, drive and root are considered</span>\n        <span class=\"c1\"># separate parts, i.e.:</span>\n        <span class=\"c1\">#   Path(&#39;c:/&#39;).relative_to(&#39;c:&#39;)  gives Path(&#39;/&#39;)</span>\n        <span class=\"c1\">#   Path(&#39;c:/&#39;).relative_to(&#39;/&#39;)   raise ValueError</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">other</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;need at least one argument&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span>\n        <span class=\"n\">drv</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span>\n        <span class=\"n\">root</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span>\n        <span class=\"k\">if</span> <span class=\"n\">root</span><span class=\"p\">:</span>\n            <span class=\"n\">abs_parts</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">parts</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">abs_parts</span> <span class=\"o\">=</span> <span class=\"n\">parts</span>\n        <span class=\"n\">to_drv</span><span class=\"p\">,</span> <span class=\"n\">to_root</span><span class=\"p\">,</span> <span class=\"n\">to_parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parse_args</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">to_root</span><span class=\"p\">:</span>\n            <span class=\"n\">to_abs_parts</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">to_drv</span><span class=\"p\">,</span> <span class=\"n\">to_root</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">to_parts</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">to_abs_parts</span> <span class=\"o\">=</span> <span class=\"n\">to_parts</span>\n        <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">to_abs_parts</span><span class=\"p\">)</span>\n        <span class=\"n\">cf</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">casefold_parts</span>\n        <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">root</span> <span class=\"ow\">or</span> <span class=\"n\">drv</span><span class=\"p\">)</span> <span class=\"k\">if</span> <span class=\"n\">n</span> <span class=\"o\">==</span> <span class=\"mi\">0</span> <span class=\"k\">else</span> <span class=\"n\">cf</span><span class=\"p\">(</span><span class=\"n\">abs_parts</span><span class=\"p\">[:</span><span class=\"n\">n</span><span class=\"p\">])</span> <span class=\"o\">!=</span> <span class=\"n\">cf</span><span class=\"p\">(</span><span class=\"n\">to_abs_parts</span><span class=\"p\">):</span>\n            <span class=\"n\">formatted</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_format_parsed_parts</span><span class=\"p\">(</span><span class=\"n\">to_drv</span><span class=\"p\">,</span> <span class=\"n\">to_root</span><span class=\"p\">,</span> <span class=\"n\">to_parts</span><span class=\"p\">)</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">{!r}</span><span class=\"s2\"> does not start with </span><span class=\"si\">{!r}</span><span class=\"s2\">&quot;</span>\n                             <span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">),</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">formatted</span><span class=\"p\">)))</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_from_parsed_parts</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"n\">root</span> <span class=\"k\">if</span> <span class=\"n\">n</span> <span class=\"o\">==</span> <span class=\"mi\">1</span> <span class=\"k\">else</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span>\n                                       <span class=\"n\">abs_parts</span><span class=\"p\">[</span><span class=\"n\">n</span><span class=\"p\">:])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">parts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;An object providing sequence-like access to the</span>\n<span class=\"sd\">        components in the filesystem path.&quot;&quot;&quot;</span>\n        <span class=\"c1\"># We cache the tuple to avoid building a new one each time .parts</span>\n        <span class=\"c1\"># is accessed.  XXX is this necessary?</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_pparts</span>\n        <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_pparts</span> <span class=\"o\">=</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_pparts</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">joinpath</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Combine this path with one or several arguments, and return a</span>\n<span class=\"sd\">        new path representing either a subpath (if all arguments are relative</span>\n<span class=\"sd\">        paths) or a totally different path (if one of the arguments is</span>\n<span class=\"sd\">        anchored).</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_child</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__truediv__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_child</span><span class=\"p\">((</span><span class=\"n\">key</span><span class=\"p\">,))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__rtruediv__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_from_parts</span><span class=\"p\">([</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">parent</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;The logical parent of the path.&quot;&quot;&quot;</span>\n        <span class=\"n\">drv</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span>\n        <span class=\"n\">root</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span>\n        <span class=\"n\">parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">1</span> <span class=\"ow\">and</span> <span class=\"p\">(</span><span class=\"n\">drv</span> <span class=\"ow\">or</span> <span class=\"n\">root</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_from_parsed_parts</span><span class=\"p\">(</span><span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">parents</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;A sequence of this path&#39;s logical parents.&quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">_PathParents</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_absolute</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;True if the path is absolute (has both a root and, if applicable,</span>\n<span class=\"sd\">        a drive).&quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">has_drv</span> <span class=\"ow\">or</span> <span class=\"nb\">bool</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_reserved</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return True if the path contains one of the special names reserved</span>\n<span class=\"sd\">        by the system, if any.&quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">is_reserved</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">match</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">path_pattern</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return True if this path matches the given pattern.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">cf</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">casefold</span>\n        <span class=\"n\">path_pattern</span> <span class=\"o\">=</span> <span class=\"n\">cf</span><span class=\"p\">(</span><span class=\"n\">path_pattern</span><span class=\"p\">)</span>\n        <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">pat_parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">parse_parts</span><span class=\"p\">((</span><span class=\"n\">path_pattern</span><span class=\"p\">,))</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">pat_parts</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;empty pattern&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">drv</span> <span class=\"ow\">and</span> <span class=\"n\">drv</span> <span class=\"o\">!=</span> <span class=\"n\">cf</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">if</span> <span class=\"n\">root</span> <span class=\"ow\">and</span> <span class=\"n\">root</span> <span class=\"o\">!=</span> <span class=\"n\">cf</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"n\">parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_cparts</span>\n        <span class=\"k\">if</span> <span class=\"n\">drv</span> <span class=\"ow\">or</span> <span class=\"n\">root</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pat_parts</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">):</span>\n                <span class=\"k\">return</span> <span class=\"kc\">False</span>\n            <span class=\"n\">pat_parts</span> <span class=\"o\">=</span> <span class=\"n\">pat_parts</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:]</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pat_parts</span><span class=\"p\">)</span> <span class=\"o\">&gt;</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">for</span> <span class=\"n\">part</span><span class=\"p\">,</span> <span class=\"n\">pat</span> <span class=\"ow\">in</span> <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"nb\">reversed</span><span class=\"p\">(</span><span class=\"n\">parts</span><span class=\"p\">),</span> <span class=\"nb\">reversed</span><span class=\"p\">(</span><span class=\"n\">pat_parts</span><span class=\"p\">)):</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">fnmatch</span><span class=\"o\">.</span><span class=\"n\">fnmatchcase</span><span class=\"p\">(</span><span class=\"n\">part</span><span class=\"p\">,</span> <span class=\"n\">pat</span><span class=\"p\">):</span>\n                <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n\n<span class=\"c1\"># Can&#39;t subclass os.PathLike from PurePath and keep the constructor</span>\n<span class=\"c1\"># optimizations in PurePath._parse_args().</span>\n<span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">PathLike</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">PurePath</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PurePosixPath</span><span class=\"p\">(</span><span class=\"n\">PurePath</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;PurePath subclass for non-Windows systems.</span>\n\n<span class=\"sd\">    On a POSIX system, instantiating a PurePath should return this object.</span>\n<span class=\"sd\">    However, you can also instantiate it directly on any system.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">_flavour</span> <span class=\"o\">=</span> <span class=\"n\">_posix_flavour</span>\n    <span class=\"vm\">__slots__</span> <span class=\"o\">=</span> <span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PureWindowsPath</span><span class=\"p\">(</span><span class=\"n\">PurePath</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;PurePath subclass for Windows systems.</span>\n\n<span class=\"sd\">    On a Windows system, instantiating a PurePath should return this object.</span>\n<span class=\"sd\">    However, you can also instantiate it directly on any system.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">_flavour</span> <span class=\"o\">=</span> <span class=\"n\">_windows_flavour</span>\n    <span class=\"vm\">__slots__</span> <span class=\"o\">=</span> <span class=\"p\">()</span>\n\n\n<span class=\"c1\"># Filesystem-accessing classes</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Path</span><span class=\"p\">(</span><span class=\"n\">PurePath</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;PurePath subclass that can make system calls.</span>\n\n<span class=\"sd\">    Path represents a filesystem path but unlike PurePath, also offers</span>\n<span class=\"sd\">    methods to do system calls on path objects. Depending on your system,</span>\n<span class=\"sd\">    instantiating a Path will return either a PosixPath or a WindowsPath</span>\n<span class=\"sd\">    object. You can also instantiate a PosixPath or WindowsPath directly,</span>\n<span class=\"sd\">    but cannot instantiate a WindowsPath on a POSIX system or vice versa.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"vm\">__slots__</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;_accessor&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;_closed&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__new__</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">cls</span> <span class=\"ow\">is</span> <span class=\"n\">Path</span><span class=\"p\">:</span>\n            <span class=\"bp\">cls</span> <span class=\"o\">=</span> <span class=\"n\">WindowsPath</span> <span class=\"k\">if</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;nt&#39;</span> <span class=\"k\">else</span> <span class=\"n\">PosixPath</span>\n        <span class=\"bp\">self</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_from_parts</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">init</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">is_supported</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;cannot instantiate </span><span class=\"si\">%r</span><span class=\"s2\"> on your system&quot;</span>\n                                      <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">,))</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_init</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_init</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span>\n              <span class=\"c1\"># Private non-constructor arguments</span>\n              <span class=\"n\">template</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n              <span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"k\">if</span> <span class=\"n\">template</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span> <span class=\"o\">=</span> <span class=\"n\">template</span><span class=\"o\">.</span><span class=\"n\">_accessor</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span> <span class=\"o\">=</span> <span class=\"n\">_normal_accessor</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_make_child_relpath</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">part</span><span class=\"p\">):</span>\n        <span class=\"c1\"># This is an optimization used for dir walking.  `part` must be</span>\n        <span class=\"c1\"># a single part relative to this path.</span>\n        <span class=\"n\">parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"n\">part</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_from_parsed_parts</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span><span class=\"p\">,</span> <span class=\"n\">parts</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__enter__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__exit__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">t</span><span class=\"p\">,</span> <span class=\"n\">v</span><span class=\"p\">,</span> <span class=\"n\">tb</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_raise_closed</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;I/O operation on closed path&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_opener</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">flags</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"mo\">0o666</span><span class=\"p\">):</span>\n        <span class=\"c1\"># A stub for the opener argument to built-in open()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">flags</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_raw_open</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">flags</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"mo\">0o777</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Open the file pointed by this path and return a file descriptor,</span>\n<span class=\"sd\">        as os.open() does.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">flags</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Public API</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span> <span class=\"nf\">cwd</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return a new path pointing to the current working directory</span>\n<span class=\"sd\">        (as returned by os.getcwd()).</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">cls</span><span class=\"p\">(</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">getcwd</span><span class=\"p\">())</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span> <span class=\"nf\">home</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return a new path pointing to the user&#39;s home directory (as</span>\n<span class=\"sd\">        returned by os.path.expanduser(&#39;~&#39;)).</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">cls</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">gethomedir</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">samefile</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other_path</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return whether other_path is the same or not as this file</span>\n<span class=\"sd\">        (as returned by os.path.samefile()).</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">st</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">other_st</span> <span class=\"o\">=</span> <span class=\"n\">other_path</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span>\n        <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n            <span class=\"n\">other_st</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">(</span><span class=\"n\">other_path</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">samestat</span><span class=\"p\">(</span><span class=\"n\">st</span><span class=\"p\">,</span> <span class=\"n\">other_st</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">iterdir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Iterate over the files in this directory.  Does not yield any</span>\n<span class=\"sd\">        result for the special paths &#39;.&#39; and &#39;..&#39;.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"k\">for</span> <span class=\"n\">name</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">listdir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">name</span> <span class=\"ow\">in</span> <span class=\"p\">{</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;..&#39;</span><span class=\"p\">}:</span>\n                <span class=\"c1\"># Yielding a path object for these makes little sense</span>\n                <span class=\"k\">continue</span>\n            <span class=\"k\">yield</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_make_child_relpath</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">glob</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">pattern</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Iterate over this subtree and yield all existing files (of any</span>\n<span class=\"sd\">        kind, including directories) matching the given pattern.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">pattern</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Unacceptable pattern: </span><span class=\"si\">{!r}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">pattern</span><span class=\"p\">))</span>\n        <span class=\"n\">pattern</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">casefold</span><span class=\"p\">(</span><span class=\"n\">pattern</span><span class=\"p\">)</span>\n        <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">pattern_parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">parse_parts</span><span class=\"p\">((</span><span class=\"n\">pattern</span><span class=\"p\">,))</span>\n        <span class=\"k\">if</span> <span class=\"n\">drv</span> <span class=\"ow\">or</span> <span class=\"n\">root</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Non-relative patterns are unsupported&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">selector</span> <span class=\"o\">=</span> <span class=\"n\">_make_selector</span><span class=\"p\">(</span><span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">pattern_parts</span><span class=\"p\">))</span>\n        <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">selector</span><span class=\"o\">.</span><span class=\"n\">select_from</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">yield</span> <span class=\"n\">p</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">rglob</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">pattern</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Recursively yield all existing files (of any kind, including</span>\n<span class=\"sd\">        directories) matching the given pattern, anywhere in this subtree.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">pattern</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">casefold</span><span class=\"p\">(</span><span class=\"n\">pattern</span><span class=\"p\">)</span>\n        <span class=\"n\">drv</span><span class=\"p\">,</span> <span class=\"n\">root</span><span class=\"p\">,</span> <span class=\"n\">pattern_parts</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">parse_parts</span><span class=\"p\">((</span><span class=\"n\">pattern</span><span class=\"p\">,))</span>\n        <span class=\"k\">if</span> <span class=\"n\">drv</span> <span class=\"ow\">or</span> <span class=\"n\">root</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Non-relative patterns are unsupported&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">selector</span> <span class=\"o\">=</span> <span class=\"n\">_make_selector</span><span class=\"p\">((</span><span class=\"s2\">&quot;**&quot;</span><span class=\"p\">,)</span> <span class=\"o\">+</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">pattern_parts</span><span class=\"p\">))</span>\n        <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">selector</span><span class=\"o\">.</span><span class=\"n\">select_from</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">yield</span> <span class=\"n\">p</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">absolute</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Return an absolute version of this path.  This function works</span>\n<span class=\"sd\">        even if the path doesn&#39;t point to anything.</span>\n\n<span class=\"sd\">        No normalization is done, i.e. all &#39;.&#39; and &#39;..&#39; will be kept along.</span>\n<span class=\"sd\">        Use resolve() to get the canonical path to a file.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># XXX untested yet!</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_absolute</span><span class=\"p\">():</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span>\n        <span class=\"c1\"># FIXME this must defer to the specific flavour (and, under Windows,</span>\n        <span class=\"c1\"># use nt._getfullpathname())</span>\n        <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_from_parts</span><span class=\"p\">([</span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">getcwd</span><span class=\"p\">()]</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">,</span> <span class=\"n\">init</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">_init</span><span class=\"p\">(</span><span class=\"n\">template</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">resolve</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">strict</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Make the path absolute, resolving all symlinks on the way and also</span>\n<span class=\"sd\">        normalizing it (for example turning slashes into backslashes under</span>\n<span class=\"sd\">        Windows).</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">resolve</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">strict</span><span class=\"o\">=</span><span class=\"n\">strict</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">s</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"c1\"># No symlink resolution =&gt; for consistency, raise an error if</span>\n            <span class=\"c1\"># the path doesn&#39;t exist or is forbidden</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span>\n            <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">absolute</span><span class=\"p\">())</span>\n        <span class=\"c1\"># Now we have no symlinks in the path, it&#39;s safe to normalize it.</span>\n        <span class=\"n\">normed</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">pathmod</span><span class=\"o\">.</span><span class=\"n\">normpath</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)</span>\n        <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_from_parts</span><span class=\"p\">((</span><span class=\"n\">normed</span><span class=\"p\">,),</span> <span class=\"n\">init</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">_init</span><span class=\"p\">(</span><span class=\"n\">template</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">stat</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return the result of the stat() system call on this path, like</span>\n<span class=\"sd\">        os.stat() does.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">owner</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return the login name of the file owner.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"kn\">import</span> <span class=\"nn\">pwd</span>\n        <span class=\"k\">return</span> <span class=\"n\">pwd</span><span class=\"o\">.</span><span class=\"n\">getpwuid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">st_uid</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">pw_name</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">group</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return the group name of the file gid.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"kn\">import</span> <span class=\"nn\">grp</span>\n        <span class=\"k\">return</span> <span class=\"n\">grp</span><span class=\"o\">.</span><span class=\"n\">getgrgid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">st_gid</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">gr_name</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">open</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">buffering</span><span class=\"o\">=-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n             <span class=\"n\">errors</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">newline</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Open the file pointed by this path and return a file object, as</span>\n<span class=\"sd\">        the built-in open() function does.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">io</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">),</span> <span class=\"n\">mode</span><span class=\"p\">,</span> <span class=\"n\">buffering</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"p\">,</span> <span class=\"n\">errors</span><span class=\"p\">,</span> <span class=\"n\">newline</span><span class=\"p\">,</span>\n                       <span class=\"n\">opener</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_opener</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">read_bytes</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Open the file in bytes mode, read it, and close the file.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"s1\">&#39;rb&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">read_text</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">errors</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Open the file in text mode, read it, and close the file.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"n\">encoding</span><span class=\"p\">,</span> <span class=\"n\">errors</span><span class=\"o\">=</span><span class=\"n\">errors</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">write_bytes</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Open the file in bytes mode, write to it, and close the file.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># type-check for the buffer interface before truncating the file</span>\n        <span class=\"n\">view</span> <span class=\"o\">=</span> <span class=\"nb\">memoryview</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n        <span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"s1\">&#39;wb&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">view</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">write_text</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">errors</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Open the file in text mode, write to it, and close the file.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"nb\">str</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s1\">&#39;data must be str, not </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span>\n                            <span class=\"n\">data</span><span class=\"o\">.</span><span class=\"vm\">__class__</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n        <span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"s1\">&#39;w&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"n\">encoding</span><span class=\"p\">,</span> <span class=\"n\">errors</span><span class=\"o\">=</span><span class=\"n\">errors</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">touch</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"mo\">0o666</span><span class=\"p\">,</span> <span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Create this file with the given access mode, if it doesn&#39;t exist.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">exist_ok</span><span class=\"p\">:</span>\n            <span class=\"c1\"># First try to bump modification time</span>\n            <span class=\"c1\"># Implementation note: GNU touch uses the UTIME_NOW option of</span>\n            <span class=\"c1\"># the utimensat() / futimens() functions.</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">utime</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"ne\">OSError</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Avoid exception chaining</span>\n                <span class=\"k\">pass</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span>\n        <span class=\"n\">flags</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">O_CREAT</span> <span class=\"o\">|</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">O_WRONLY</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">exist_ok</span><span class=\"p\">:</span>\n            <span class=\"n\">flags</span> <span class=\"o\">|=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">O_EXCL</span>\n        <span class=\"n\">fd</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raw_open</span><span class=\"p\">(</span><span class=\"n\">flags</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">)</span>\n        <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">(</span><span class=\"n\">fd</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">mkdir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"mo\">0o777</span><span class=\"p\">,</span> <span class=\"n\">parents</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Create a new directory at this given path.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">mkdir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">FileNotFoundError</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">parents</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">parent</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">parent</span><span class=\"o\">.</span><span class=\"n\">mkdir</span><span class=\"p\">(</span><span class=\"n\">parents</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">mkdir</span><span class=\"p\">(</span><span class=\"n\">mode</span><span class=\"p\">,</span> <span class=\"n\">parents</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">exist_ok</span><span class=\"o\">=</span><span class=\"n\">exist_ok</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">OSError</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Cannot rely on checking for EEXIST, since the operating system</span>\n            <span class=\"c1\"># could give priority to other errors like EACCES or EROFS</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">exist_ok</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_dir</span><span class=\"p\">():</span>\n                <span class=\"k\">raise</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">chmod</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Change the permissions of the path, like os.chmod().</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">chmod</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">lchmod</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Like chmod(), except if the path points to a symlink, the symlink&#39;s</span>\n<span class=\"sd\">        permissions are changed, rather than its target&#39;s.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">lchmod</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">mode</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">unlink</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Remove this file or link.</span>\n<span class=\"sd\">        If the path is a directory, use rmdir() instead.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">unlink</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">rmdir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Remove this directory.  The directory must be empty.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">rmdir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">lstat</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Like stat(), except if the path points to a symlink, the symlink&#39;s</span>\n<span class=\"sd\">        status information is returned, rather than its target&#39;s.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">lstat</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">rename</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">target</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Rename this path to the given path.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">rename</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">target</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">replace</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">target</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Rename this path to the given path, clobbering the existing</span>\n<span class=\"sd\">        destination if it exists.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">target</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">symlink_to</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">target</span><span class=\"p\">,</span> <span class=\"n\">target_is_directory</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Make this path a symlink pointing to the given path.</span>\n<span class=\"sd\">        Note the order of arguments (self, target) is the reverse of os.symlink&#39;s.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_closed</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_raise_closed</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_accessor</span><span class=\"o\">.</span><span class=\"n\">symlink</span><span class=\"p\">(</span><span class=\"n\">target</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">target_is_directory</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Convenience functions for querying the stat results</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">exists</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Whether this path exists.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span>\n        <span class=\"k\">except</span> <span class=\"ne\">OSError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">errno</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">(</span><span class=\"n\">ENOENT</span><span class=\"p\">,</span> <span class=\"n\">ENOTDIR</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_dir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Whether this path is a directory.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">S_ISDIR</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">st_mode</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">OSError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">errno</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">(</span><span class=\"n\">ENOENT</span><span class=\"p\">,</span> <span class=\"n\">ENOTDIR</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span>\n            <span class=\"c1\"># Path doesn&#39;t exist or is a broken symlink</span>\n            <span class=\"c1\"># (see https://bitbucket.org/pitrou/pathlib/issue/12/)</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_file</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Whether this path is a regular file (also True for symlinks pointing</span>\n<span class=\"sd\">        to regular files).</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">S_ISREG</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">st_mode</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">OSError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">errno</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">(</span><span class=\"n\">ENOENT</span><span class=\"p\">,</span> <span class=\"n\">ENOTDIR</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span>\n            <span class=\"c1\"># Path doesn&#39;t exist or is a broken symlink</span>\n            <span class=\"c1\"># (see https://bitbucket.org/pitrou/pathlib/issue/12/)</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_symlink</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Whether this path is a symbolic link.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">S_ISLNK</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lstat</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">st_mode</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">OSError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">errno</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">(</span><span class=\"n\">ENOENT</span><span class=\"p\">,</span> <span class=\"n\">ENOTDIR</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span>\n            <span class=\"c1\"># Path doesn&#39;t exist</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_block_device</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Whether this path is a block device.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">S_ISBLK</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">st_mode</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">OSError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">errno</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">(</span><span class=\"n\">ENOENT</span><span class=\"p\">,</span> <span class=\"n\">ENOTDIR</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span>\n            <span class=\"c1\"># Path doesn&#39;t exist or is a broken symlink</span>\n            <span class=\"c1\"># (see https://bitbucket.org/pitrou/pathlib/issue/12/)</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_char_device</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Whether this path is a character device.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">S_ISCHR</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">st_mode</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">OSError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">errno</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">(</span><span class=\"n\">ENOENT</span><span class=\"p\">,</span> <span class=\"n\">ENOTDIR</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span>\n            <span class=\"c1\"># Path doesn&#39;t exist or is a broken symlink</span>\n            <span class=\"c1\"># (see https://bitbucket.org/pitrou/pathlib/issue/12/)</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_fifo</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Whether this path is a FIFO.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">S_ISFIFO</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">st_mode</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">OSError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">errno</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">(</span><span class=\"n\">ENOENT</span><span class=\"p\">,</span> <span class=\"n\">ENOTDIR</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span>\n            <span class=\"c1\"># Path doesn&#39;t exist or is a broken symlink</span>\n            <span class=\"c1\"># (see https://bitbucket.org/pitrou/pathlib/issue/12/)</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_socket</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Whether this path is a socket.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">S_ISSOCK</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stat</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">st_mode</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">OSError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">errno</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">(</span><span class=\"n\">ENOENT</span><span class=\"p\">,</span> <span class=\"n\">ENOTDIR</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span>\n            <span class=\"c1\"># Path doesn&#39;t exist or is a broken symlink</span>\n            <span class=\"c1\"># (see https://bitbucket.org/pitrou/pathlib/issue/12/)</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">expanduser</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Return a new path with expanded ~ and ~user constructs</span>\n<span class=\"sd\">        (as returned by os.path.expanduser)</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"ow\">not</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_drv</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_root</span><span class=\"p\">)</span> <span class=\"ow\">and</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][:</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;~&#39;</span><span class=\"p\">):</span>\n            <span class=\"n\">homedir</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_flavour</span><span class=\"o\">.</span><span class=\"n\">gethomedir</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">:])</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_from_parts</span><span class=\"p\">([</span><span class=\"n\">homedir</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_parts</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:])</span>\n\n        <span class=\"k\">return</span> <span class=\"bp\">self</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PosixPath</span><span class=\"p\">(</span><span class=\"n\">Path</span><span class=\"p\">,</span> <span class=\"n\">PurePosixPath</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;Path subclass for non-Windows systems.</span>\n\n<span class=\"sd\">    On a POSIX system, instantiating a Path should return this object.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"vm\">__slots__</span> <span class=\"o\">=</span> <span class=\"p\">()</span>\n\n<span class=\"k\">class</span> <span class=\"nc\">WindowsPath</span><span class=\"p\">(</span><span class=\"n\">Path</span><span class=\"p\">,</span> <span class=\"n\">PureWindowsPath</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;Path subclass for Windows systems.</span>\n\n<span class=\"sd\">    On a Windows system, instantiating a Path should return this object.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"vm\">__slots__</span> <span class=\"o\">=</span> <span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">owner</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Path.owner() is unsupported on this system&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">group</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Path.group() is unsupported on this system&quot;</span><span class=\"p\">)</span>\n</pre></div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/_sources/claf.config.factory.rst.txt",
    "content": "claf.config.factory package\n===========================\n\nSubmodules\n----------\n\n.. automodule:: claf.config.factory.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.factory.data_loader\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.factory.data_reader\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.factory.model\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.factory.optimizer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.factory.tokens\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.config.factory\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.config.rst.txt",
    "content": "claf.config package\n===================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.config.factory\n\nSubmodules\n----------\n\n.. automodule:: claf.config.args\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.namespace\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.pattern\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.registry\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.config\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.data.dataset.rst.txt",
    "content": "claf.data.dataset package\n=========================\n\nSubmodules\n----------\n\n.. automodule:: claf.data.dataset.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.seq_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.seq_cls_bert\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.squad\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.squad_bert\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.tok_cls_bert\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.wikisql\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.data.dataset\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.data.reader.bert.rst.txt",
    "content": "claf.data.reader.bert package\n=============================\n\nSubmodules\n----------\n\n.. automodule:: claf.data.reader.bert.cola\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.bert.conll2003\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.bert.seq_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.bert.squad\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.bert.tok_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.data.reader.bert\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.data.reader.rst.txt",
    "content": "claf.data.reader package\n========================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.data.reader.bert\n\nSubmodules\n----------\n\n.. automodule:: claf.data.reader.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.cola\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.seq_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.squad\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.wikisql\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.data.reader\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.data.rst.txt",
    "content": "claf.data package\n=================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.data.dataset\n    claf.data.reader\n\nSubmodules\n----------\n\n.. automodule:: claf.data.batch\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.collate\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.data_handler\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.data\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.decorator.rst.txt",
    "content": "claf.decorator package\n======================\n\nSubmodules\n----------\n\n.. automodule:: claf.decorator.arguments\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.decorator.register\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.decorator\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.learn.rst.txt",
    "content": "claf.learn package\n==================\n\nSubmodules\n----------\n\n.. automodule:: claf.learn.experiment\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.learn.mode\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.learn.tensorboard\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.learn.trainer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.learn.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.learn\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.machine.components.retrieval.rst.txt",
    "content": "claf.machine.components.retrieval package\n=========================================\n\nSubmodules\n----------\n\n.. automodule:: claf.machine.components.retrieval.tfidf\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.machine.components.retrieval\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.machine.components.rst.txt",
    "content": "claf.machine.components package\n===============================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.machine.components.retrieval\n\nModule contents\n---------------\n\n.. automodule:: claf.machine.components\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.machine.rst.txt",
    "content": "claf.machine package\n====================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.machine.components\n\nSubmodules\n----------\n\n.. automodule:: claf.machine.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.machine.module\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.machine.nlu\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.machine.open_qa\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.machine\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.metric.rst.txt",
    "content": "claf.metric package\n===================\n\nSubmodules\n----------\n\n.. automodule:: claf.metric.classification\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.metric.squad_v1_official\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.metric.squad_v2_official\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.metric.wikisql_official\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.metric\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.model.reading_comprehension.rst.txt",
    "content": "claf.model.reading\\_comprehension package\n=========================================\n\nSubmodules\n----------\n\n.. automodule:: claf.model.reading_comprehension.bert_for_qa\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.bidaf\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.bidaf_no_answer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.docqa\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.docqa_no_answer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.drqa\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.mixin\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.qanet\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.model.reading_comprehension\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.model.rst.txt",
    "content": "claf.model package\n==================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.model.reading_comprehension\n    claf.model.semantic_parsing\n    claf.model.sequence_classification\n    claf.model.token_classification\n\nSubmodules\n----------\n\n.. automodule:: claf.model.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.cls_utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.model\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.model.semantic_parsing.rst.txt",
    "content": "claf.model.semantic\\_parsing package\n====================================\n\nSubmodules\n----------\n\n.. automodule:: claf.model.semantic_parsing.mixin\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.semantic_parsing.sqlnet\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.semantic_parsing.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.model.semantic_parsing\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.model.sequence_classification.rst.txt",
    "content": "claf.model.sequence\\_classification package\n===========================================\n\nSubmodules\n----------\n\n.. automodule:: claf.model.sequence_classification.bert_for_seq_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.sequence_classification.mixin\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.sequence_classification.structured_self_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.model.sequence_classification\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.model.token_classification.rst.txt",
    "content": "claf.model.token\\_classification package\n========================================\n\nSubmodules\n----------\n\n.. automodule:: claf.model.token_classification.bert_for_tok_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.token_classification.mixin\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.model.token_classification\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.modules.attention.rst.txt",
    "content": "claf.modules.attention package\n==============================\n\nSubmodules\n----------\n\n.. automodule:: claf.modules.attention.bi_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.attention.co_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.attention.docqa_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.attention.multi_head_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.attention.seq_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.modules.attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.modules.conv.rst.txt",
    "content": "claf.modules.conv package\n=========================\n\nSubmodules\n----------\n\n.. automodule:: claf.modules.conv.depthwise_separable_conv\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.conv.pointwise_conv\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.modules.conv\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.modules.encoder.rst.txt",
    "content": "claf.modules.encoder package\n============================\n\nSubmodules\n----------\n\n.. automodule:: claf.modules.encoder.lstm_cell_with_projection\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.encoder.positional\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.modules.encoder\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.modules.layer.rst.txt",
    "content": "claf.modules.layer package\n==========================\n\nSubmodules\n----------\n\n.. automodule:: claf.modules.layer.highway\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.layer.normalization\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.layer.positionwise\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.layer.residual\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.layer.scalar_mix\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.modules.layer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.modules.rst.txt",
    "content": "claf.modules package\n====================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.modules.attention\n    claf.modules.conv\n    claf.modules.encoder\n    claf.modules.layer\n\nSubmodules\n----------\n\n.. automodule:: claf.modules.activation\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.functional\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.initializer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.modules\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.rst.txt",
    "content": "claf package\n============\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.config\n    claf.data\n    claf.decorator\n    claf.learn\n    claf.machine\n    claf.metric\n    claf.model\n    claf.modules\n    claf.tokens\n\nSubmodules\n----------\n\n.. automodule:: claf.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.tokens.embedding.rst.txt",
    "content": "claf.tokens.embedding package\n=============================\n\nSubmodules\n----------\n\n.. automodule:: claf.tokens.embedding.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.bert_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.char_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.cove_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.elmo_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.frequent_word_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.sparse_feature\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.word_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.tokens.embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.tokens.indexer.rst.txt",
    "content": "claf.tokens.indexer package\n===========================\n\nSubmodules\n----------\n\n.. automodule:: claf.tokens.indexer.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.bert_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.char_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.elmo_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.exact_match_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.linguistic_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.word_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.tokens.indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.tokens.rst.txt",
    "content": "claf.tokens package\n===================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.tokens.embedding\n    claf.tokens.indexer\n    claf.tokens.token_embedder\n    claf.tokens.tokenizer\n\nSubmodules\n----------\n\n.. automodule:: claf.tokens.cove\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.elmo\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.hangul\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.linguistic\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.text_handler\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.token_maker\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.vocabulary\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.tokens\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.tokens.token_embedder.rst.txt",
    "content": "claf.tokens.token\\_embedder package\n===================================\n\nSubmodules\n----------\n\n.. automodule:: claf.tokens.token_embedder.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.token_embedder.basic_embedder\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.token_embedder.reading_comprehension_embedder\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.tokens.token_embedder\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/claf.tokens.tokenizer.rst.txt",
    "content": "claf.tokens.tokenizer package\n=============================\n\nSubmodules\n----------\n\n.. automodule:: claf.tokens.tokenizer.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.char\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.pass_text\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.sent\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.subword\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.word\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.tokens.tokenizer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/_build/html/_sources/contents/dataset_and_model.md.txt",
    "content": "# Dataset and Model\n\n**Table of Contents**\n\n- [Multi Task](#multi-task)\n- [Reading Comprehension](#reading-comprehension)\n- [Regression](#regression)\n- [Semantic Parsing](#semantic-parsing)\n- [Sequence Classification](#sequence-classification)\n- [Token Classification](#token-classification)\n\n---\n\n## Multi-Task\n\n### Dataset\n\n- [GLUE Benchmark](https://gluebenchmark.com/): The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems.\n    - CoLA, MNLI, MRPC, QNLI, QQP, RTE, SST-2, STS-B, WNLI \n\n### Model\n\n- [Multi-Task Deep Neural Networks for Natural Language Understanding](https://arxiv.org/abs/1901.11504)\n\n\n## Reading Comprehension\n\n### Dataset\n\n- [HistoryQA](https://oss.navercorp.com/ClovaAI-PJT/HistoryQA): Joseon History Question Answering Dataset (SQuAD Style)\n- [KorQuAD](https://korquad.github.io/): KorQuAD는 한국어 Machine Reading Comprehension을 위해 만든 데이터셋입니다. 모든 질의에 대한 답변은 해당 Wikipedia 아티클 문단의 일부 하위 영역으로 이루어집니다. Stanford Question Answering Dataset(SQuAD) v1.0과 동일한 방식으로 구성되었습니다.\n- [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/): **S**tanford **Qu**estion **A**nswering **D**ataset is a reading comprehension dataset, consisting of questions posed by crowdworkers on a set of Wikipedia articles, where the answer to every question is a segment of text, or span, from the corresponding reading passage, or the question might be unanswerable.\n\n### Model\n\n- BiDAF: [Birectional Attention Flow for Machine Comprehension](https://arxiv.org/abs/1611.01603) + `No Answer`\n- [A Structured Self-attentive Sentence Embedding](https://arxiv.org/abs/1703.03130)\n- DrQA: [Reading Wikipedia to Answer Open-Domain Questions](https://arxiv.org/abs/1704.00051)\n- DocQA: [Simple and Effective Multi-Paragraph Reading Comprehension](https://arxiv.org/abs/1710.10723) + `No Answer`\n- [QANet: Combining Local Convolution with Global Self-Attention for Reading Comprehension ](https://arxiv.org/abs/1804.09541)\n- [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)\n\n---\n\n## Regression\n\n- [GLUE Benchmark](https://gluebenchmark.com/): The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems.\n    - STS-B\n\n### Model\n\n- [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)\n- [RoBERTa: A Robustly Optimized BERT Pretraining Approach](https://arxiv.org/abs/1907.11692)\n\n---\n\n\n## Semantic Parsing\n\n### Dataset\n\n- [WikiSQL](https://github.com/salesforce/WikiSQL): A large crowd-sourced dataset for developing natural language interfaces for relational databases. WikiSQL is the dataset released along with our work [Seq2SQL: Generating Structured Queries from Natural Language using Reinforcement Learning](http://arxiv.org/abs/1709.00103).\n\n\n### Model\n\n- SQLNet: [SQLNet: Generating Structured Queries From Natural Language Without Reinforcement Learning](https://arxiv.org/abs/1711.04436)\n\n---\n\n\n## Sequence Classification\n\n### Dataset\n\n- [GLUE Benchmark](https://gluebenchmark.com/): The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems.\n    - CoLA, MNLI, MRPC, QNLI, QQP, RTE, SST-2, WNLI \n\n### Model\n\n- [A Structured Self-attentive Sentence Embedding](https://arxiv.org/abs/1703.03130)\n- [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)\n- [RoBERTa: A Robustly Optimized BERT Pretraining Approach](https://arxiv.org/abs/1907.11692)\n\n---\n\n## Token Classification\n\n### Dataset\n\n- [NER - CoNLL 2013](https://www.clips.uantwerpen.be/conll2003/ner/): The shared task of CoNLL-2003 concerns language-independent named entity recognition. Named entities are phrases that contain the names of persons, organizations, locations, times and quantities. \n\n### Model\n\n- [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)"
  },
  {
    "path": "docs/_build/html/_sources/contents/pretrained_vector.md.txt",
    "content": "# Pretrained Vector\n\n- List on [DataServer](http://dev-reasoning-qa-data-ncl.nfra.io:7778/)\n\n## English\n\n- `Counter Fitting`: [Counter-fitting Word Vectors to Linguistic Constraints](http://mi.eng.cam.ac.uk/~nm480/naaclhlt2016.pdf)\n    - counter\\_fitted\\_glove.300d.txt\n - `Cove`: [Learned in Translation: Contextualized Word Vectors (McCann et. al. 2017)](https://github.com/salesforce/cove)\n     - wmtlstm-b142a7f2.pth\n- `fastText`: [Enriching Word Vectors with Subword Information](https://github.com/facebookresearch/fastText)\n    - fasttext.wiki.en.300d.txt\n - `GloVe`: [GloVe: Global Vectors for Word Representation](https://nlp.stanford.edu/projects/glove/)\n     - glove.6B.50d.txt\n     - glove.6B.100d.txt\n     - glove.6B.200d.txt\n     - glove.6B.300d.txt\n     - glove.840B.300d.txt\n - `ELMo`: [Deep contextualized word representations](https://github.com/allenai/allennlp/blob/master/allennlp/modules/elmo.py)\n     - elmo\\_2x4096\\_512\\_2048cnn\\_2xhighway\\_weights.hdf5\n     - elmo\\_2x4096\\_512\\_2048cnn\\_2xhighway\\_options\n- `Word2Vec`: [Distributed Representations of Words and Phrases and their Compositionality](https://code.google.com/archive/p/word2vec/)\n    - GoogleNews-vectors-negative300.txt\n\n\n## Korean\n\n- `fastText`: [Enriching Word Vectors with Subword Information](https://github.com/facebookresearch/fastText)\n    - fasttext.wiki.ko.300d.txt"
  },
  {
    "path": "docs/_build/html/_sources/contents/tokens.md.txt",
    "content": "# Tokens\n\nTokenMakers consists of Tokenizer, Indexer, Vocabulary, and Embedding Modules.  \n`TokenMaker` is responsible for the indexing of text and the generation of the tensors through the embedding module.\n\n\n## Tokenizers\n\n- Tokenizer Design\n\n![images](../../images/tokenizers_design.png)\n\n```\nclass SentTokenizer(name, config): ...\nclass WordTokenizer(name, sent_tokenizer, config) ...\nclass SubwordTokenizer(name, word_tokenizer, config) ...\nclass CharTokenizer(name, word_tokenizer, config) ...\n```\n\nThe Tokenizer has a dependency with the other unit's tokenizer and the `tokenize()` function takes the input of text units.  \n(* unit: unit of input e.g. 'text', 'sentence' and 'word')\n\n- `tokenizer()` example\n\n```\n>>> text = \"Hello World.This is tokenizer example code.\"\n>>> word_tokenizer.tokenize(text, unit=\"text\")  # text -> sentences -> words\n>>> ['Hello', 'World', '.', 'This', 'is', 'tokenizer', 'example', 'code', '.']\n>>> word_tokenizer.tokenize(text, unit=\"sentence\")  # text -> words\n>>> ['Hello', 'World.This', 'is', 'tokenizer', 'example', 'code', '.']\n```\n\nSeveral tensors in a sub-level text unit can be combined into a single tensor of higher level via a vector operation. For example, subword level tensors can be averaged to represent a word level tensor.\n\ne.g.) concatenate \\[word; subword\\] (subword tokens --average--> word token) \n\n\n* The list of pre-defined `Tokenizers`:\n\n| Text Unit | Language | Name | Example |\n| ---- | ---- | --- | --- |\n| BPE | All (depend on vocab) | **roberta** | Hello World<br/>-> [\"ĠHello\", \"ĠWorld\"] |\n| Char | All | **character** | Hello World<br/>-> [\"Hello\", \"World\"]<br/>-> [[\"H\", \"e\", \"l\", \"l\", \"o\"], [\"W\", \"o\", \"r\", \"l\", \"d\"]] |\n| Char | Korean | [**jamo_ko**](https://github.com/rhobot/Hangulpy) | \"안녕 세상\"<br/>-> [\"안녕\", \"세상\"]<br/>-> [[\"ㅇ\", \"ㅏ\", \"ㄴ\", \"ㄴ\", \"ㅕ\", \"ㅇ\"], [\"ㅅ\", \"ㅔ\", \"ㅅ\", \"ㅏ\", \"ㅇ\"]] |\n| Subword | All (but, need vocab.txt) | [**wordpiece**](https://github.com/huggingface/pytorch-pretrained-BERT/blob/master/pytorch_pretrained_bert/tokenization.py) | \"expectancy of anyone\"<br/>-> [\"expectancy\", \"of\", \"anyone\"]<br/>-> [\"expect\", \"##ancy\", \"of\", \"anyone\"] |\n| Word | English | [**nltk_en**](http://www.nltk.org/api/nltk.tokenize.html) | - |\n| Word | English | [**spacy_en**](https://spacy.io/api/tokenizer) | - |\n| Word | Korean | [**mecab_ko**](https://bitbucket.org/eunjeon/mecab-ko) | - |\n| Word | All | **bert_basic** | - |\n| Word | All | **space_all** | \"Hello World\"<br/>-> [\"Hello\", \"World\"] |\n| Sent | All | [**punkt**](http://www.nltk.org/api/nltk.tokenize.html) | \"Hello World. This is punkt tokenizer.\"<br/>-> [\"Hello World.\", \"This is punkt tokenizer.\"] |\n\n\n## Token Maker\n\n* The list of pre-defined `Token Maker`:\n\n| Type | Description | Category | Notes |\n| ---- | ---- | --- | --- |\n| **char** | character -> convolution -> maxpool | `CharCNN` | - |\n| **cove** | Embeddings from Neural Machine Translation | `NMT` | - From [Salesforce](https://github.com/salesforce/cove) |\n| **feature** | Do not use embedding function, just pass feature | `Feature` | - |\n| **word** | word -> Embedding (+pretrained) | `Word2Vec` | - |\n| **frequent_word** | word token + pre-trained word embeddings fixed and only fine-tune the N most frequent | `Word2Vec` + `Fine-tune` | - |\n| **exact_match** | Three simple binary features, indicating whether p_i can be exactly matched to one question word in q, either in its original, lowercase or lemma form. | `Feature` | - Sparse or Embedding<br/> - Only for RC|\n| **elmo** | Embeddings from Language Models | `LM` | From [Allennlp](https://github.com/allenai/allennlp) |\n| **linguistic** | Linguistic Features like POS Tagging, NER and Dependency Parser | `Feature` | - Sparse or Embedding |\n\n\n- Example of tokens in [BaseConfig](#baseconfig)\n\n```\n\"token\": {\n   \"names\": [\"char\", \"glove\"],\n   \"types\": [\"char\", \"word\"],\n   \"tokenizer\": {  # Define the tokenizer in each unit.\n       \"char\": {\n           \"name\": \"character\"\n       },\n       \"word\": {\n           \"name\": \"treebank_en\",\n           \"split_with_regex\": true\n       }\n   },\n   \"char\": {  # token_name\n       \"vocab\": {\n           \"start_token\": \"<s>\",\n           \"end_token\": \"</s>\",\n           \"max_vocab_size\": 260\n       },\n       \"indexer\": {\n           \"insert_char_start\": true,\n           \"insert_char_end\": true\n       },\n       \"embedding\": {\n           \"embed_dim\": 16,\n           \"kernel_sizes\": [5],\n           \"num_filter\": 100,\n           \"activation\": \"relu\",\n           \"dropout\": 0.2\n       }\n   },\n   \"glove\": {  # token_name\n       \"indexer\": {\n           \"lowercase\": true\n       },\n       \"embedding\": {\n           \"embed_dim\": 100,\n           \"pretrained_path\": \"<glove.6B.100d path>,\n           \"trainable\": false,\n           \"dropout\": 0.2\n       }\n   }\n},\n\n# Tokens process\n#   Text -> Indexed Featrues -> Tensor -> TokenEmbedder -> Model\n\n# Visualization\n# - Text: Hello World\n# - Indexed Feature: {'char': [[2, 3, 4, 4, 5], [6, 7, 8, 4, 9]], 'glove': [2, 3]} \n# - Tensor: {'char': tensor, 'glove': tensor} \n# - TokenEmbedder: [char; glove]  (default: concatenate)\n# - Model: use embedded_value\n```"
  },
  {
    "path": "docs/_build/html/_sources/index.rst.txt",
    "content": ".. CLaF documentation master file, created by\n   sphinx-quickstart on Wed Aug 22 16:14:25 2018.\n   You can adapt this file completely to your liking, but it should at least\n   contain the root `toctree` directive.\n\n:github_url: https://github.com/naver/claf\n\nCLaF documentation\n===================================\n\nCLaF: Clova Language Framework\n\n.. toctree::\n   :glob:\n   :maxdepth: 1\n   :caption: Contents\n\n   contents/*\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: Package Reference\n\n   config <claf.config>\n   data <claf.data>\n   learn <claf.learn>\n   metric <claf.metric>\n   model <claf.model>\n   modules <claf.modules>\n   tokens <claf.tokens>\n\n\n.. toctree::\n   :glob:\n   :maxdepth: 1\n   :caption: Reports\n\n   reports/*\n\n\n.. toctree::\n   :glob:\n   :maxdepth: 1\n   :caption: Summary\n\n   summary/*\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: Appendix\n\n   References <references>\n\n\nIndices and tables\n==================\n\n* :ref:`genindex`\n* :ref:`modindex`\n"
  },
  {
    "path": "docs/_build/html/_sources/modules.rst.txt",
    "content": "claf\n====\n\n.. toctree::\n   :maxdepth: 4\n\n   claf\n"
  },
  {
    "path": "docs/_build/html/_sources/references.md.txt",
    "content": "# References\n\n\n- **Dataset**\n\t- Pranav Rajpurkar, Jian Zhang, Konstantin Lopyrev and Percy Liang. 2016, [SQuAD: 100,000+ Questions for Machine Comprehension of Text](https://arxiv.org/abs/1606.05250)\n\t- Pranav Rajpurkar, Robin Jia and Percy Liang. 2018, [Know What You Don't Know: Unanswerable Questions for SQuAD](https://arxiv.org/abs/1806.03822)\n\t- Victor Zhong, Caiming Xiong, and Richard Socher. 2017, [Seq2SQL: Generating Structured Queries from Natural Language using Reinforcement Learning](http://arxiv.org/abs/1709.00103)\n- **Model**\n   - Minjoon Seo, Aniruddha Kembhavi, Ali Farhadi and Hannaneh Hajishirzi. 2016, [Bidirectional Attention Flow for Machine Comprehension](https://arxiv.org/abs/1611.01603)\n   - Danqi Chen, Adam Fisch, Jason Weston and Antoine Bordes. 2017, [Reading Wikipedia to Answer Open-Domain Questions](https://arxiv.org/abs/1704.00051)\n   - Christopher Clark and Matt Gardner. 2017, [Simple and Effective Multi-Paragraph Reading Comprehension](https://arxiv.org/abs/1710.10723)\n   - Adams Wei Yu, David Dohan, Minh-Thang Luong, Rui Zhao, Kai Chen, Mohammad Norouzi and Quoc V. Le. 2018, [QANet: Combining Local Convolution with Global Self-Attention for Reading Comprehension](https://arxiv.org/abs/1804.09541)\n   - Jacob Devlin, Ming-Wei Chang, Kenton Lee and Kristina Toutanova. 2018, [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)\n   - Xiaojun Xu, Chang Liu and Dawn Song. 2017, [SQLNet: Generating Structured Queries From Natural Language Without Reinforcement Learning](https://arxiv.org/abs/1711.04436)\n- **Token**\n   - Yoon Kim,. 2014, [Convolutional Neural Networks for Sentence Classification](https://arxiv.org/abs/1408.5882)\n\t- B. McCann, J. Bradbury, C. Xiong, R. Socher, [Learned in Translation: Contextualized Word Vectors](http://papers.nips.cc/paper/7209-learned-in-translation-contextualized-word-vectors.pdf)\n\t- P. Bojanowski, E. Grave, A. Joulin, T. Mikolov, [Enriching Word Vectors with Subword Information](https://arxiv.org/abs/1607.04606)\n   - Matthew E. Peters, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee and Luke Zettlemoyer. 2018, [Deep contextualized word representations](https://arxiv.org/abs/1802.05365)\n- **Other Framework**\n    - Matt Gardner, Joel Grus, Mark Neumann, Oyvind Tafjord, Pradeep Dasigi, Nelson F. Liu, Matthew Peters, Michael Schmitz and Luke S. Zettlemoyer. 2017, [AllenNLP: A Deep Semantic Natural Language Processing Platform](https://www.semanticscholar.org/paper/AllenNLP%3A-A-Deep-Semantic-Natural-Language-Platform-Gardner-Grus/a5502187140cdd98d76ae711973dbcdaf1fef46d)\n    - Guillaume Klein, Yoon Kim, Yuntian Deng, Vincent Nguyen, Jean Senellart and Alexander M. Rush [OpenNMT: Neural Machine Translation Toolkit](https://arxiv.org/pdf/1805.11462)"
  },
  {
    "path": "docs/_build/html/_sources/reports/glue.md.txt",
    "content": "# GLUE\n\n- [`GLUE`](https://gluebenchmark.com/): The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems. \n\n---\n\n## Results\n\n### Dev Set\n\n- **Base** Size : 12-layer, 768-hidden, 12-heads, 110M parameters\n\n| Task (Metric) | Model | CLaF Result | Official Result | BaseConfig | \n| ------------- | ----- | ----- | -------- | ---------- |\n| **CoLA** (**Matthew's Corr**) | BERT-Base | 59.393 | 52.1 (Test set) | glue/cola_bert.json |\n|  | MT-DNN (BERT) Base | 54.658 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 64.828 | 63.6 | glue/cola_roberta.json |\n| **MNLI m/mm** (**Accuracy**) | BERT-Base | 83.923/84.306 | 84.6/83.4 (Test set) | glue/mnli{m/mm}_bert.json | \n|  | MT-DNN (BERT) Base | 84.452/84.225 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 87.305/87.236 | 87.6/- | glue/mnli{m/mm}_roberta.json |\n| **MRPC** (**Accuracy/F1**) | BERT-Base | 87.5/91.282 | 88.9 (Test set) | glue/mrpc_bert.json |\n|  | MT-DNN (BERT) Base | 87.5/91.005 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 88.480/91.681 | 90.2 | glue/mrpc_roberta.json |\n| **QNLI** (**Accuracy**) | BERT-Base | 88.521 | 90.5 (Test set) | glue/qnli_bert.json |\n|  | MT-DNN (BERT) Base | - | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 90.823 | 92.8 | glue/qnli_roberta.json |\n| **QQP** (**Accuracy/F1**) | BERT-Base | 90.378/87.171 | 71.2 (Test set) | glue/qqp_bert.json |\n|  | MT-DNN (BERT) Base | 91.261/88.219 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 91.541/88.768 | 91.9 | glue/qqp_roberta.json |\n| **RTE** (**Accuracy**) | BERT-Base | 69.314 | 66.4 (Test set) | glue/rte_bert.json |\n|  | MT-DNN (BERT) Base | 79.422 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 73.646 | 78.7 | glue/rte_roberta.json |\n| **SST-2** (**Accuracy**) | BERT-Base | 92.546 | 93.5 (Test set) | glue/sst_bert.json |\n|  | MT-DNN (BERT) Base | 93.005 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 94.495 | 94.8 | glue/sst_roberta.json |\n| **STS-B** (**Pearson/Spearman**) | BERT-Base | 88.070/87.881 | 85.8 (Test set) | glue/stsb_bert.json |\n|  | MT-DNN (BERT) Base | 88.444/88.807 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 89.003/89.094 | 91.2 | glue/stsb_roberta.json |\n| **WNLI** (**Accuracy**) | BERT-Base | 56.338 | 65.1 (Test set) | glue/wnli_bert.json |\n|  | MT-DNN (BERT) Base | 57.746 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 60.563 | - | glue/wnli_roberta.json |\n\n\n- **Large** Size : 24-layer, 1024-hidden, 16-heads, 340M parameters\n\n| Task (Metric) | Model | CLaF Result | Official Result | BaseConfig | \n| ------------- | ----- | ----- | -------- | ---------- |\n| **CoLA** (**Matthew's Corr**) | BERT-Large | 61.151 | 60.6 | glue/cola_bert.json |\n|  | MT-DNN (BERT) Large | - | 63.5 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | - | 68.0 | glue/cola_roberta.json |\n| **MNLI m/mm** (**Accuracy**) | BERT-Large | - | 86.6/- | glue/mnli{m/mm}_bert.json |\n|  | MT-DNN (BERT) Large | - | 87.1/86.7 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | - | 90.2/90.2 | glue/mnli{m/mm}_roberta.json |\n| **MRPC** (**Accuracy/F1**) | BERT-Large | 87.255/90.845 | 88.0 | glue/mrpc_bert.json |\n|  | MT-DNN (BERT) Large | - | 91.0/87.5 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | 90.686/93.214 | 90.9 | glue/mrpc_roberta.json |\n| **QNLI** (**Accuracy**) | BERT-Large | 90.440 | 92.3 | glue/qnli_bert.json |\n|  | MT-DNN (BERT) Large | - | 87.1/86.7 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | - | 94.7 | glue/qnli_roberta.json |\n| **QQP** (**Accuracy/F1**) | BERT-Large | 91.640/88.745 | 91.3 | glue/qqp_bert.json |\n|  | MT-DNN (BERT) Large | - | 87.1/86.7 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | 91.848/89.031 | 92.2 | glue/qqp_roberta.json |\n| **RTE** (**Accuracy**) | BERT-Large | 69.675 | 70.4 | glue/rte_bert.json |\n|  | MT-DNN (BERT) Large | - | 83.4 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | 84.838 | 86.6 | glue/rte_roberta.json |\n| **SST-2** (**Accuracy**) | BERT-Large | 93.349 | 93.2 | glue/sst_bert.json |\n|  | MT-DNN (BERT) Large | - | 94.3 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | 95.642 | 96.4 | glue/sst_roberta.json |\n| **STS-B** (**Pearson/Spearman**) | BERT-Large | 90.041/89735 | 90.0 | glue/stsb_bert.json |\n|  | MT-DNN (BERT) Large | - | 90.7/90.6 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | 91.980/91.764 | 92.4 | glue/stsb_roberta.json |\n| **WNLI** (**Accuracy**) | BERT-Large | 59.155 | - | glue/wnli_bert.json |\n|  | MT-DNN (BERT) Large | - | - | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | - | 91.3 | - |"
  },
  {
    "path": "docs/_build/html/_sources/reports/historyqa.md.txt",
    "content": "# HistoryQA\n\n`Span Detector`\n\n- `HistoryQA`: Joseon History Question Answering Dataset\n\t- Train: 31901 / Dev: 3067\t\n\n---\n\n## Results\n\n- Dev Set\n\n| Model | EM | F1 | BaseConfig | Note |\n| --- | --- | --- | --- | --- | \n| **BiDAF** | 81.709 | 84.743 | history/bidaf.json | - |\n| **DocQA** | 85.099 | 87.789 | history/docqa.json | - |"
  },
  {
    "path": "docs/_build/html/_sources/reports/korquad.md.txt",
    "content": "# KorQuAD\n\n`Span Detector`\n\n- [`KorQuAD`](https://korquad.github.io/): KorQuAD는 한국어 Machine Reading Comprehension을 위해 만든 데이터셋입니다. 모든 질의에 대한 답변은 해당 Wikipedia 아티클 문단의 일부 하위 영역으로 이루어집니다. Stanford Question Answering Dataset(SQuAD) v1.0과 동일한 방식으로 구성되었습니다.\n\t- v1.0\n\t\t- Train: 60359 / Dev: 5774 \n\n---\n\n## Results\n\n- Dev Set\n\n| Model | EM | F1 | BaseConfig | Note |\n| --- | --- | --- | --- | --- |\n| **BiDAF** | 75.476 | 85.915 | korquad/bidaf.json | - |\n| **DocQA** | 77.693 | 88.115 | korquad/docqa.json | - |\n| **BERT**-Base, Multilingual Uncased | 81.573 | 90.679 | korquad/bert_base_multilingual_uncased.json | - |\n| **BERT**-Base, Multilingual Cased | 82.542 | 91.692 | korquad/bert_base_multilingual_cased.json | - |"
  },
  {
    "path": "docs/_build/html/_sources/reports/squad.md.txt",
    "content": "# SQuAD\n\n`Span Detector`, `No Answer`\n\n- [`SQuAD`](https://rajpurkar.github.io/SQuAD-explorer/): Stanford Question Answering Dataset (SQuAD), a new reading comprehension dataset consisting of 100,000+ questions posed by crowdworkers on a set of Wikipedia articles, where the answer to each question is a segment of text from the corresponding reading passage.\n    - v1.1\n    \t- Train: 87599 / Dev: 10570 / Test: 9533\n\t- v2.0 + no_answer\n\t    - Train : 130319 / Dev: 11873 / Test: 8862\n\n---\n\n## Results (v1.1)\n\n- Dev Set\n\n| Model | EM (official) | F1 (official) | BaseConfig | Note |\n| --- | --- | --- | --- | --- |\n| **BiDAF** | 68.108 (67.7) | 77.780 (77.3) | squad/bidaf.json | - |\n| **BiDAF + ELMo** | 74.295 | 82.727 | squad/bidaf+elmo.json | - |\n| **DrQA** | 68.316 (68.8) | 77.493 (78.0) | squad/drqa.json | - |\n| **DocQA** | 71.760 (71.513) | 80.635 (80.422) | squad/docqa.json | - |\n| **DocQA + ELMo** | 76.244 (77.5) | 84.372 (84.5) | squad/docqa+elmo.json | - |\n| **QANet** | 70.918 (73.6) | 79.800 (82.7) | squad/qanet.json | - |\n| **BERT**-Base Uncased | 79.508 (80.8) | 87.642 (88.5) | squad/bert_base_uncased.json | - |\n| **BERT**-Large Uncased | 83.254 (84.1) | 90.440 (90.9) | squad/bert_large_uncased.json | - |\n| **RoBERTa**-Base | 82.980 | 90.459 | roberta_base.json/bert_base_uncased.json | - |\n| **RoBERTa**-Large | 88.061 (88.9) | 94.034 (94.6) | squad/roberta_large.json | - |\n\n---\n\n\n## Results (v2.0)\n\n- Dev Set\n\n| Model | EM (official) | F1 (official) | BaseConfig | Note |\n| --- | --- | --- | --- | --- |\n| **BiDAF** | 62.570 | 65.461 | squad/bidaf_no_answer.json | - |\n| **DocQA** | 61.728 | 64.489 | squad/docqa_no_answer.json | - |"
  },
  {
    "path": "docs/_build/html/_sources/reports/wikisql.md.txt",
    "content": "# WikiSQL\n\n`Semantic Parsing`, `NL2SQL`\n\n- `WikiSQL`: A large crowd-sourced dataset for developing natural language interfaces for relational databases.\n\n---\n\n## Results\n\n- Column details\n\t* Agg: Aggregator \n\t* Sel: SELECT Column\n\t* Cond: Where clause\n\t* LF: Logical Form\n\t* EX: Execution\n\t* (): Paper result\n\n| Model | Agg | Sel | Cond | LF | EX | BaseConfig |\n| --- | --- | --- | --- | --- | --- | --- |\n| **SQLNet** | (90.1) | (91.1) | (72.1) | - | (69.8) | wikisql/sqlnet.json |"
  },
  {
    "path": "docs/_build/html/_sources/summary/reading_comprehension.md.txt",
    "content": "# Reading Comprehension\n\n\nFocus on Service orientied metrics (eg. 1-example inference latency)\n\n- Exists samples in `reports/summary/` directory\n\n## SQuAD v1.1\n\n\n| Model | Inference Latency <br/>(1-example/ms) | F1 (SQuAD) | BaseConfig | Note |\n| --- | --- | --- | --- | --- |\n| **BiDAF** | 142.644 `cpu` / 32.545 `gpu` | 77.747 | squad/bidaf.json | - |\n| **BiDAF + ELMo** | - `cpu` / - `gpu` | 82.288 | squad/bidaf+elmo.json | - |\n| **DrQA** | - `cpu` / - `gpu` | 77.049 | squad/drqa.json | - |\n| **DocQA** | - `cpu` / - `gpu` | 80.635 | squad/docqa.json | - |\n| **DocQA + ELMo** | - `cpu` / - `gpu` | 84.372 | squad/docqa+elmo.json | - |\n| **QANet** | - `cpu` / - `gpu` | 79.800 | squad/qanet.json | - |\n| **BERT** | - `cpu` / - `gpu` | 87.130 | squad/bert\\_base-_uncased.json | - |\n\n\n### Plot\n\n- Inference Latency (1-example)\n\n![images](../../images/inference_latency_chart-1000.png)"
  },
  {
    "path": "docs/_build/html/_static/basic.css",
    "content": "/*\n * basic.css\n * ~~~~~~~~~\n *\n * Sphinx stylesheet -- basic theme.\n *\n * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.\n * :license: BSD, see LICENSE for details.\n *\n */\n\n/* -- main layout ----------------------------------------------------------- */\n\ndiv.clearer {\n    clear: both;\n}\n\n/* -- relbar ---------------------------------------------------------------- */\n\ndiv.related {\n    width: 100%;\n    font-size: 90%;\n}\n\ndiv.related h3 {\n    display: none;\n}\n\ndiv.related ul {\n    margin: 0;\n    padding: 0 0 0 10px;\n    list-style: none;\n}\n\ndiv.related li {\n    display: inline;\n}\n\ndiv.related li.right {\n    float: right;\n    margin-right: 5px;\n}\n\n/* -- sidebar --------------------------------------------------------------- */\n\ndiv.sphinxsidebarwrapper {\n    padding: 10px 5px 0 10px;\n}\n\ndiv.sphinxsidebar {\n    float: left;\n    width: 230px;\n    margin-left: -100%;\n    font-size: 90%;\n    word-wrap: break-word;\n    overflow-wrap : break-word;\n}\n\ndiv.sphinxsidebar ul {\n    list-style: none;\n}\n\ndiv.sphinxsidebar ul ul,\ndiv.sphinxsidebar ul.want-points {\n    margin-left: 20px;\n    list-style: square;\n}\n\ndiv.sphinxsidebar ul ul {\n    margin-top: 0;\n    margin-bottom: 0;\n}\n\ndiv.sphinxsidebar form {\n    margin-top: 10px;\n}\n\ndiv.sphinxsidebar input {\n    border: 1px solid #98dbcc;\n    font-family: sans-serif;\n    font-size: 1em;\n}\n\ndiv.sphinxsidebar #searchbox form.search {\n    overflow: hidden;\n}\n\ndiv.sphinxsidebar #searchbox input[type=\"text\"] {\n    float: left;\n    width: 80%;\n    padding: 0.25em;\n    box-sizing: border-box;\n}\n\ndiv.sphinxsidebar #searchbox input[type=\"submit\"] {\n    float: left;\n    width: 20%;\n    border-left: none;\n    padding: 0.25em;\n    box-sizing: border-box;\n}\n\n\nimg {\n    border: 0;\n    max-width: 100%;\n}\n\n/* -- search page ----------------------------------------------------------- */\n\nul.search {\n    margin: 10px 0 0 20px;\n    padding: 0;\n}\n\nul.search li {\n    padding: 5px 0 5px 20px;\n    background-image: url(file.png);\n    background-repeat: no-repeat;\n    background-position: 0 7px;\n}\n\nul.search li a {\n    font-weight: bold;\n}\n\nul.search li div.context {\n    color: #888;\n    margin: 2px 0 0 30px;\n    text-align: left;\n}\n\nul.keywordmatches li.goodmatch a {\n    font-weight: bold;\n}\n\n/* -- index page ------------------------------------------------------------ */\n\ntable.contentstable {\n    width: 90%;\n    margin-left: auto;\n    margin-right: auto;\n}\n\ntable.contentstable p.biglink {\n    line-height: 150%;\n}\n\na.biglink {\n    font-size: 1.3em;\n}\n\nspan.linkdescr {\n    font-style: italic;\n    padding-top: 5px;\n    font-size: 90%;\n}\n\n/* -- general index --------------------------------------------------------- */\n\ntable.indextable {\n    width: 100%;\n}\n\ntable.indextable td {\n    text-align: left;\n    vertical-align: top;\n}\n\ntable.indextable ul {\n    margin-top: 0;\n    margin-bottom: 0;\n    list-style-type: none;\n}\n\ntable.indextable > tbody > tr > td > ul {\n    padding-left: 0em;\n}\n\ntable.indextable tr.pcap {\n    height: 10px;\n}\n\ntable.indextable tr.cap {\n    margin-top: 10px;\n    background-color: #f2f2f2;\n}\n\nimg.toggler {\n    margin-right: 3px;\n    margin-top: 3px;\n    cursor: pointer;\n}\n\ndiv.modindex-jumpbox {\n    border-top: 1px solid #ddd;\n    border-bottom: 1px solid #ddd;\n    margin: 1em 0 1em 0;\n    padding: 0.4em;\n}\n\ndiv.genindex-jumpbox {\n    border-top: 1px solid #ddd;\n    border-bottom: 1px solid #ddd;\n    margin: 1em 0 1em 0;\n    padding: 0.4em;\n}\n\n/* -- domain module index --------------------------------------------------- */\n\ntable.modindextable td {\n    padding: 2px;\n    border-collapse: collapse;\n}\n\n/* -- general body styles --------------------------------------------------- */\n\ndiv.body {\n    min-width: 450px;\n    max-width: 800px;\n}\n\ndiv.body p, div.body dd, div.body li, div.body blockquote {\n    -moz-hyphens: auto;\n    -ms-hyphens: auto;\n    -webkit-hyphens: auto;\n    hyphens: auto;\n}\n\na.headerlink {\n    visibility: hidden;\n}\n\na.brackets:before,\nspan.brackets > a:before{\n    content: \"[\";\n}\n\na.brackets:after,\nspan.brackets > a:after {\n    content: \"]\";\n}\n\nh1:hover > a.headerlink,\nh2:hover > a.headerlink,\nh3:hover > a.headerlink,\nh4:hover > a.headerlink,\nh5:hover > a.headerlink,\nh6:hover > a.headerlink,\ndt:hover > a.headerlink,\ncaption:hover > a.headerlink,\np.caption:hover > a.headerlink,\ndiv.code-block-caption:hover > a.headerlink {\n    visibility: visible;\n}\n\ndiv.body p.caption {\n    text-align: inherit;\n}\n\ndiv.body td {\n    text-align: left;\n}\n\n.first {\n    margin-top: 0 !important;\n}\n\np.rubric {\n    margin-top: 30px;\n    font-weight: bold;\n}\n\nimg.align-left, .figure.align-left, object.align-left {\n    clear: left;\n    float: left;\n    margin-right: 1em;\n}\n\nimg.align-right, .figure.align-right, object.align-right {\n    clear: right;\n    float: right;\n    margin-left: 1em;\n}\n\nimg.align-center, .figure.align-center, object.align-center {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\nimg.align-default, .figure.align-default {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.align-left {\n    text-align: left;\n}\n\n.align-center {\n    text-align: center;\n}\n\n.align-default {\n    text-align: center;\n}\n\n.align-right {\n    text-align: right;\n}\n\n/* -- sidebars -------------------------------------------------------------- */\n\ndiv.sidebar {\n    margin: 0 0 0.5em 1em;\n    border: 1px solid #ddb;\n    padding: 7px 7px 0 7px;\n    background-color: #ffe;\n    width: 40%;\n    float: right;\n}\n\np.sidebar-title {\n    font-weight: bold;\n}\n\n/* -- topics ---------------------------------------------------------------- */\n\ndiv.topic {\n    border: 1px solid #ccc;\n    padding: 7px 7px 0 7px;\n    margin: 10px 0 10px 0;\n}\n\np.topic-title {\n    font-size: 1.1em;\n    font-weight: bold;\n    margin-top: 10px;\n}\n\n/* -- admonitions ----------------------------------------------------------- */\n\ndiv.admonition {\n    margin-top: 10px;\n    margin-bottom: 10px;\n    padding: 7px;\n}\n\ndiv.admonition dt {\n    font-weight: bold;\n}\n\ndiv.admonition dl {\n    margin-bottom: 0;\n}\n\np.admonition-title {\n    margin: 0px 10px 5px 0px;\n    font-weight: bold;\n}\n\ndiv.body p.centered {\n    text-align: center;\n    margin-top: 25px;\n}\n\n/* -- tables ---------------------------------------------------------------- */\n\ntable.docutils {\n    border: 0;\n    border-collapse: collapse;\n}\n\ntable.align-center {\n    margin-left: auto;\n    margin-right: auto;\n}\n\ntable.align-default {\n    margin-left: auto;\n    margin-right: auto;\n}\n\ntable caption span.caption-number {\n    font-style: italic;\n}\n\ntable caption span.caption-text {\n}\n\ntable.docutils td, table.docutils th {\n    padding: 1px 8px 1px 5px;\n    border-top: 0;\n    border-left: 0;\n    border-right: 0;\n    border-bottom: 1px solid #aaa;\n}\n\ntable.footnote td, table.footnote th {\n    border: 0 !important;\n}\n\nth {\n    text-align: left;\n    padding-right: 5px;\n}\n\ntable.citation {\n    border-left: solid 1px gray;\n    margin-left: 1px;\n}\n\ntable.citation td {\n    border-bottom: none;\n}\n\nth > p:first-child,\ntd > p:first-child {\n    margin-top: 0px;\n}\n\nth > p:last-child,\ntd > p:last-child {\n    margin-bottom: 0px;\n}\n\n/* -- figures --------------------------------------------------------------- */\n\ndiv.figure {\n    margin: 0.5em;\n    padding: 0.5em;\n}\n\ndiv.figure p.caption {\n    padding: 0.3em;\n}\n\ndiv.figure p.caption span.caption-number {\n    font-style: italic;\n}\n\ndiv.figure p.caption span.caption-text {\n}\n\n/* -- field list styles ----------------------------------------------------- */\n\ntable.field-list td, table.field-list th {\n    border: 0 !important;\n}\n\n.field-list ul {\n    margin: 0;\n    padding-left: 1em;\n}\n\n.field-list p {\n    margin: 0;\n}\n\n.field-name {\n    -moz-hyphens: manual;\n    -ms-hyphens: manual;\n    -webkit-hyphens: manual;\n    hyphens: manual;\n}\n\n/* -- hlist styles ---------------------------------------------------------- */\n\ntable.hlist td {\n    vertical-align: top;\n}\n\n\n/* -- other body styles ----------------------------------------------------- */\n\nol.arabic {\n    list-style: decimal;\n}\n\nol.loweralpha {\n    list-style: lower-alpha;\n}\n\nol.upperalpha {\n    list-style: upper-alpha;\n}\n\nol.lowerroman {\n    list-style: lower-roman;\n}\n\nol.upperroman {\n    list-style: upper-roman;\n}\n\nli > p:first-child {\n    margin-top: 0px;\n}\n\nli > p:last-child {\n    margin-bottom: 0px;\n}\n\ndl.footnote > dt,\ndl.citation > dt {\n    float: left;\n}\n\ndl.footnote > dd,\ndl.citation > dd {\n    margin-bottom: 0em;\n}\n\ndl.footnote > dd:after,\ndl.citation > dd:after {\n    content: \"\";\n    clear: both;\n}\n\ndl.field-list {\n    display: grid;\n    grid-template-columns: fit-content(30%) auto;\n}\n\ndl.field-list > dt {\n    font-weight: bold;\n    word-break: break-word;\n    padding-left: 0.5em;\n    padding-right: 5px;\n}\n\ndl.field-list > dt:after {\n    content: \":\";\n}\n\ndl.field-list > dd {\n    padding-left: 0.5em;\n    margin-top: 0em;\n    margin-left: 0em;\n    margin-bottom: 0em;\n}\n\ndl {\n    margin-bottom: 15px;\n}\n\ndd > p:first-child {\n    margin-top: 0px;\n}\n\ndd ul, dd table {\n    margin-bottom: 10px;\n}\n\ndd {\n    margin-top: 3px;\n    margin-bottom: 10px;\n    margin-left: 30px;\n}\n\ndt:target, span.highlighted {\n    background-color: #fbe54e;\n}\n\nrect.highlighted {\n    fill: #fbe54e;\n}\n\ndl.glossary dt {\n    font-weight: bold;\n    font-size: 1.1em;\n}\n\n.optional {\n    font-size: 1.3em;\n}\n\n.sig-paren {\n    font-size: larger;\n}\n\n.versionmodified {\n    font-style: italic;\n}\n\n.system-message {\n    background-color: #fda;\n    padding: 5px;\n    border: 3px solid red;\n}\n\n.footnote:target  {\n    background-color: #ffa;\n}\n\n.line-block {\n    display: block;\n    margin-top: 1em;\n    margin-bottom: 1em;\n}\n\n.line-block .line-block {\n    margin-top: 0;\n    margin-bottom: 0;\n    margin-left: 1.5em;\n}\n\n.guilabel, .menuselection {\n    font-family: sans-serif;\n}\n\n.accelerator {\n    text-decoration: underline;\n}\n\n.classifier {\n    font-style: oblique;\n}\n\n.classifier:before {\n    font-style: normal;\n    margin: 0.5em;\n    content: \":\";\n}\n\nabbr, acronym {\n    border-bottom: dotted 1px;\n    cursor: help;\n}\n\n/* -- code displays --------------------------------------------------------- */\n\npre {\n    overflow: auto;\n    overflow-y: hidden;  /* fixes display issues on Chrome browsers */\n}\n\nspan.pre {\n    -moz-hyphens: none;\n    -ms-hyphens: none;\n    -webkit-hyphens: none;\n    hyphens: none;\n}\n\ntd.linenos pre {\n    padding: 5px 0px;\n    border: 0;\n    background-color: transparent;\n    color: #aaa;\n}\n\ntable.highlighttable {\n    margin-left: 0.5em;\n}\n\ntable.highlighttable td {\n    padding: 0 0.5em 0 0.5em;\n}\n\ndiv.code-block-caption {\n    padding: 2px 5px;\n    font-size: small;\n}\n\ndiv.code-block-caption code {\n    background-color: transparent;\n}\n\ndiv.code-block-caption + div > div.highlight > pre {\n    margin-top: 0;\n}\n\ndiv.code-block-caption span.caption-number {\n    padding: 0.1em 0.3em;\n    font-style: italic;\n}\n\ndiv.code-block-caption span.caption-text {\n}\n\ndiv.literal-block-wrapper {\n    padding: 1em 1em 0;\n}\n\ndiv.literal-block-wrapper div.highlight {\n    margin: 0;\n}\n\ncode.descname {\n    background-color: transparent;\n    font-weight: bold;\n    font-size: 1.2em;\n}\n\ncode.descclassname {\n    background-color: transparent;\n}\n\ncode.xref, a code {\n    background-color: transparent;\n    font-weight: bold;\n}\n\nh1 code, h2 code, h3 code, h4 code, h5 code, h6 code {\n    background-color: transparent;\n}\n\n.viewcode-link {\n    float: right;\n}\n\n.viewcode-back {\n    float: right;\n    font-family: sans-serif;\n}\n\ndiv.viewcode-block:target {\n    margin: -1px -10px;\n    padding: 0 10px;\n}\n\n/* -- math display ---------------------------------------------------------- */\n\nimg.math {\n    vertical-align: middle;\n}\n\ndiv.body div.math p {\n    text-align: center;\n}\n\nspan.eqno {\n    float: right;\n}\n\nspan.eqno a.headerlink {\n    position: relative;\n    left: 0px;\n    z-index: 1;\n}\n\ndiv.math:hover a.headerlink {\n    visibility: visible;\n}\n\n/* -- printout stylesheet --------------------------------------------------- */\n\n@media print {\n    div.document,\n    div.documentwrapper,\n    div.bodywrapper {\n        margin: 0 !important;\n        width: 100%;\n    }\n\n    div.sphinxsidebar,\n    div.related,\n    div.footer,\n    #top-link {\n        display: none;\n    }\n}"
  },
  {
    "path": "docs/_build/html/_static/css/badge_only.css",
    "content": "﻿.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:\"\"}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url(\"../fonts/fontawesome-webfont.eot\");src:url(\"../fonts/fontawesome-webfont.eot?#iefix\") format(\"embedded-opentype\"),url(\"../fonts/fontawesome-webfont.woff\") format(\"woff\"),url(\"../fonts/fontawesome-webfont.ttf\") format(\"truetype\"),url(\"../fonts/fontawesome-webfont.svg#FontAwesome\") format(\"svg\")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:\"\"}.icon-book:before{content:\"\"}.fa-caret-down:before{content:\"\"}.icon-caret-down:before{content:\"\"}.fa-caret-up:before{content:\"\"}.icon-caret-up:before{content:\"\"}.fa-caret-left:before{content:\"\"}.icon-caret-left:before{content:\"\"}.fa-caret-right:before{content:\"\"}.icon-caret-right:before{content:\"\"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:\"\"}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}\n"
  },
  {
    "path": "docs/_build/html/_static/css/theme.css",
    "content": "/* sphinx_rtd_theme version 0.4.2 | MIT license */\n/* Built 20181005 13:10 */\n*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:\"courier new\",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:\"\";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=\"button\"],input[type=\"reset\"],input[type=\"submit\"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=\"checkbox\"],input[type=\"radio\"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type=\"search\"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=\"search\"]::-webkit-search-decoration,input[type=\"search\"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^=\"javascript:\"]:after,a[href^=\"#\"]:after{content:\"\"}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition,.btn,input[type=\"text\"],input[type=\"password\"],input[type=\"email\"],input[type=\"url\"],input[type=\"date\"],input[type=\"month\"],input[type=\"time\"],input[type=\"datetime\"],input[type=\"datetime-local\"],input[type=\"week\"],input[type=\"number\"],input[type=\"search\"],input[type=\"tel\"],input[type=\"color\"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:\"\"}.clearfix:after{clear:both}/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */@font-face{font-family:'FontAwesome';src:url(\"../fonts/fontawesome-webfont.eot?v=4.7.0\");src:url(\"../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0\") format(\"embedded-opentype\"),url(\"../fonts/fontawesome-webfont.woff2?v=4.7.0\") format(\"woff2\"),url(\"../fonts/fontawesome-webfont.woff?v=4.7.0\") format(\"woff\"),url(\"../fonts/fontawesome-webfont.ttf?v=4.7.0\") format(\"truetype\"),url(\"../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular\") format(\"svg\");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.wy-menu-vertical li span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.rst-content .fa-pull-left.admonition-title,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content dl dt .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.rst-content code.download span.fa-pull-left:first-child,.fa-pull-left.icon{margin-right:.3em}.fa.fa-pull-right,.wy-menu-vertical li span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.rst-content .fa-pull-right.admonition-title,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content dl dt .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.rst-content code.download span.fa-pull-right:first-child,.fa-pull-right.icon{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\"}.fa-music:before{content:\"\"}.fa-search:before,.icon-search:before{content:\"\"}.fa-envelope-o:before{content:\"\"}.fa-heart:before{content:\"\"}.fa-star:before{content:\"\"}.fa-star-o:before{content:\"\"}.fa-user:before{content:\"\"}.fa-film:before{content:\"\"}.fa-th-large:before{content:\"\"}.fa-th:before{content:\"\"}.fa-th-list:before{content:\"\"}.fa-check:before{content:\"\"}.fa-remove:before,.fa-close:before,.fa-times:before{content:\"\"}.fa-search-plus:before{content:\"\"}.fa-search-minus:before{content:\"\"}.fa-power-off:before{content:\"\"}.fa-signal:before{content:\"\"}.fa-gear:before,.fa-cog:before{content:\"\"}.fa-trash-o:before{content:\"\"}.fa-home:before,.icon-home:before{content:\"\"}.fa-file-o:before{content:\"\"}.fa-clock-o:before{content:\"\"}.fa-road:before{content:\"\"}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:\"\"}.fa-arrow-circle-o-down:before{content:\"\"}.fa-arrow-circle-o-up:before{content:\"\"}.fa-inbox:before{content:\"\"}.fa-play-circle-o:before{content:\"\"}.fa-rotate-right:before,.fa-repeat:before{content:\"\"}.fa-refresh:before{content:\"\"}.fa-list-alt:before{content:\"\"}.fa-lock:before{content:\"\"}.fa-flag:before{content:\"\"}.fa-headphones:before{content:\"\"}.fa-volume-off:before{content:\"\"}.fa-volume-down:before{content:\"\"}.fa-volume-up:before{content:\"\"}.fa-qrcode:before{content:\"\"}.fa-barcode:before{content:\"\"}.fa-tag:before{content:\"\"}.fa-tags:before{content:\"\"}.fa-book:before,.icon-book:before{content:\"\"}.fa-bookmark:before{content:\"\"}.fa-print:before{content:\"\"}.fa-camera:before{content:\"\"}.fa-font:before{content:\"\"}.fa-bold:before{content:\"\"}.fa-italic:before{content:\"\"}.fa-text-height:before{content:\"\"}.fa-text-width:before{content:\"\"}.fa-align-left:before{content:\"\"}.fa-align-center:before{content:\"\"}.fa-align-right:before{content:\"\"}.fa-align-justify:before{content:\"\"}.fa-list:before{content:\"\"}.fa-dedent:before,.fa-outdent:before{content:\"\"}.fa-indent:before{content:\"\"}.fa-video-camera:before{content:\"\"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:\"\"}.fa-pencil:before{content:\"\"}.fa-map-marker:before{content:\"\"}.fa-adjust:before{content:\"\"}.fa-tint:before{content:\"\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\"}.fa-share-square-o:before{content:\"\"}.fa-check-square-o:before{content:\"\"}.fa-arrows:before{content:\"\"}.fa-step-backward:before{content:\"\"}.fa-fast-backward:before{content:\"\"}.fa-backward:before{content:\"\"}.fa-play:before{content:\"\"}.fa-pause:before{content:\"\"}.fa-stop:before{content:\"\"}.fa-forward:before{content:\"\"}.fa-fast-forward:before{content:\"\"}.fa-step-forward:before{content:\"\"}.fa-eject:before{content:\"\"}.fa-chevron-left:before{content:\"\"}.fa-chevron-right:before{content:\"\"}.fa-plus-circle:before{content:\"\"}.fa-minus-circle:before{content:\"\"}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:\"\"}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:\"\"}.fa-question-circle:before{content:\"\"}.fa-info-circle:before{content:\"\"}.fa-crosshairs:before{content:\"\"}.fa-times-circle-o:before{content:\"\"}.fa-check-circle-o:before{content:\"\"}.fa-ban:before{content:\"\"}.fa-arrow-left:before{content:\"\"}.fa-arrow-right:before{content:\"\"}.fa-arrow-up:before{content:\"\"}.fa-arrow-down:before{content:\"\"}.fa-mail-forward:before,.fa-share:before{content:\"\"}.fa-expand:before{content:\"\"}.fa-compress:before{content:\"\"}.fa-plus:before{content:\"\"}.fa-minus:before{content:\"\"}.fa-asterisk:before{content:\"\"}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:\"\"}.fa-gift:before{content:\"\"}.fa-leaf:before{content:\"\"}.fa-fire:before,.icon-fire:before{content:\"\"}.fa-eye:before{content:\"\"}.fa-eye-slash:before{content:\"\"}.fa-warning:before,.fa-exclamation-triangle:before{content:\"\"}.fa-plane:before{content:\"\"}.fa-calendar:before{content:\"\"}.fa-random:before{content:\"\"}.fa-comment:before{content:\"\"}.fa-magnet:before{content:\"\"}.fa-chevron-up:before{content:\"\"}.fa-chevron-down:before{content:\"\"}.fa-retweet:before{content:\"\"}.fa-shopping-cart:before{content:\"\"}.fa-folder:before{content:\"\"}.fa-folder-open:before{content:\"\"}.fa-arrows-v:before{content:\"\"}.fa-arrows-h:before{content:\"\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\"}.fa-twitter-square:before{content:\"\"}.fa-facebook-square:before{content:\"\"}.fa-camera-retro:before{content:\"\"}.fa-key:before{content:\"\"}.fa-gears:before,.fa-cogs:before{content:\"\"}.fa-comments:before{content:\"\"}.fa-thumbs-o-up:before{content:\"\"}.fa-thumbs-o-down:before{content:\"\"}.fa-star-half:before{content:\"\"}.fa-heart-o:before{content:\"\"}.fa-sign-out:before{content:\"\"}.fa-linkedin-square:before{content:\"\"}.fa-thumb-tack:before{content:\"\"}.fa-external-link:before{content:\"\"}.fa-sign-in:before{content:\"\"}.fa-trophy:before{content:\"\"}.fa-github-square:before{content:\"\"}.fa-upload:before{content:\"\"}.fa-lemon-o:before{content:\"\"}.fa-phone:before{content:\"\"}.fa-square-o:before{content:\"\"}.fa-bookmark-o:before{content:\"\"}.fa-phone-square:before{content:\"\"}.fa-twitter:before{content:\"\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\"}.fa-github:before,.icon-github:before{content:\"\"}.fa-unlock:before{content:\"\"}.fa-credit-card:before{content:\"\"}.fa-feed:before,.fa-rss:before{content:\"\"}.fa-hdd-o:before{content:\"\"}.fa-bullhorn:before{content:\"\"}.fa-bell:before{content:\"\"}.fa-certificate:before{content:\"\"}.fa-hand-o-right:before{content:\"\"}.fa-hand-o-left:before{content:\"\"}.fa-hand-o-up:before{content:\"\"}.fa-hand-o-down:before{content:\"\"}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:\"\"}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:\"\"}.fa-arrow-circle-up:before{content:\"\"}.fa-arrow-circle-down:before{content:\"\"}.fa-globe:before{content:\"\"}.fa-wrench:before{content:\"\"}.fa-tasks:before{content:\"\"}.fa-filter:before{content:\"\"}.fa-briefcase:before{content:\"\"}.fa-arrows-alt:before{content:\"\"}.fa-group:before,.fa-users:before{content:\"\"}.fa-chain:before,.fa-link:before,.icon-link:before{content:\"\"}.fa-cloud:before{content:\"\"}.fa-flask:before{content:\"\"}.fa-cut:before,.fa-scissors:before{content:\"\"}.fa-copy:before,.fa-files-o:before{content:\"\"}.fa-paperclip:before{content:\"\"}.fa-save:before,.fa-floppy-o:before{content:\"\"}.fa-square:before{content:\"\"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:\"\"}.fa-list-ul:before{content:\"\"}.fa-list-ol:before{content:\"\"}.fa-strikethrough:before{content:\"\"}.fa-underline:before{content:\"\"}.fa-table:before{content:\"\"}.fa-magic:before{content:\"\"}.fa-truck:before{content:\"\"}.fa-pinterest:before{content:\"\"}.fa-pinterest-square:before{content:\"\"}.fa-google-plus-square:before{content:\"\"}.fa-google-plus:before{content:\"\"}.fa-money:before{content:\"\"}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:\"\"}.fa-caret-up:before{content:\"\"}.fa-caret-left:before{content:\"\"}.fa-caret-right:before{content:\"\"}.fa-columns:before{content:\"\"}.fa-unsorted:before,.fa-sort:before{content:\"\"}.fa-sort-down:before,.fa-sort-desc:before{content:\"\"}.fa-sort-up:before,.fa-sort-asc:before{content:\"\"}.fa-envelope:before{content:\"\"}.fa-linkedin:before{content:\"\"}.fa-rotate-left:before,.fa-undo:before{content:\"\"}.fa-legal:before,.fa-gavel:before{content:\"\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\"}.fa-comment-o:before{content:\"\"}.fa-comments-o:before{content:\"\"}.fa-flash:before,.fa-bolt:before{content:\"\"}.fa-sitemap:before{content:\"\"}.fa-umbrella:before{content:\"\"}.fa-paste:before,.fa-clipboard:before{content:\"\"}.fa-lightbulb-o:before{content:\"\"}.fa-exchange:before{content:\"\"}.fa-cloud-download:before{content:\"\"}.fa-cloud-upload:before{content:\"\"}.fa-user-md:before{content:\"\"}.fa-stethoscope:before{content:\"\"}.fa-suitcase:before{content:\"\"}.fa-bell-o:before{content:\"\"}.fa-coffee:before{content:\"\"}.fa-cutlery:before{content:\"\"}.fa-file-text-o:before{content:\"\"}.fa-building-o:before{content:\"\"}.fa-hospital-o:before{content:\"\"}.fa-ambulance:before{content:\"\"}.fa-medkit:before{content:\"\"}.fa-fighter-jet:before{content:\"\"}.fa-beer:before{content:\"\"}.fa-h-square:before{content:\"\"}.fa-plus-square:before{content:\"\"}.fa-angle-double-left:before{content:\"\"}.fa-angle-double-right:before{content:\"\"}.fa-angle-double-up:before{content:\"\"}.fa-angle-double-down:before{content:\"\"}.fa-angle-left:before{content:\"\"}.fa-angle-right:before{content:\"\"}.fa-angle-up:before{content:\"\"}.fa-angle-down:before{content:\"\"}.fa-desktop:before{content:\"\"}.fa-laptop:before{content:\"\"}.fa-tablet:before{content:\"\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\"}.fa-circle-o:before{content:\"\"}.fa-quote-left:before{content:\"\"}.fa-quote-right:before{content:\"\"}.fa-spinner:before{content:\"\"}.fa-circle:before{content:\"\"}.fa-mail-reply:before,.fa-reply:before{content:\"\"}.fa-github-alt:before{content:\"\"}.fa-folder-o:before{content:\"\"}.fa-folder-open-o:before{content:\"\"}.fa-smile-o:before{content:\"\"}.fa-frown-o:before{content:\"\"}.fa-meh-o:before{content:\"\"}.fa-gamepad:before{content:\"\"}.fa-keyboard-o:before{content:\"\"}.fa-flag-o:before{content:\"\"}.fa-flag-checkered:before{content:\"\"}.fa-terminal:before{content:\"\"}.fa-code:before{content:\"\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\"}.fa-location-arrow:before{content:\"\"}.fa-crop:before{content:\"\"}.fa-code-fork:before{content:\"\"}.fa-unlink:before,.fa-chain-broken:before{content:\"\"}.fa-question:before{content:\"\"}.fa-info:before{content:\"\"}.fa-exclamation:before{content:\"\"}.fa-superscript:before{content:\"\"}.fa-subscript:before{content:\"\"}.fa-eraser:before{content:\"\"}.fa-puzzle-piece:before{content:\"\"}.fa-microphone:before{content:\"\"}.fa-microphone-slash:before{content:\"\"}.fa-shield:before{content:\"\"}.fa-calendar-o:before{content:\"\"}.fa-fire-extinguisher:before{content:\"\"}.fa-rocket:before{content:\"\"}.fa-maxcdn:before{content:\"\"}.fa-chevron-circle-left:before{content:\"\"}.fa-chevron-circle-right:before{content:\"\"}.fa-chevron-circle-up:before{content:\"\"}.fa-chevron-circle-down:before{content:\"\"}.fa-html5:before{content:\"\"}.fa-css3:before{content:\"\"}.fa-anchor:before{content:\"\"}.fa-unlock-alt:before{content:\"\"}.fa-bullseye:before{content:\"\"}.fa-ellipsis-h:before{content:\"\"}.fa-ellipsis-v:before{content:\"\"}.fa-rss-square:before{content:\"\"}.fa-play-circle:before{content:\"\"}.fa-ticket:before{content:\"\"}.fa-minus-square:before{content:\"\"}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:\"\"}.fa-level-up:before{content:\"\"}.fa-level-down:before{content:\"\"}.fa-check-square:before{content:\"\"}.fa-pencil-square:before{content:\"\"}.fa-external-link-square:before{content:\"\"}.fa-share-square:before{content:\"\"}.fa-compass:before{content:\"\"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:\"\"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:\"\"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:\"\"}.fa-euro:before,.fa-eur:before{content:\"\"}.fa-gbp:before{content:\"\"}.fa-dollar:before,.fa-usd:before{content:\"\"}.fa-rupee:before,.fa-inr:before{content:\"\"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:\"\"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:\"\"}.fa-won:before,.fa-krw:before{content:\"\"}.fa-bitcoin:before,.fa-btc:before{content:\"\"}.fa-file:before{content:\"\"}.fa-file-text:before{content:\"\"}.fa-sort-alpha-asc:before{content:\"\"}.fa-sort-alpha-desc:before{content:\"\"}.fa-sort-amount-asc:before{content:\"\"}.fa-sort-amount-desc:before{content:\"\"}.fa-sort-numeric-asc:before{content:\"\"}.fa-sort-numeric-desc:before{content:\"\"}.fa-thumbs-up:before{content:\"\"}.fa-thumbs-down:before{content:\"\"}.fa-youtube-square:before{content:\"\"}.fa-youtube:before{content:\"\"}.fa-xing:before{content:\"\"}.fa-xing-square:before{content:\"\"}.fa-youtube-play:before{content:\"\"}.fa-dropbox:before{content:\"\"}.fa-stack-overflow:before{content:\"\"}.fa-instagram:before{content:\"\"}.fa-flickr:before{content:\"\"}.fa-adn:before{content:\"\"}.fa-bitbucket:before,.icon-bitbucket:before{content:\"\"}.fa-bitbucket-square:before{content:\"\"}.fa-tumblr:before{content:\"\"}.fa-tumblr-square:before{content:\"\"}.fa-long-arrow-down:before{content:\"\"}.fa-long-arrow-up:before{content:\"\"}.fa-long-arrow-left:before{content:\"\"}.fa-long-arrow-right:before{content:\"\"}.fa-apple:before{content:\"\"}.fa-windows:before{content:\"\"}.fa-android:before{content:\"\"}.fa-linux:before{content:\"\"}.fa-dribbble:before{content:\"\"}.fa-skype:before{content:\"\"}.fa-foursquare:before{content:\"\"}.fa-trello:before{content:\"\"}.fa-female:before{content:\"\"}.fa-male:before{content:\"\"}.fa-gittip:before,.fa-gratipay:before{content:\"\"}.fa-sun-o:before{content:\"\"}.fa-moon-o:before{content:\"\"}.fa-archive:before{content:\"\"}.fa-bug:before{content:\"\"}.fa-vk:before{content:\"\"}.fa-weibo:before{content:\"\"}.fa-renren:before{content:\"\"}.fa-pagelines:before{content:\"\"}.fa-stack-exchange:before{content:\"\"}.fa-arrow-circle-o-right:before{content:\"\"}.fa-arrow-circle-o-left:before{content:\"\"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:\"\"}.fa-dot-circle-o:before{content:\"\"}.fa-wheelchair:before{content:\"\"}.fa-vimeo-square:before{content:\"\"}.fa-turkish-lira:before,.fa-try:before{content:\"\"}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:\"\"}.fa-space-shuttle:before{content:\"\"}.fa-slack:before{content:\"\"}.fa-envelope-square:before{content:\"\"}.fa-wordpress:before{content:\"\"}.fa-openid:before{content:\"\"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:\"\"}.fa-mortar-board:before,.fa-graduation-cap:before{content:\"\"}.fa-yahoo:before{content:\"\"}.fa-google:before{content:\"\"}.fa-reddit:before{content:\"\"}.fa-reddit-square:before{content:\"\"}.fa-stumbleupon-circle:before{content:\"\"}.fa-stumbleupon:before{content:\"\"}.fa-delicious:before{content:\"\"}.fa-digg:before{content:\"\"}.fa-pied-piper-pp:before{content:\"\"}.fa-pied-piper-alt:before{content:\"\"}.fa-drupal:before{content:\"\"}.fa-joomla:before{content:\"\"}.fa-language:before{content:\"\"}.fa-fax:before{content:\"\"}.fa-building:before{content:\"\"}.fa-child:before{content:\"\"}.fa-paw:before{content:\"\"}.fa-spoon:before{content:\"\"}.fa-cube:before{content:\"\"}.fa-cubes:before{content:\"\"}.fa-behance:before{content:\"\"}.fa-behance-square:before{content:\"\"}.fa-steam:before{content:\"\"}.fa-steam-square:before{content:\"\"}.fa-recycle:before{content:\"\"}.fa-automobile:before,.fa-car:before{content:\"\"}.fa-cab:before,.fa-taxi:before{content:\"\"}.fa-tree:before{content:\"\"}.fa-spotify:before{content:\"\"}.fa-deviantart:before{content:\"\"}.fa-soundcloud:before{content:\"\"}.fa-database:before{content:\"\"}.fa-file-pdf-o:before{content:\"\"}.fa-file-word-o:before{content:\"\"}.fa-file-excel-o:before{content:\"\"}.fa-file-powerpoint-o:before{content:\"\"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:\"\"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:\"\"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:\"\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\"}.fa-file-code-o:before{content:\"\"}.fa-vine:before{content:\"\"}.fa-codepen:before{content:\"\"}.fa-jsfiddle:before{content:\"\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:\"\"}.fa-circle-o-notch:before{content:\"\"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:\"\"}.fa-ge:before,.fa-empire:before{content:\"\"}.fa-git-square:before{content:\"\"}.fa-git:before{content:\"\"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:\"\"}.fa-tencent-weibo:before{content:\"\"}.fa-qq:before{content:\"\"}.fa-wechat:before,.fa-weixin:before{content:\"\"}.fa-send:before,.fa-paper-plane:before{content:\"\"}.fa-send-o:before,.fa-paper-plane-o:before{content:\"\"}.fa-history:before{content:\"\"}.fa-circle-thin:before{content:\"\"}.fa-header:before{content:\"\"}.fa-paragraph:before{content:\"\"}.fa-sliders:before{content:\"\"}.fa-share-alt:before{content:\"\"}.fa-share-alt-square:before{content:\"\"}.fa-bomb:before{content:\"\"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:\"\"}.fa-tty:before{content:\"\"}.fa-binoculars:before{content:\"\"}.fa-plug:before{content:\"\"}.fa-slideshare:before{content:\"\"}.fa-twitch:before{content:\"\"}.fa-yelp:before{content:\"\"}.fa-newspaper-o:before{content:\"\"}.fa-wifi:before{content:\"\"}.fa-calculator:before{content:\"\"}.fa-paypal:before{content:\"\"}.fa-google-wallet:before{content:\"\"}.fa-cc-visa:before{content:\"\"}.fa-cc-mastercard:before{content:\"\"}.fa-cc-discover:before{content:\"\"}.fa-cc-amex:before{content:\"\"}.fa-cc-paypal:before{content:\"\"}.fa-cc-stripe:before{content:\"\"}.fa-bell-slash:before{content:\"\"}.fa-bell-slash-o:before{content:\"\"}.fa-trash:before{content:\"\"}.fa-copyright:before{content:\"\"}.fa-at:before{content:\"\"}.fa-eyedropper:before{content:\"\"}.fa-paint-brush:before{content:\"\"}.fa-birthday-cake:before{content:\"\"}.fa-area-chart:before{content:\"\"}.fa-pie-chart:before{content:\"\"}.fa-line-chart:before{content:\"\"}.fa-lastfm:before{content:\"\"}.fa-lastfm-square:before{content:\"\"}.fa-toggle-off:before{content:\"\"}.fa-toggle-on:before{content:\"\"}.fa-bicycle:before{content:\"\"}.fa-bus:before{content:\"\"}.fa-ioxhost:before{content:\"\"}.fa-angellist:before{content:\"\"}.fa-cc:before{content:\"\"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:\"\"}.fa-meanpath:before{content:\"\"}.fa-buysellads:before{content:\"\"}.fa-connectdevelop:before{content:\"\"}.fa-dashcube:before{content:\"\"}.fa-forumbee:before{content:\"\"}.fa-leanpub:before{content:\"\"}.fa-sellsy:before{content:\"\"}.fa-shirtsinbulk:before{content:\"\"}.fa-simplybuilt:before{content:\"\"}.fa-skyatlas:before{content:\"\"}.fa-cart-plus:before{content:\"\"}.fa-cart-arrow-down:before{content:\"\"}.fa-diamond:before{content:\"\"}.fa-ship:before{content:\"\"}.fa-user-secret:before{content:\"\"}.fa-motorcycle:before{content:\"\"}.fa-street-view:before{content:\"\"}.fa-heartbeat:before{content:\"\"}.fa-venus:before{content:\"\"}.fa-mars:before{content:\"\"}.fa-mercury:before{content:\"\"}.fa-intersex:before,.fa-transgender:before{content:\"\"}.fa-transgender-alt:before{content:\"\"}.fa-venus-double:before{content:\"\"}.fa-mars-double:before{content:\"\"}.fa-venus-mars:before{content:\"\"}.fa-mars-stroke:before{content:\"\"}.fa-mars-stroke-v:before{content:\"\"}.fa-mars-stroke-h:before{content:\"\"}.fa-neuter:before{content:\"\"}.fa-genderless:before{content:\"\"}.fa-facebook-official:before{content:\"\"}.fa-pinterest-p:before{content:\"\"}.fa-whatsapp:before{content:\"\"}.fa-server:before{content:\"\"}.fa-user-plus:before{content:\"\"}.fa-user-times:before{content:\"\"}.fa-hotel:before,.fa-bed:before{content:\"\"}.fa-viacoin:before{content:\"\"}.fa-train:before{content:\"\"}.fa-subway:before{content:\"\"}.fa-medium:before{content:\"\"}.fa-yc:before,.fa-y-combinator:before{content:\"\"}.fa-optin-monster:before{content:\"\"}.fa-opencart:before{content:\"\"}.fa-expeditedssl:before{content:\"\"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:\"\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\"}.fa-mouse-pointer:before{content:\"\"}.fa-i-cursor:before{content:\"\"}.fa-object-group:before{content:\"\"}.fa-object-ungroup:before{content:\"\"}.fa-sticky-note:before{content:\"\"}.fa-sticky-note-o:before{content:\"\"}.fa-cc-jcb:before{content:\"\"}.fa-cc-diners-club:before{content:\"\"}.fa-clone:before{content:\"\"}.fa-balance-scale:before{content:\"\"}.fa-hourglass-o:before{content:\"\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\"}.fa-hourglass:before{content:\"\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:\"\"}.fa-hand-scissors-o:before{content:\"\"}.fa-hand-lizard-o:before{content:\"\"}.fa-hand-spock-o:before{content:\"\"}.fa-hand-pointer-o:before{content:\"\"}.fa-hand-peace-o:before{content:\"\"}.fa-trademark:before{content:\"\"}.fa-registered:before{content:\"\"}.fa-creative-commons:before{content:\"\"}.fa-gg:before{content:\"\"}.fa-gg-circle:before{content:\"\"}.fa-tripadvisor:before{content:\"\"}.fa-odnoklassniki:before{content:\"\"}.fa-odnoklassniki-square:before{content:\"\"}.fa-get-pocket:before{content:\"\"}.fa-wikipedia-w:before{content:\"\"}.fa-safari:before{content:\"\"}.fa-chrome:before{content:\"\"}.fa-firefox:before{content:\"\"}.fa-opera:before{content:\"\"}.fa-internet-explorer:before{content:\"\"}.fa-tv:before,.fa-television:before{content:\"\"}.fa-contao:before{content:\"\"}.fa-500px:before{content:\"\"}.fa-amazon:before{content:\"\"}.fa-calendar-plus-o:before{content:\"\"}.fa-calendar-minus-o:before{content:\"\"}.fa-calendar-times-o:before{content:\"\"}.fa-calendar-check-o:before{content:\"\"}.fa-industry:before{content:\"\"}.fa-map-pin:before{content:\"\"}.fa-map-signs:before{content:\"\"}.fa-map-o:before{content:\"\"}.fa-map:before{content:\"\"}.fa-commenting:before{content:\"\"}.fa-commenting-o:before{content:\"\"}.fa-houzz:before{content:\"\"}.fa-vimeo:before{content:\"\"}.fa-black-tie:before{content:\"\"}.fa-fonticons:before{content:\"\"}.fa-reddit-alien:before{content:\"\"}.fa-edge:before{content:\"\"}.fa-credit-card-alt:before{content:\"\"}.fa-codiepie:before{content:\"\"}.fa-modx:before{content:\"\"}.fa-fort-awesome:before{content:\"\"}.fa-usb:before{content:\"\"}.fa-product-hunt:before{content:\"\"}.fa-mixcloud:before{content:\"\"}.fa-scribd:before{content:\"\"}.fa-pause-circle:before{content:\"\"}.fa-pause-circle-o:before{content:\"\"}.fa-stop-circle:before{content:\"\"}.fa-stop-circle-o:before{content:\"\"}.fa-shopping-bag:before{content:\"\"}.fa-shopping-basket:before{content:\"\"}.fa-hashtag:before{content:\"\"}.fa-bluetooth:before{content:\"\"}.fa-bluetooth-b:before{content:\"\"}.fa-percent:before{content:\"\"}.fa-gitlab:before,.icon-gitlab:before{content:\"\"}.fa-wpbeginner:before{content:\"\"}.fa-wpforms:before{content:\"\"}.fa-envira:before{content:\"\"}.fa-universal-access:before{content:\"\"}.fa-wheelchair-alt:before{content:\"\"}.fa-question-circle-o:before{content:\"\"}.fa-blind:before{content:\"\"}.fa-audio-description:before{content:\"\"}.fa-volume-control-phone:before{content:\"\"}.fa-braille:before{content:\"\"}.fa-assistive-listening-systems:before{content:\"\"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:\"\"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:\"\"}.fa-glide:before{content:\"\"}.fa-glide-g:before{content:\"\"}.fa-signing:before,.fa-sign-language:before{content:\"\"}.fa-low-vision:before{content:\"\"}.fa-viadeo:before{content:\"\"}.fa-viadeo-square:before{content:\"\"}.fa-snapchat:before{content:\"\"}.fa-snapchat-ghost:before{content:\"\"}.fa-snapchat-square:before{content:\"\"}.fa-pied-piper:before{content:\"\"}.fa-first-order:before{content:\"\"}.fa-yoast:before{content:\"\"}.fa-themeisle:before{content:\"\"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:\"\"}.fa-fa:before,.fa-font-awesome:before{content:\"\"}.fa-handshake-o:before{content:\"\"}.fa-envelope-open:before{content:\"\"}.fa-envelope-open-o:before{content:\"\"}.fa-linode:before{content:\"\"}.fa-address-book:before{content:\"\"}.fa-address-book-o:before{content:\"\"}.fa-vcard:before,.fa-address-card:before{content:\"\"}.fa-vcard-o:before,.fa-address-card-o:before{content:\"\"}.fa-user-circle:before{content:\"\"}.fa-user-circle-o:before{content:\"\"}.fa-user-o:before{content:\"\"}.fa-id-badge:before{content:\"\"}.fa-drivers-license:before,.fa-id-card:before{content:\"\"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:\"\"}.fa-quora:before{content:\"\"}.fa-free-code-camp:before{content:\"\"}.fa-telegram:before{content:\"\"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:\"\"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:\"\"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:\"\"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:\"\"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:\"\"}.fa-shower:before{content:\"\"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:\"\"}.fa-podcast:before{content:\"\"}.fa-window-maximize:before{content:\"\"}.fa-window-minimize:before{content:\"\"}.fa-window-restore:before{content:\"\"}.fa-times-rectangle:before,.fa-window-close:before{content:\"\"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:\"\"}.fa-bandcamp:before{content:\"\"}.fa-grav:before{content:\"\"}.fa-etsy:before{content:\"\"}.fa-imdb:before{content:\"\"}.fa-ravelry:before{content:\"\"}.fa-eercast:before{content:\"\"}.fa-microchip:before{content:\"\"}.fa-snowflake-o:before{content:\"\"}.fa-superpowers:before{content:\"\"}.fa-wpexplorer:before{content:\"\"}.fa-meetup:before{content:\"\"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:\"FontAwesome\";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content table>caption .headerlink,.rst-content table>caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content table>caption .headerlink,.rst-content table>caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content table>caption .headerlink,.rst-content table>caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.admonition{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo,.rst-content .wy-alert-warning.admonition{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title,.rst-content .wy-alert-warning.admonition .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.admonition{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.admonition{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.admonition{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a{color:#FFF}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#FFF}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#FFF !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#FFF;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:\"\"}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#FFF;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=\"search\"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#FFF;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:\" \";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 .3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:\"\"}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:\"\"}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:\" *\";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type=\"text\"],.wy-control-group .wy-form-full input[type=\"password\"],.wy-control-group .wy-form-full input[type=\"email\"],.wy-control-group .wy-form-full input[type=\"url\"],.wy-control-group .wy-form-full input[type=\"date\"],.wy-control-group .wy-form-full input[type=\"month\"],.wy-control-group .wy-form-full input[type=\"time\"],.wy-control-group .wy-form-full input[type=\"datetime\"],.wy-control-group .wy-form-full input[type=\"datetime-local\"],.wy-control-group .wy-form-full input[type=\"week\"],.wy-control-group .wy-form-full input[type=\"number\"],.wy-control-group .wy-form-full input[type=\"search\"],.wy-control-group .wy-form-full input[type=\"tel\"],.wy-control-group .wy-form-full input[type=\"color\"],.wy-control-group .wy-form-halves input[type=\"text\"],.wy-control-group .wy-form-halves input[type=\"password\"],.wy-control-group .wy-form-halves input[type=\"email\"],.wy-control-group .wy-form-halves input[type=\"url\"],.wy-control-group .wy-form-halves input[type=\"date\"],.wy-control-group .wy-form-halves input[type=\"month\"],.wy-control-group .wy-form-halves input[type=\"time\"],.wy-control-group .wy-form-halves input[type=\"datetime\"],.wy-control-group .wy-form-halves input[type=\"datetime-local\"],.wy-control-group .wy-form-halves input[type=\"week\"],.wy-control-group .wy-form-halves input[type=\"number\"],.wy-control-group .wy-form-halves input[type=\"search\"],.wy-control-group .wy-form-halves input[type=\"tel\"],.wy-control-group .wy-form-halves input[type=\"color\"],.wy-control-group .wy-form-thirds input[type=\"text\"],.wy-control-group .wy-form-thirds input[type=\"password\"],.wy-control-group .wy-form-thirds input[type=\"email\"],.wy-control-group .wy-form-thirds input[type=\"url\"],.wy-control-group .wy-form-thirds input[type=\"date\"],.wy-control-group .wy-form-thirds input[type=\"month\"],.wy-control-group .wy-form-thirds input[type=\"time\"],.wy-control-group .wy-form-thirds input[type=\"datetime\"],.wy-control-group .wy-form-thirds input[type=\"datetime-local\"],.wy-control-group .wy-form-thirds input[type=\"week\"],.wy-control-group .wy-form-thirds input[type=\"number\"],.wy-control-group .wy-form-thirds input[type=\"search\"],.wy-control-group .wy-form-thirds input[type=\"tel\"],.wy-control-group .wy-form-thirds input[type=\"color\"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.3576515979%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.3576515979%;width:48.821174201%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.3576515979%;width:31.7615656014%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type=\"text\"],.wy-control-group.fluid-input input[type=\"password\"],.wy-control-group.fluid-input input[type=\"email\"],.wy-control-group.fluid-input input[type=\"url\"],.wy-control-group.fluid-input input[type=\"date\"],.wy-control-group.fluid-input input[type=\"month\"],.wy-control-group.fluid-input input[type=\"time\"],.wy-control-group.fluid-input input[type=\"datetime\"],.wy-control-group.fluid-input input[type=\"datetime-local\"],.wy-control-group.fluid-input input[type=\"week\"],.wy-control-group.fluid-input input[type=\"number\"],.wy-control-group.fluid-input input[type=\"search\"],.wy-control-group.fluid-input input[type=\"tel\"],.wy-control-group.fluid-input input[type=\"color\"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=\"button\"],input[type=\"reset\"],input[type=\"submit\"]{-webkit-appearance:button;cursor:pointer;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;*overflow:visible}input[type=\"text\"],input[type=\"password\"],input[type=\"email\"],input[type=\"url\"],input[type=\"date\"],input[type=\"month\"],input[type=\"time\"],input[type=\"datetime\"],input[type=\"datetime-local\"],input[type=\"week\"],input[type=\"number\"],input[type=\"search\"],input[type=\"tel\"],input[type=\"color\"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=\"datetime-local\"]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=\"checkbox\"],input[type=\"radio\"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=\"search\"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=\"search\"]::-webkit-search-cancel-button,input[type=\"search\"]::-webkit-search-decoration{-webkit-appearance:none}input[type=\"text\"]:focus,input[type=\"password\"]:focus,input[type=\"email\"]:focus,input[type=\"url\"]:focus,input[type=\"date\"]:focus,input[type=\"month\"]:focus,input[type=\"time\"]:focus,input[type=\"datetime\"]:focus,input[type=\"datetime-local\"]:focus,input[type=\"week\"]:focus,input[type=\"number\"]:focus,input[type=\"search\"]:focus,input[type=\"tel\"]:focus,input[type=\"color\"]:focus{outline:0;outline:thin dotted \\9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type=\"file\"]:focus,input[type=\"radio\"]:focus,input[type=\"checkbox\"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type=\"text\"][disabled],input[type=\"password\"][disabled],input[type=\"email\"][disabled],input[type=\"url\"][disabled],input[type=\"date\"][disabled],input[type=\"month\"][disabled],input[type=\"time\"][disabled],input[type=\"datetime\"][disabled],input[type=\"datetime-local\"][disabled],input[type=\"week\"][disabled],input[type=\"number\"][disabled],input[type=\"search\"][disabled],input[type=\"tel\"][disabled],input[type=\"color\"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type=\"file\"]:focus:invalid:focus,input[type=\"radio\"]:focus:invalid:focus,input[type=\"checkbox\"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=\"radio\"][disabled],input[type=\"checkbox\"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{position:absolute;content:\"\";display:block;left:0;top:0;width:36px;height:12px;border-radius:4px;background:#ccc;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{position:absolute;content:\"\";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27AE60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type=\"text\"],.wy-control-group.wy-control-group-error input[type=\"password\"],.wy-control-group.wy-control-group-error input[type=\"email\"],.wy-control-group.wy-control-group-error input[type=\"url\"],.wy-control-group.wy-control-group-error input[type=\"date\"],.wy-control-group.wy-control-group-error input[type=\"month\"],.wy-control-group.wy-control-group-error input[type=\"time\"],.wy-control-group.wy-control-group-error input[type=\"datetime\"],.wy-control-group.wy-control-group-error input[type=\"datetime-local\"],.wy-control-group.wy-control-group-error input[type=\"week\"],.wy-control-group.wy-control-group-error input[type=\"number\"],.wy-control-group.wy-control-group-error input[type=\"search\"],.wy-control-group.wy-control-group-error input[type=\"tel\"],.wy-control-group.wy-control-group-error input[type=\"color\"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#FFF}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type=\"submit\"]{margin:.7em 0 0}.wy-form input[type=\"text\"],.wy-form input[type=\"password\"],.wy-form input[type=\"email\"],.wy-form input[type=\"url\"],.wy-form input[type=\"date\"],.wy-form input[type=\"month\"],.wy-form input[type=\"time\"],.wy-form input[type=\"datetime\"],.wy-form input[type=\"datetime-local\"],.wy-form input[type=\"week\"],.wy-form input[type=\"number\"],.wy-form input[type=\"search\"],.wy-form input[type=\"tel\"],.wy-form input[type=\"color\"]{margin-bottom:.3em;display:block}.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=\"password\"],.wy-form input[type=\"email\"],.wy-form input[type=\"url\"],.wy-form input[type=\"date\"],.wy-form input[type=\"month\"],.wy-form input[type=\"time\"],.wy-form input[type=\"datetime\"],.wy-form input[type=\"datetime-local\"],.wy-form input[type=\"week\"],.wy-form input[type=\"number\"],.wy-form input[type=\"search\"],.wy-form input[type=\"tel\"],.wy-form input[type=\"color\"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#448C59;text-decoration:none;cursor:pointer}a:hover{color:#698C44}a:visited{color:#448C89}html{height:100%;overflow-x:hidden}body{font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#FFF !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:\"Roboto Slab\",\"ff-tisa-web-pro\",\"Georgia\",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:before,.wy-breadcrumbs:after{display:table;content:\"\"}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:\"\"}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin-bottom:0;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a{color:#404040}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#FFF;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#FFF;text-align:center;padding:.809em;display:block;color:#fcfcfc;margin-bottom:.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em auto;height:45px;width:45px;background-color:#FFF;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#FFF}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#FFF;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#FFF;color:#404040;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:\"\"}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#404040;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#FFF;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:gray}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",Courier,monospace;font-size:1em;background:none;border:none;color:gray}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{width:100%}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:\"\"}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:before,.rst-breadcrumbs-buttons:after{display:table;content:\"\"}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1100px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:\"Lato\",\"proxima-nova\",\"Helvetica Neue\",Arial,sans-serif;z-index:400}.rst-versions a{color:#FFF;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:\"\"}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:\"\";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",Courier,monospace;display:block;overflow:auto}.rst-content pre.literal-block,.rst-content div[class^='highlight']{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px 0}.rst-content pre.literal-block div[class^='highlight'],.rst-content div[class^='highlight'] div[class^='highlight']{padding:0px;border:none;margin:0}.rst-content div[class^='highlight'] td.code{width:100%}.rst-content .linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;display:block;overflow:auto}.rst-content div[class^='highlight'] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content pre.literal-block,.rst-content div[class^='highlight'] pre,.rst-content .linenodiv pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",Courier,monospace;font-size:12px;line-height:1.4}@media print{.rst-content .codeblock,.rst-content div[class^='highlight'],.rst-content div[class^='highlight'] pre{white-space:pre-wrap}}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last,.rst-content .admonition .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .line-block{margin-left:0px;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:\"\";font-family:FontAwesome}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:\"Roboto Slab\",\"ff-tisa-web-pro\",\"Georgia\",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-0.4em;line-height:0;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:gray}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}.rst-content table.docutils td .last,.rst-content table.docutils td .last :last-child{margin-bottom:0}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content tt,.rst-content tt,.rst-content code{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",Courier,monospace;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content pre,.rst-content kbd,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",Courier,monospace}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#FFF}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold;margin-bottom:12px}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#448C59;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-weight:normal;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child,.rst-content code.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:\"Lato\";src:url(\"../fonts/Lato/lato-regular.eot\");src:url(\"../fonts/Lato/lato-regular.eot?#iefix\") format(\"embedded-opentype\"),url(\"../fonts/Lato/lato-regular.woff2\") format(\"woff2\"),url(\"../fonts/Lato/lato-regular.woff\") format(\"woff\"),url(\"../fonts/Lato/lato-regular.ttf\") format(\"truetype\");font-weight:400;font-style:normal}@font-face{font-family:\"Lato\";src:url(\"../fonts/Lato/lato-bold.eot\");src:url(\"../fonts/Lato/lato-bold.eot?#iefix\") format(\"embedded-opentype\"),url(\"../fonts/Lato/lato-bold.woff2\") format(\"woff2\"),url(\"../fonts/Lato/lato-bold.woff\") format(\"woff\"),url(\"../fonts/Lato/lato-bold.ttf\") format(\"truetype\");font-weight:700;font-style:normal}@font-face{font-family:\"Lato\";src:url(\"../fonts/Lato/lato-bolditalic.eot\");src:url(\"../fonts/Lato/lato-bolditalic.eot?#iefix\") format(\"embedded-opentype\"),url(\"../fonts/Lato/lato-bolditalic.woff2\") format(\"woff2\"),url(\"../fonts/Lato/lato-bolditalic.woff\") format(\"woff\"),url(\"../fonts/Lato/lato-bolditalic.ttf\") format(\"truetype\");font-weight:700;font-style:italic}@font-face{font-family:\"Lato\";src:url(\"../fonts/Lato/lato-italic.eot\");src:url(\"../fonts/Lato/lato-italic.eot?#iefix\") format(\"embedded-opentype\"),url(\"../fonts/Lato/lato-italic.woff2\") format(\"woff2\"),url(\"../fonts/Lato/lato-italic.woff\") format(\"woff\"),url(\"../fonts/Lato/lato-italic.ttf\") format(\"truetype\");font-weight:400;font-style:italic}@font-face{font-family:\"Roboto Slab\";font-style:normal;font-weight:400;src:url(\"../fonts/RobotoSlab/roboto-slab.eot\");src:url(\"../fonts/RobotoSlab/roboto-slab-v7-regular.eot?#iefix\") format(\"embedded-opentype\"),url(\"../fonts/RobotoSlab/roboto-slab-v7-regular.woff2\") format(\"woff2\"),url(\"../fonts/RobotoSlab/roboto-slab-v7-regular.woff\") format(\"woff\"),url(\"../fonts/RobotoSlab/roboto-slab-v7-regular.ttf\") format(\"truetype\")}@font-face{font-family:\"Roboto Slab\";font-style:normal;font-weight:700;src:url(\"../fonts/RobotoSlab/roboto-slab-v7-bold.eot\");src:url(\"../fonts/RobotoSlab/roboto-slab-v7-bold.eot?#iefix\") format(\"embedded-opentype\"),url(\"../fonts/RobotoSlab/roboto-slab-v7-bold.woff2\") format(\"woff2\"),url(\"../fonts/RobotoSlab/roboto-slab-v7-bold.woff\") format(\"woff\"),url(\"../fonts/RobotoSlab/roboto-slab-v7-bold.ttf\") format(\"truetype\")}\n"
  },
  {
    "path": "docs/_build/html/_static/doctools.js",
    "content": "/*\n * doctools.js\n * ~~~~~~~~~~~\n *\n * Sphinx JavaScript utilities for all documentation.\n *\n * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.\n * :license: BSD, see LICENSE for details.\n *\n */\n\n/**\n * select a different prefix for underscore\n */\n$u = _.noConflict();\n\n/**\n * make the code below compatible with browsers without\n * an installed firebug like debugger\nif (!window.console || !console.firebug) {\n  var names = [\"log\", \"debug\", \"info\", \"warn\", \"error\", \"assert\", \"dir\",\n    \"dirxml\", \"group\", \"groupEnd\", \"time\", \"timeEnd\", \"count\", \"trace\",\n    \"profile\", \"profileEnd\"];\n  window.console = {};\n  for (var i = 0; i < names.length; ++i)\n    window.console[names[i]] = function() {};\n}\n */\n\n/**\n * small helper function to urldecode strings\n */\njQuery.urldecode = function(x) {\n  return decodeURIComponent(x).replace(/\\+/g, ' ');\n};\n\n/**\n * small helper function to urlencode strings\n */\njQuery.urlencode = encodeURIComponent;\n\n/**\n * This function returns the parsed url parameters of the\n * current request. Multiple values per key are supported,\n * it will always return arrays of strings for the value parts.\n */\njQuery.getQueryParameters = function(s) {\n  if (typeof s === 'undefined')\n    s = document.location.search;\n  var parts = s.substr(s.indexOf('?') + 1).split('&');\n  var result = {};\n  for (var i = 0; i < parts.length; i++) {\n    var tmp = parts[i].split('=', 2);\n    var key = jQuery.urldecode(tmp[0]);\n    var value = jQuery.urldecode(tmp[1]);\n    if (key in result)\n      result[key].push(value);\n    else\n      result[key] = [value];\n  }\n  return result;\n};\n\n/**\n * highlight a given string on a jquery object by wrapping it in\n * span elements with the given class name.\n */\njQuery.fn.highlightText = function(text, className) {\n  function highlight(node, addItems) {\n    if (node.nodeType === 3) {\n      var val = node.nodeValue;\n      var pos = val.toLowerCase().indexOf(text);\n      if (pos >= 0 &&\n          !jQuery(node.parentNode).hasClass(className) &&\n          !jQuery(node.parentNode).hasClass(\"nohighlight\")) {\n        var span;\n        var isInSVG = jQuery(node).closest(\"body, svg, foreignObject\").is(\"svg\");\n        if (isInSVG) {\n          span = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n        } else {\n          span = document.createElement(\"span\");\n          span.className = className;\n        }\n        span.appendChild(document.createTextNode(val.substr(pos, text.length)));\n        node.parentNode.insertBefore(span, node.parentNode.insertBefore(\n          document.createTextNode(val.substr(pos + text.length)),\n          node.nextSibling));\n        node.nodeValue = val.substr(0, pos);\n        if (isInSVG) {\n          var rect = document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n          var bbox = node.parentElement.getBBox();\n          rect.x.baseVal.value = bbox.x;\n          rect.y.baseVal.value = bbox.y;\n          rect.width.baseVal.value = bbox.width;\n          rect.height.baseVal.value = bbox.height;\n          rect.setAttribute('class', className);\n          addItems.push({\n              \"parent\": node.parentNode,\n              \"target\": rect});\n        }\n      }\n    }\n    else if (!jQuery(node).is(\"button, select, textarea\")) {\n      jQuery.each(node.childNodes, function() {\n        highlight(this, addItems);\n      });\n    }\n  }\n  var addItems = [];\n  var result = this.each(function() {\n    highlight(this, addItems);\n  });\n  for (var i = 0; i < addItems.length; ++i) {\n    jQuery(addItems[i].parent).before(addItems[i].target);\n  }\n  return result;\n};\n\n/*\n * backward compatibility for jQuery.browser\n * This will be supported until firefox bug is fixed.\n */\nif (!jQuery.browser) {\n  jQuery.uaMatch = function(ua) {\n    ua = ua.toLowerCase();\n\n    var match = /(chrome)[ \\/]([\\w.]+)/.exec(ua) ||\n      /(webkit)[ \\/]([\\w.]+)/.exec(ua) ||\n      /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(ua) ||\n      /(msie) ([\\w.]+)/.exec(ua) ||\n      ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) ||\n      [];\n\n    return {\n      browser: match[ 1 ] || \"\",\n      version: match[ 2 ] || \"0\"\n    };\n  };\n  jQuery.browser = {};\n  jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;\n}\n\n/**\n * Small JavaScript module for the documentation.\n */\nvar Documentation = {\n\n  init : function() {\n    this.fixFirefoxAnchorBug();\n    this.highlightSearchWords();\n    this.initIndexTable();\n    if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {\n      this.initOnKeyListeners();\n    }\n  },\n\n  /**\n   * i18n support\n   */\n  TRANSLATIONS : {},\n  PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },\n  LOCALE : 'unknown',\n\n  // gettext and ngettext don't access this so that the functions\n  // can safely bound to a different name (_ = Documentation.gettext)\n  gettext : function(string) {\n    var translated = Documentation.TRANSLATIONS[string];\n    if (typeof translated === 'undefined')\n      return string;\n    return (typeof translated === 'string') ? translated : translated[0];\n  },\n\n  ngettext : function(singular, plural, n) {\n    var translated = Documentation.TRANSLATIONS[singular];\n    if (typeof translated === 'undefined')\n      return (n == 1) ? singular : plural;\n    return translated[Documentation.PLURALEXPR(n)];\n  },\n\n  addTranslations : function(catalog) {\n    for (var key in catalog.messages)\n      this.TRANSLATIONS[key] = catalog.messages[key];\n    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');\n    this.LOCALE = catalog.locale;\n  },\n\n  /**\n   * add context elements like header anchor links\n   */\n  addContextElements : function() {\n    $('div[id] > :header:first').each(function() {\n      $('<a class=\"headerlink\">\\u00B6</a>').\n      attr('href', '#' + this.id).\n      attr('title', _('Permalink to this headline')).\n      appendTo(this);\n    });\n    $('dt[id]').each(function() {\n      $('<a class=\"headerlink\">\\u00B6</a>').\n      attr('href', '#' + this.id).\n      attr('title', _('Permalink to this definition')).\n      appendTo(this);\n    });\n  },\n\n  /**\n   * workaround a firefox stupidity\n   * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075\n   */\n  fixFirefoxAnchorBug : function() {\n    if (document.location.hash && $.browser.mozilla)\n      window.setTimeout(function() {\n        document.location.href += '';\n      }, 10);\n  },\n\n  /**\n   * highlight the search words provided in the url in the text\n   */\n  highlightSearchWords : function() {\n    var params = $.getQueryParameters();\n    var terms = (params.highlight) ? params.highlight[0].split(/\\s+/) : [];\n    if (terms.length) {\n      var body = $('div.body');\n      if (!body.length) {\n        body = $('body');\n      }\n      window.setTimeout(function() {\n        $.each(terms, function() {\n          body.highlightText(this.toLowerCase(), 'highlighted');\n        });\n      }, 10);\n      $('<p class=\"highlight-link\"><a href=\"javascript:Documentation.' +\n        'hideSearchWords()\">' + _('Hide Search Matches') + '</a></p>')\n          .appendTo($('#searchbox'));\n    }\n  },\n\n  /**\n   * init the domain index toggle buttons\n   */\n  initIndexTable : function() {\n    var togglers = $('img.toggler').click(function() {\n      var src = $(this).attr('src');\n      var idnum = $(this).attr('id').substr(7);\n      $('tr.cg-' + idnum).toggle();\n      if (src.substr(-9) === 'minus.png')\n        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');\n      else\n        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');\n    }).css('display', '');\n    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {\n        togglers.click();\n    }\n  },\n\n  /**\n   * helper function to hide the search marks again\n   */\n  hideSearchWords : function() {\n    $('#searchbox .highlight-link').fadeOut(300);\n    $('span.highlighted').removeClass('highlighted');\n  },\n\n  /**\n   * make the url absolute\n   */\n  makeURL : function(relativeURL) {\n    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;\n  },\n\n  /**\n   * get the current relative url\n   */\n  getCurrentURL : function() {\n    var path = document.location.pathname;\n    var parts = path.split(/\\//);\n    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\\//), function() {\n      if (this === '..')\n        parts.pop();\n    });\n    var url = parts.join('/');\n    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);\n  },\n\n  initOnKeyListeners: function() {\n    $(document).keyup(function(event) {\n      var activeElementType = document.activeElement.tagName;\n      // don't navigate when in search box or textarea\n      if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {\n        switch (event.keyCode) {\n          case 37: // left\n            var prevHref = $('link[rel=\"prev\"]').prop('href');\n            if (prevHref) {\n              window.location.href = prevHref;\n              return false;\n            }\n          case 39: // right\n            var nextHref = $('link[rel=\"next\"]').prop('href');\n            if (nextHref) {\n              window.location.href = nextHref;\n              return false;\n            }\n        }\n      }\n    });\n  }\n};\n\n// quick alias for translations\n_ = Documentation.gettext;\n\n$(document).ready(function() {\n  Documentation.init();\n});\n"
  },
  {
    "path": "docs/_build/html/_static/documentation_options.js",
    "content": "var DOCUMENTATION_OPTIONS = {\n    URL_ROOT: document.getElementById(\"documentation_options\").getAttribute('data-url_root'),\n    VERSION: '0.2.0',\n    LANGUAGE: 'None',\n    COLLAPSE_INDEX: false,\n    FILE_SUFFIX: '.html',\n    HAS_SOURCE: true,\n    SOURCELINK_SUFFIX: '.txt',\n    NAVIGATION_WITH_KEYS: false\n};"
  },
  {
    "path": "docs/_build/html/_static/jquery-3.2.1.js",
    "content": "/*!\n * jQuery JavaScript Library v3.2.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2017-03-20T18:59Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\n\n\n\tfunction DOMEval( code, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar script = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.2.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type( obj );\n\t\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN( obj - parseFloat( obj ) );\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 13\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Simple selector that can be filtered directly, removing non-Elements\n\tif ( risSimple.test( qualifier ) ) {\n\t\treturn jQuery.filter( qualifier, elements, not );\n\t}\n\n\t// Complex selector, compare the two sets, removing non-Elements\n\tqualifier = jQuery.filter( qualifier, elements );\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n        if ( nodeName( elem, \"iframe\" ) ) {\n            return elem.contentDocument;\n        }\n\n        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n        // Treat the template element as a regular one in browsers that\n        // don't support it.\n        if ( nodeName( elem, \"template\" ) ) {\n            elem = elem.content || elem;\n        }\n\n        return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && jQuery.isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( jQuery.isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tjQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ jQuery.camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ jQuery.camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( jQuery.camelCase );\n\t\t\t} else {\n\t\t\t\tkey = jQuery.camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: jQuery.isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( \">tbody\", elem )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdiv.style.cssText =\n\t\t\t\"box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i,\n\t\tval = 0;\n\n\t// If we already have the right measurement, avoid augmentation\n\tif ( extra === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\ti = 4;\n\n\t// Otherwise initialize for horizontal or vertical properties\n\t} else {\n\t\ti = name === \"width\" ? 1 : 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with computed style\n\tvar valueIsBorderBox,\n\t\tstyles = getStyles( elem ),\n\t\tval = curCSS( elem, name, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Computed unit is not pixels. Stop here and return.\n\tif ( rnumnonpx.test( val ) ) {\n\t\treturn val;\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = isBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t// Fall back to offsetWidth/Height when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\tif ( val === \"auto\" ) {\n\t\tval = elem[ \"offset\" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];\n\t}\n\n\t// Normalize \"\", auto, and prepare for extra\n\tval = parseFloat( val ) || 0;\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 13\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnothtmlwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = jQuery.isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 13\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar doc, docElem, rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\trect = elem.getBoundingClientRect();\n\n\t\tdoc = elem.ownerDocument;\n\t\tdocElem = doc.documentElement;\n\t\twin = doc.defaultView;\n\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: rect.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset = {\n\t\t\t\ttop: parentOffset.top + jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true ),\n\t\t\t\tleft: parentOffset.left + jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true )\n\t\t\t};\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "docs/_build/html/_static/jquery-3.4.1.js",
    "content": "/*!\n * jQuery JavaScript Library v3.4.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2019-05-01T21:04Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.4.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code, options ) {\n\t\tDOMEval( code, { nonce: options && options.nonce } );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t(nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\") ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 && rdescend.test( selector ) ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = (elem.ownerDocument || elem).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( typeof elem.contentDocument !== \"undefined\" ) {\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t// Support: IE 9-11 only\n\t// Also use offsetWidth/offsetHeight for when box sizing is unreliable\n\t// We use getClientRects() to check for hidden/disconnected.\n\t// In those cases, the computed value can be trusted to be border-box\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\t\tval === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url, options ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "docs/_build/html/_static/jquery.js",
    "content": "/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(C,e){\"use strict\";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement(\"script\");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?n[o.call(e)]||\"object\":typeof e}var f=\"3.4.1\",k=function(e,t){return new k.fn.init(e,t)},p=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function d(e){var t=!!e&&\"length\"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&0<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],\"__proto__\"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==o.call(e))&&(!(t=r(e))||\"function\"==typeof(n=v.call(t,\"constructor\")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(p,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,\"string\"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),\"function\"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){n[\"[object \"+t+\"]\"]=t.toLowerCase()});var h=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k=\"sizzle\"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",I=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",W=\"\\\\[\"+M+\"*(\"+I+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+I+\"))|)\"+M+\"*\\\\]\",$=\":(\"+I+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+W+\")*)|.*)\\\\)|)\",F=new RegExp(M+\"+\",\"g\"),B=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),_=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),z=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),U=new RegExp(M+\"|>\"),X=new RegExp($),V=new RegExp(\"^\"+I+\"$\"),G={ID:new RegExp(\"^#(\"+I+\")\"),CLASS:new RegExp(\"^\\\\.(\"+I+\")\"),TAG:new RegExp(\"^(\"+I+\"|[*])\"),ATTR:new RegExp(\"^\"+W),PSEUDO:new RegExp(\"^\"+$),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+R+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\\d$/i,K=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ee=/[+~]/,te=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+M+\"?|(\"+M+\")|.)\",\"ig\"),ne=function(e,t,n){var r=\"0x\"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ie=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&\"fieldset\"===e.nodeName.toLowerCase()},{dir:\"parentNode\",next:\"legend\"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],\"string\"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+\" \"]&&(!v||!v.test(t))&&(1!==p||\"object\"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute(\"id\"))?s=s.replace(re,ie):e.setAttribute(\"id\",s=k),o=(l=h(t)).length;while(o--)l[o]=\"#\"+s+\" \"+xe(l[o]);c=l.join(\",\"),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute(\"id\")}}}return g(t.replace(B,\"$1\"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+\" \")>b.cacheLength&&delete e[r.shift()],e[t+\" \"]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split(\"|\"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return(\"input\"===t||\"button\"===t)&&e.type===n}}function ge(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||\"HTML\")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",oe,!1):n.attachEvent&&n.attachEvent(\"onunload\",oe)),d.attributes=ce(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute(\"id\")===t}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return t&&t.value===n}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML=\"<a id='\"+k+\"'></a><select id='\"+k+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&v.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||v.push(\"\\\\[\"+M+\"*(?:value|\"+R+\")\"),e.querySelectorAll(\"[id~=\"+k+\"-]\").length||v.push(\"~=\"),e.querySelectorAll(\":checked\").length||v.push(\":checked\"),e.querySelectorAll(\"a#\"+k+\"+*\").length||v.push(\".#.+[+~]\")}),ce(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=C.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&v.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&v.push(\":enabled\",\":disabled\"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&v.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),v.push(\",.*:\")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,\"*\"),c.call(e,\"[s!='']:x\"),s.push(\"!=\",$)}),v=v.length&&new RegExp(v.join(\"|\")),s=s.length&&new RegExp(s.join(\"|\")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+\" \"]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+\"\").replace(re,ie)},se.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||\"\").replace(te,ne),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&p(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?\"!=\"===r:!r||(t+=\"\",\"=\"===r?t===i:\"!=\"===r?t!==i:\"^=\"===r?i&&0===t.indexOf(i):\"*=\"===r?i&&-1<t.indexOf(i):\"$=\"===r?i&&t.slice(-i.length)===i:\"~=\"===r?-1<(\" \"+t.replace(F,\" \")+\" \").indexOf(i):\"|=\"===r&&(t===i||t.slice(0,i.length+1)===i+\"-\"))}},CHILD:function(h,e,t,g,v){var y=\"nth\"!==h.slice(0,3),m=\"last\"!==h.slice(-4),x=\"of-type\"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?\"nextSibling\":\"previousSibling\",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l=\"only\"===h&&!u&&\"nextSibling\"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error(\"unsupported pseudo: \"+e);return a[k]?a(o):1<a.length?(t=[e,e,\"\",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,\"$1\"));return s[k]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||\"\")||se.error(\"unsupported lang: \"+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(t=t.toLowerCase())===n||0===t.indexOf(n+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&\"parentNode\"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||\"*\",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[\" \"],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:\" \"===e[s-2].type?\"*\":\"\"})).replace(B,\"$1\"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+\" \"];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B,\" \")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=N[e+\" \"];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=N(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l=\"0\",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG(\"*\",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument===C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l=\"function\"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&\"ID\"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split(\"\").sort(D).join(\"\")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement(\"fieldset\"))}),ce(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||fe(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||fe(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute(\"disabled\")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[\":\"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;var T=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},N=k.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):\"string\"!=typeof n?k.grep(e,function(e){return-1<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&N.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&k(e);if(!N.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,\"parentNode\")},parentsUntil:function(e,t,n){return T(e,\"parentNode\",n)},next:function(e){return P(e,\"nextSibling\")},prev:function(e){return P(e,\"previousSibling\")},nextAll:function(e){return T(e,\"nextSibling\")},prevAll:function(e){return T(e,\"previousSibling\")},nextUntil:function(e,t,n){return T(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return T(e,\"previousSibling\",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return\"undefined\"!=typeof e.contentDocument?e.contentDocument:(A(e,\"template\")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return\"Until\"!==r.slice(-5)&&(t=e),t&&\"string\"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\\x20\\t\\r\\n\\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r=\"string\"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:\"\")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&\"string\"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){var n;while(-1<(n=k.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t=\"\",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=\"\"),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[[\"notify\",\"progress\",k.Callbacks(\"memory\"),k.Callbacks(\"memory\"),2],[\"resolve\",\"done\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),1,\"rejected\"]],i=\"pending\",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},\"catch\":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+\"With\"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError(\"Thenable self-resolution\");t=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+\"With\"](this===s?void 0:this,arguments),this},s[t[0]+\"With\"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),\"pending\"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener(\"DOMContentLoaded\",B),C.removeEventListener(\"load\",B),k.ready()}k.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,\"complete\"===E.readyState||\"loading\"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener(\"DOMContentLoaded\",B),C.addEventListener(\"load\",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,\"ms-\").replace(U,X)}var G=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;while(n--)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(Z,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=\"true\"===(i=n)||\"false\"!==i&&(\"null\"===i?null:i===+i+\"\"?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,\"hasDataAttrs\"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf(\"data-\")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks(\"once memory\").add(function(){Q.remove(e,[t+\"queue\",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return\"string\"!=typeof t&&(n=t,t=\"fx\",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=k.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=Q.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ne=new RegExp(\"^(?:([+-])=|)(\"+te+\")([a-z%]*)$\",\"i\"),re=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.getRootNode&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var se=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&oe(e)&&\"none\"===k.css(e,\"display\")},ue=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i};function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,\"\")},u=s(),l=n&&n[3]||(k.cssNumber[t]?\"\":\"px\"),c=e.nodeType&&(k.cssNumber[t]||\"px\"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?(\"none\"===n&&(l[c]=Q.get(r,\"display\")||null,l[c]||(r.style.display=\"\")),\"\"===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,\"display\"),o.parentNode.removeChild(o),\"none\"===u&&(u=\"block\"),ce[s]=u)))):\"none\"!==n&&(l[c]=\"none\",Q.set(r,\"display\",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,ge={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function ve(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],\"globalEval\",!t||Q.get(t[n],\"globalEval\"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),\"script\"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}me=E.createDocumentFragment().appendChild(E.createElement(\"div\")),(xe=E.createElement(\"input\")).setAttribute(\"type\",\"radio\"),xe.setAttribute(\"checked\",\"checked\"),xe.setAttribute(\"name\",\"t\"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML=\"<textarea>x</textarea>\",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==(\"focus\"===t)}function Ae(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){for(s in\"string\"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return\"undefined\"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(R)||[\"\"]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||\"\").match(R)||[\"\"]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,\"events\")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){a=k.event.handlers.call(this,s,l),t=0;while((i=a[t++])&&!s.isPropagationStopped()){s.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!s.isImmediatePropagationStopped())s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&De(t,\"click\",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&De(t,\"click\"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Q.get(t,\"click\")||A(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ne),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,qe=/<script|<style|<link/i,Le=/checked\\s*(?:[^=]|=\\s*.checked.)/i,He=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Oe(e,t){return A(e,\"table\")&&A(11!==t.nodeType?t:t.firstChild,\"tr\")&&k(e).children(\"tbody\")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Re(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&\"string\"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,\"script\"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,\"script\"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||\"\")&&!Q.access(u,\"globalEval\")&&k.contains(l,u)&&(u.src&&\"module\"!==(u.type||\"\").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute(\"nonce\")}):b(u.textContent.replace(He,\"\"),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,\"script\")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,\"input\"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:\"input\"!==l&&\"textarea\"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,\"script\")).length&&ye(a,!f&&ve(e,\"script\")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp(\"^(\"+te+\")(?!px)[a-z%]+$\",\"i\"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join(\"|\"),\"i\");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",u.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n=\"1%\"!==e.top,a=12===t(e.marginLeft),u.style.right=\"60%\",o=36===t(e.right),r=36===t(e.width),u.style.position=\"absolute\",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement(\"div\"),u=E.createElement(\"div\");u.style&&(u.style.backgroundClip=\"content-box\",u.cloneNode(!0).style.backgroundClip=\"\",y.clearCloneStyle=\"content-box\"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=[\"Webkit\",\"Moz\",\"ms\"],Xe=E.createElement(\"div\").style,Ve={};function Ge(e){var t=k.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;while(n--)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ke={letterSpacing:\"0\",fontWeight:\"400\"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function et(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=k.css(e,n+re[a],!0,i)),r?(\"content\"===n&&(u-=k.css(e,\"padding\"+re[a],!0,i)),\"margin\"!==n&&(u-=k.css(e,\"border\"+re[a]+\"Width\",!0,i))):(u+=k.css(e,\"padding\"+re[a],!0,i),\"padding\"!==n?u+=k.css(e,\"border\"+re[a]+\"Width\",!0,i):s+=k.css(e,\"border\"+re[a]+\"Width\",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&\"border-box\"===k.css(e,\"boxSizing\",!1,r),o=i,a=_e(e,t,r),s=\"offset\"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a=\"auto\"}return(!y.boxSizingReliable()&&i||\"auto\"===a||!parseFloat(a)&&\"inline\"===k.css(e,\"display\",!1,r))&&e.getClientRects().length&&(i=\"border-box\"===k.css(e,\"boxSizing\",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?\"border\":\"content\"),o,r,a)+\"px\"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"===(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o=\"number\"),null!=n&&n==n&&(\"number\"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?\"\":\"px\")),y.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),\"normal\"===i&&t in Ke&&(i=Ke[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each([\"height\",\"width\"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&\"absolute\"===i.position,a=(o||n)&&\"border-box\"===k.css(e,\"boxSizing\",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e[\"offset\"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,\"border\",!1,i)-.5)),s&&(r=ne.exec(t))&&\"px\"!==(r[3]||\"px\")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,\"marginLeft\"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),k.each({margin:\"\",padding:\"\",border:\"Width\"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r=\"string\"==typeof e?e.split(\" \"):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},\"margin\"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?\"\":\"px\")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=re[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&\"expand\"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=[\"*\"]):e=e.match(R);for(var n,r=0,i=e.length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,\"fxshow\");for(r in n.queue||(null==(a=k._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,\"fx\").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,\"display\")),\"none\"===(c=k.css(e,\"display\"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,\"display\"),fe([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===k.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?\"hidden\"in v&&(g=v.hidden):v=Q.access(e,\"fxshow\",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,\"fxshow\"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&\"object\"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=k.isEmptyObject(t),o=k.speed(e,n,r),a=function(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,\"finish\"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return\"string\"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||\"fx\",[]),this.each(function(){var e=!0,t=null!=i&&i+\"queueHooks\",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||\"fx\"),this.each(function(){var e,t=Q.get(this),n=t[a+\"queue\"],r=t[a+\"queueHooks\"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each([\"toggle\",\"show\",\"hide\"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||\"boolean\"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft(\"show\"),slideUp:ft(\"hide\"),slideToggle:ft(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||\"fx\",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement(\"input\"),at=E.createElement(\"select\").appendChild(E.createElement(\"option\")),ot.type=\"checkbox\",y.checkOn=\"\"!==ot.value,y.optSelected=at.selected,(ot=E.createElement(\"input\")).value=\"t\",ot.type=\"radio\",y.radioValue=\"t\"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&\"radio\"===t&&A(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(\" \")}function xt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function bt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,\"tabindex\");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&\" \"+mt(i)+\" \"){a=0;while(o=e[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=mt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&\" \"+mt(i)+\" \"){a=0;while(o=e[a++])while(-1<r.indexOf(\" \"+o+\" \"))r=r.replace(\" \"+o+\" \",\" \");i!==(s=mt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(i,t){var o=typeof i,a=\"string\"===o||Array.isArray(i);return\"boolean\"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=k(this),r=bt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&\"boolean\"!==o||((e=xt(this))&&Q.set(this,\"__className__\",e),this.setAttribute&&this.setAttribute(\"class\",e||!1===i?\"\":Q.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&-1<(\" \"+mt(xt(n))+\" \").indexOf(t))return!0;return!1}});var wt=/\\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t=\"\":\"number\"==typeof t?t+=\"\":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?\"\":e+\"\"})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&\"set\"in r&&void 0!==r.set(this,t,\"value\")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&\"get\"in r&&void 0!==(e=r.get(t,\"value\"))?e:\"string\"==typeof(e=t.value)?e.replace(wt,\"\"):null==e?\"\":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,\"value\");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,\"optgroup\"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=k.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each([\"radio\",\"checkbox\"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),y.focusin=\"onfocusin\"in C;var Tt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,\"type\")?e.type:e,h=v.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(\".\")&&(d=(h=d.split(\".\")).shift(),h.sort()),u=d.indexOf(\":\")<0&&\"on\"+d,(e=e[k.expando]?e:new k.Event(d,\"object\"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,\"events\")||{})[e.type]&&Q.get(o,\"handle\"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:\"focusin\",blur:\"focusout\"},function(n,r){var i=function(e){k.event.simulate(r,e.target,k.event.fix(e))};k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\\?/;k.parseXML=function(e){var t;if(!e||\"string\"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,\"text/xml\")}catch(e){t=void 0}return t&&!t.getElementsByTagName(\"parsererror\").length||k.error(\"Invalid XML: \"+e),t};var Nt=/\\[\\]$/,At=/\\r?\\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||Nt.test(n)?i(n,t):qt(n+\"[\"+(\"object\"==typeof t&&null!=t?e:\"\")+\"]\",t,r,i)});else if(r||\"object\"!==w(e))i(n,e);else for(t in e)qt(n+\"[\"+t+\"]\",e[t],r,i)}k.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join(\"&\")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,\"elements\");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(\":disabled\")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(At,\"\\r\\n\")}}):{name:t.name,value:n.replace(At,\"\\r\\n\")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\\/\\//,It={},Wt={},$t=\"*/\".concat(\"*\"),Ft=E.createElement(\"a\");function Bt(o){return function(e,t){\"string\"!=typeof e&&(t=e,e=\"*\");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))while(n=i[r++])\"+\"===n[0]?(n=n.slice(1)||\"*\",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return\"string\"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s[\"*\"]&&l(\"*\")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":$t,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks(\"once memory\"),w=v.statusCode||{},a={},s={},u=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Pt.exec(p))n[t[1].toLowerCase()+\" \"]=(n[t[1].toLowerCase()+\" \"]||[]).concat(t[2])}t=n[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+\"\").replace(Mt,Et.protocol+\"//\"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||\"*\").toLowerCase().match(R)||[\"\"],null==v.crossDomain){r=E.createElement(\"a\");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+\"//\"+Ft.host!=r.protocol+\"//\"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&\"string\"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger(\"ajaxStart\"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,\"\"),v.hasContent?v.data&&v.processData&&0===(v.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(v.data=v.data.replace(Lt,\"+\")):(o=v.url.slice(f.length),v.data&&(v.processData||\"string\"==typeof v.data)&&(f+=(St.test(f)?\"&\":\"?\")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,\"$1\"),o=(St.test(f)?\"&\":\"?\")+\"_=\"+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader(\"If-Modified-Since\",k.lastModified[f]),k.etag[f]&&T.setRequestHeader(\"If-None-Match\",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader(\"Content-Type\",v.contentType),T.setRequestHeader(\"Accept\",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+(\"*\"!==v.dataTypes[0]?\", \"+$t+\"; q=0.01\":\"\"):v.accepts[\"*\"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u=\"abort\",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger(\"ajaxSend\",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort(\"timeout\")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,\"No Transport\");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||\"\",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader(\"Last-Modified\"))&&(k.lastModified[f]=u),(u=T.getResponseHeader(\"etag\"))&&(k.etag[f]=u)),204===e||\"HEAD\"===v.type?l=\"nocontent\":304===e?l=\"notmodified\":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l=\"error\",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+\"\",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?\"ajaxSuccess\":\"ajaxError\",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger(\"ajaxComplete\",[T,v]),--k.active||k.event.trigger(\"ajaxStop\")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,\"json\")},getScript:function(e,t){return k.get(e,void 0,t,\"script\")}}),k.each([\"get\",\"post\"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&\"withCredentials\"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,\"abort\"===e?r.abort():\"error\"===e?\"number\"!=typeof r.status?t(0,\"error\"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,\"text\"!==(r.responseType||\"text\")||\"string\"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o(\"error\"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o(\"abort\");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),k.ajaxTransport(\"script\",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k(\"<script>\").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on(\"load error\",i=function(e){r.remove(),i=null,e&&t(\"error\"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\\?(?=&|$)|\\?\\?/;k.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Gt.pop()||k.expando+\"_\"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter(\"json jsonp\",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Yt.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,\"$1\"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+r),e.converters[\"script json\"]=function(){return o||k.error(r+\" was not called\"),o[0]},e.dataTypes[0]=\"json\",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),\"script\"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return-1<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),0<a.length&&k.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?k(\"<div>\").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,\"position\"),c=k(e),f={};\"static\"===l&&(e.style.position=\"relative\"),s=c.offset(),o=k.css(e,\"top\"),u=k.css(e,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&-1<(o+u).indexOf(\"auto\")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),\"using\"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===k.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===k.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,\"borderTopWidth\",!0),i.left+=k.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-k.css(r,\"marginTop\",!0),left:t.left-i.left-k.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===k.css(e,\"position\"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(t,i){var o=\"pageYOffset\"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each([\"top\",\"left\"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+\"px\":t})}),k.each({Height:\"height\",Width:\"width\"},function(a,s){k.each({padding:\"inner\"+a,content:s,\"\":\"outer\"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||\"boolean\"!=typeof e),i=r||(!0===e||!0===t?\"margin\":\"border\");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf(\"outer\")?e[\"inner\"+a]:e.document.documentElement[\"client\"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body[\"scroll\"+a],r[\"scroll\"+a],e.body[\"offset\"+a],r[\"offset\"+a],r[\"client\"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,n){k.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),k.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=A,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k});\n"
  },
  {
    "path": "docs/_build/html/_static/js/theme.js",
    "content": "/* sphinx_rtd_theme version 0.4.2 | MIT license */\n/* Built 20181005 13:10 */\nrequire=function r(s,a,l){function c(e,n){if(!a[e]){if(!s[e]){var i=\"function\"==typeof require&&require;if(!n&&i)return i(e,!0);if(u)return u(e,!0);var t=new Error(\"Cannot find module '\"+e+\"'\");throw t.code=\"MODULE_NOT_FOUND\",t}var o=a[e]={exports:{}};s[e][0].call(o.exports,function(n){return c(s[e][1][n]||n)},o,o.exports,r,s,a,l)}return a[e].exports}for(var u=\"function\"==typeof require&&require,n=0;n<l.length;n++)c(l[n]);return c}({\"sphinx-rtd-theme\":[function(n,e,i){var jQuery=\"undefined\"!=typeof window?window.jQuery:n(\"jquery\");e.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(e){var i=this;void 0===e&&(e=!0),i.isRunning||(i.isRunning=!0,jQuery(function(n){i.init(n),i.reset(),i.win.on(\"hashchange\",i.reset),e&&i.win.on(\"scroll\",function(){i.linkScroll||i.winScroll||(i.winScroll=!0,requestAnimationFrame(function(){i.onScroll()}))}),i.win.on(\"resize\",function(){i.winResize||(i.winResize=!0,requestAnimationFrame(function(){i.onResize()}))}),i.onResize()}))},enableSticky:function(){this.enable(!0)},init:function(i){i(document);var t=this;this.navBar=i(\"div.wy-side-scroll:first\"),this.win=i(window),i(document).on(\"click\",\"[data-toggle='wy-nav-top']\",function(){i(\"[data-toggle='wy-nav-shift']\").toggleClass(\"shift\"),i(\"[data-toggle='rst-versions']\").toggleClass(\"shift\")}).on(\"click\",\".wy-menu-vertical .current ul li a\",function(){var n=i(this);i(\"[data-toggle='wy-nav-shift']\").removeClass(\"shift\"),i(\"[data-toggle='rst-versions']\").toggleClass(\"shift\"),t.toggleCurrent(n),t.hashChange()}).on(\"click\",\"[data-toggle='rst-current-version']\",function(){i(\"[data-toggle='rst-versions']\").toggleClass(\"shift-up\")}),i(\"table.docutils:not(.field-list,.footnote,.citation)\").wrap(\"<div class='wy-table-responsive'></div>\"),i(\"table.docutils.footnote\").wrap(\"<div class='wy-table-responsive footnote'></div>\"),i(\"table.docutils.citation\").wrap(\"<div class='wy-table-responsive citation'></div>\"),i(\".wy-menu-vertical ul\").not(\".simple\").siblings(\"a\").each(function(){var e=i(this);expand=i('<span class=\"toctree-expand\"></span>'),expand.on(\"click\",function(n){return t.toggleCurrent(e),n.stopPropagation(),!1}),e.prepend(expand)})},reset:function(){var n=encodeURI(window.location.hash)||\"#\";try{var e=$(\".wy-menu-vertical\"),i=e.find('[href=\"'+n+'\"]');if(0===i.length){var t=$('.document [id=\"'+n.substring(1)+'\"]').closest(\"div.section\");0===(i=e.find('[href=\"#'+t.attr(\"id\")+'\"]')).length&&(i=e.find('[href=\"#\"]'))}0<i.length&&($(\".wy-menu-vertical .current\").removeClass(\"current\"),i.addClass(\"current\"),i.closest(\"li.toctree-l1\").addClass(\"current\"),i.closest(\"li.toctree-l1\").parent().addClass(\"current\"),i.closest(\"li.toctree-l1\").addClass(\"current\"),i.closest(\"li.toctree-l2\").addClass(\"current\"),i.closest(\"li.toctree-l3\").addClass(\"current\"),i.closest(\"li.toctree-l4\").addClass(\"current\"))}catch(o){console.log(\"Error expanding nav for anchor\",o)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,i=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(i),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one(\"hashchange\",function(){this.linkScroll=!1})},toggleCurrent:function(n){var e=n.closest(\"li\");e.siblings(\"li.current\").removeClass(\"current\"),e.siblings().find(\"li.current\").removeClass(\"current\"),e.find(\"> ul li.current\").removeClass(\"current\"),e.toggleClass(\"current\")}},\"undefined\"!=typeof window&&(window.SphinxRtdTheme={Navigation:e.exports.ThemeNav,StickyNav:e.exports.ThemeNav}),function(){for(var r=0,n=[\"ms\",\"moz\",\"webkit\",\"o\"],e=0;e<n.length&&!window.requestAnimationFrame;++e)window.requestAnimationFrame=window[n[e]+\"RequestAnimationFrame\"],window.cancelAnimationFrame=window[n[e]+\"CancelAnimationFrame\"]||window[n[e]+\"CancelRequestAnimationFrame\"];window.requestAnimationFrame||(window.requestAnimationFrame=function(n,e){var i=(new Date).getTime(),t=Math.max(0,16-(i-r)),o=window.setTimeout(function(){n(i+t)},t);return r=i+t,o}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()},{jquery:\"jquery\"}]},{},[\"sphinx-rtd-theme\"]);"
  },
  {
    "path": "docs/_build/html/_static/language_data.js",
    "content": "/*\n * language_data.js\n * ~~~~~~~~~~~~~~~~\n *\n * This script contains the language-specific data used by searchtools.js,\n * namely the list of stopwords, stemmer, scorer and splitter.\n *\n * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.\n * :license: BSD, see LICENSE for details.\n *\n */\n\nvar stopwords = [\"a\",\"and\",\"are\",\"as\",\"at\",\"be\",\"but\",\"by\",\"for\",\"if\",\"in\",\"into\",\"is\",\"it\",\"near\",\"no\",\"not\",\"of\",\"on\",\"or\",\"such\",\"that\",\"the\",\"their\",\"then\",\"there\",\"these\",\"they\",\"this\",\"to\",\"was\",\"will\",\"with\"];\n\n\n/* Non-minified version JS is _stemmer.js if file is provided */ \n/**\n * Porter Stemmer\n */\nvar Stemmer = function() {\n\n  var step2list = {\n    ational: 'ate',\n    tional: 'tion',\n    enci: 'ence',\n    anci: 'ance',\n    izer: 'ize',\n    bli: 'ble',\n    alli: 'al',\n    entli: 'ent',\n    eli: 'e',\n    ousli: 'ous',\n    ization: 'ize',\n    ation: 'ate',\n    ator: 'ate',\n    alism: 'al',\n    iveness: 'ive',\n    fulness: 'ful',\n    ousness: 'ous',\n    aliti: 'al',\n    iviti: 'ive',\n    biliti: 'ble',\n    logi: 'log'\n  };\n\n  var step3list = {\n    icate: 'ic',\n    ative: '',\n    alize: 'al',\n    iciti: 'ic',\n    ical: 'ic',\n    ful: '',\n    ness: ''\n  };\n\n  var c = \"[^aeiou]\";          // consonant\n  var v = \"[aeiouy]\";          // vowel\n  var C = c + \"[^aeiouy]*\";    // consonant sequence\n  var V = v + \"[aeiou]*\";      // vowel sequence\n\n  var mgr0 = \"^(\" + C + \")?\" + V + C;                      // [C]VC... is m>0\n  var meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\";    // [C]VC[V] is m=1\n  var mgr1 = \"^(\" + C + \")?\" + V + C + V + C;              // [C]VCVC... is m>1\n  var s_v   = \"^(\" + C + \")?\" + v;                         // vowel in stem\n\n  this.stemWord = function (w) {\n    var stem;\n    var suffix;\n    var firstch;\n    var origword = w;\n\n    if (w.length < 3)\n      return w;\n\n    var re;\n    var re2;\n    var re3;\n    var re4;\n\n    firstch = w.substr(0,1);\n    if (firstch == \"y\")\n      w = firstch.toUpperCase() + w.substr(1);\n\n    // Step 1a\n    re = /^(.+?)(ss|i)es$/;\n    re2 = /^(.+?)([^s])s$/;\n\n    if (re.test(w))\n      w = w.replace(re,\"$1$2\");\n    else if (re2.test(w))\n      w = w.replace(re2,\"$1$2\");\n\n    // Step 1b\n    re = /^(.+?)eed$/;\n    re2 = /^(.+?)(ed|ing)$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      re = new RegExp(mgr0);\n      if (re.test(fp[1])) {\n        re = /.$/;\n        w = w.replace(re,\"\");\n      }\n    }\n    else if (re2.test(w)) {\n      var fp = re2.exec(w);\n      stem = fp[1];\n      re2 = new RegExp(s_v);\n      if (re2.test(stem)) {\n        w = stem;\n        re2 = /(at|bl|iz)$/;\n        re3 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n        re4 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n        if (re2.test(w))\n          w = w + \"e\";\n        else if (re3.test(w)) {\n          re = /.$/;\n          w = w.replace(re,\"\");\n        }\n        else if (re4.test(w))\n          w = w + \"e\";\n      }\n    }\n\n    // Step 1c\n    re = /^(.+?)y$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      stem = fp[1];\n      re = new RegExp(s_v);\n      if (re.test(stem))\n        w = stem + \"i\";\n    }\n\n    // Step 2\n    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      stem = fp[1];\n      suffix = fp[2];\n      re = new RegExp(mgr0);\n      if (re.test(stem))\n        w = stem + step2list[suffix];\n    }\n\n    // Step 3\n    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      stem = fp[1];\n      suffix = fp[2];\n      re = new RegExp(mgr0);\n      if (re.test(stem))\n        w = stem + step3list[suffix];\n    }\n\n    // Step 4\n    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n    re2 = /^(.+?)(s|t)(ion)$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      stem = fp[1];\n      re = new RegExp(mgr1);\n      if (re.test(stem))\n        w = stem;\n    }\n    else if (re2.test(w)) {\n      var fp = re2.exec(w);\n      stem = fp[1] + fp[2];\n      re2 = new RegExp(mgr1);\n      if (re2.test(stem))\n        w = stem;\n    }\n\n    // Step 5\n    re = /^(.+?)e$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      stem = fp[1];\n      re = new RegExp(mgr1);\n      re2 = new RegExp(meq1);\n      re3 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))\n        w = stem;\n    }\n    re = /ll$/;\n    re2 = new RegExp(mgr1);\n    if (re.test(w) && re2.test(w)) {\n      re = /.$/;\n      w = w.replace(re,\"\");\n    }\n\n    // and turn initial Y back to y\n    if (firstch == \"y\")\n      w = firstch.toLowerCase() + w.substr(1);\n    return w;\n  }\n}\n\n\n\n\n\nvar splitChars = (function() {\n    var result = {};\n    var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,\n         1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,\n         2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,\n         2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,\n         3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,\n         3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,\n         4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,\n         8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,\n         11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,\n         43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];\n    var i, j, start, end;\n    for (i = 0; i < singles.length; i++) {\n        result[singles[i]] = true;\n    }\n    var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],\n         [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],\n         [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],\n         [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],\n         [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],\n         [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],\n         [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],\n         [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],\n         [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],\n         [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],\n         [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],\n         [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],\n         [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],\n         [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],\n         [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],\n         [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],\n         [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],\n         [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],\n         [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],\n         [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],\n         [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],\n         [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],\n         [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],\n         [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],\n         [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],\n         [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],\n         [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],\n         [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],\n         [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],\n         [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],\n         [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],\n         [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],\n         [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],\n         [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],\n         [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],\n         [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],\n         [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],\n         [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],\n         [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],\n         [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],\n         [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],\n         [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],\n         [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],\n         [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],\n         [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],\n         [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],\n         [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],\n         [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],\n         [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];\n    for (i = 0; i < ranges.length; i++) {\n        start = ranges[i][0];\n        end = ranges[i][1];\n        for (j = start; j <= end; j++) {\n            result[j] = true;\n        }\n    }\n    return result;\n})();\n\nfunction splitQuery(query) {\n    var result = [];\n    var start = -1;\n    for (var i = 0; i < query.length; i++) {\n        if (splitChars[query.charCodeAt(i)]) {\n            if (start !== -1) {\n                result.push(query.slice(start, i));\n                start = -1;\n            }\n        } else if (start === -1) {\n            start = i;\n        }\n    }\n    if (start !== -1) {\n        result.push(query.slice(start));\n    }\n    return result;\n}\n\n\n"
  },
  {
    "path": "docs/_build/html/_static/pygments.css",
    "content": ".highlight .hll { background-color: #ffffcc }\n.highlight  { background: #eeffcc; }\n.highlight .c { color: #408090; font-style: italic } /* Comment */\n.highlight .err { border: 1px solid #FF0000 } /* Error */\n.highlight .k { color: #007020; font-weight: bold } /* Keyword */\n.highlight .o { color: #666666 } /* Operator */\n.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */\n.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #007020 } /* Comment.Preproc */\n.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */\n.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */\n.highlight .gd { color: #A00000 } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #FF0000 } /* Generic.Error */\n.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.highlight .gi { color: #00A000 } /* Generic.Inserted */\n.highlight .go { color: #333333 } /* Generic.Output */\n.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.highlight .gt { color: #0044DD } /* Generic.Traceback */\n.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */\n.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */\n.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */\n.highlight .kp { color: #007020 } /* Keyword.Pseudo */\n.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #902000 } /* Keyword.Type */\n.highlight .m { color: #208050 } /* Literal.Number */\n.highlight .s { color: #4070a0 } /* Literal.String */\n.highlight .na { color: #4070a0 } /* Name.Attribute */\n.highlight .nb { color: #007020 } /* Name.Builtin */\n.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */\n.highlight .no { color: #60add5 } /* Name.Constant */\n.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */\n.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */\n.highlight .ne { color: #007020 } /* Name.Exception */\n.highlight .nf { color: #06287e } /* Name.Function */\n.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */\n.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */\n.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */\n.highlight .nv { color: #bb60d5 } /* Name.Variable */\n.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mb { color: #208050 } /* Literal.Number.Bin */\n.highlight .mf { color: #208050 } /* Literal.Number.Float */\n.highlight .mh { color: #208050 } /* Literal.Number.Hex */\n.highlight .mi { color: #208050 } /* Literal.Number.Integer */\n.highlight .mo { color: #208050 } /* Literal.Number.Oct */\n.highlight .sa { color: #4070a0 } /* Literal.String.Affix */\n.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */\n.highlight .sc { color: #4070a0 } /* Literal.String.Char */\n.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */\n.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */\n.highlight .s2 { color: #4070a0 } /* Literal.String.Double */\n.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */\n.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */\n.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */\n.highlight .sx { color: #c65d09 } /* Literal.String.Other */\n.highlight .sr { color: #235388 } /* Literal.String.Regex */\n.highlight .s1 { color: #4070a0 } /* Literal.String.Single */\n.highlight .ss { color: #517918 } /* Literal.String.Symbol */\n.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #06287e } /* Name.Function.Magic */\n.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */\n.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */\n.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */\n.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */\n.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */"
  },
  {
    "path": "docs/_build/html/_static/searchtools.js",
    "content": "/*\n * searchtools.js\n * ~~~~~~~~~~~~~~~~\n *\n * Sphinx JavaScript utilities for the full-text search.\n *\n * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.\n * :license: BSD, see LICENSE for details.\n *\n */\n\nif (!Scorer) {\n  /**\n   * Simple result scoring code.\n   */\n  var Scorer = {\n    // Implement the following function to further tweak the score for each result\n    // The function takes a result array [filename, title, anchor, descr, score]\n    // and returns the new score.\n    /*\n    score: function(result) {\n      return result[4];\n    },\n    */\n\n    // query matches the full name of an object\n    objNameMatch: 11,\n    // or matches in the last dotted part of the object name\n    objPartialMatch: 6,\n    // Additive scores depending on the priority of the object\n    objPrio: {0:  15,   // used to be importantResults\n              1:  5,   // used to be objectResults\n              2: -5},  // used to be unimportantResults\n    //  Used when the priority is not in the mapping.\n    objPrioDefault: 0,\n\n    // query found in title\n    title: 15,\n    partialTitle: 7,\n    // query found in terms\n    term: 5,\n    partialTerm: 2\n  };\n}\n\nif (!splitQuery) {\n  function splitQuery(query) {\n    return query.split(/\\s+/);\n  }\n}\n\n/**\n * Search Module\n */\nvar Search = {\n\n  _index : null,\n  _queued_query : null,\n  _pulse_status : -1,\n\n  htmlToText : function(htmlString) {\n      var htmlElement = document.createElement('span');\n      htmlElement.innerHTML = htmlString;\n      $(htmlElement).find('.headerlink').remove();\n      docContent = $(htmlElement).find('[role=main]')[0];\n      return docContent.textContent || docContent.innerText;\n  },\n\n  init : function() {\n      var params = $.getQueryParameters();\n      if (params.q) {\n          var query = params.q[0];\n          $('input[name=\"q\"]')[0].value = query;\n          this.performSearch(query);\n      }\n  },\n\n  loadIndex : function(url) {\n    $.ajax({type: \"GET\", url: url, data: null,\n            dataType: \"script\", cache: true,\n            complete: function(jqxhr, textstatus) {\n              if (textstatus != \"success\") {\n                document.getElementById(\"searchindexloader\").src = url;\n              }\n            }});\n  },\n\n  setIndex : function(index) {\n    var q;\n    this._index = index;\n    if ((q = this._queued_query) !== null) {\n      this._queued_query = null;\n      Search.query(q);\n    }\n  },\n\n  hasIndex : function() {\n      return this._index !== null;\n  },\n\n  deferQuery : function(query) {\n      this._queued_query = query;\n  },\n\n  stopPulse : function() {\n      this._pulse_status = 0;\n  },\n\n  startPulse : function() {\n    if (this._pulse_status >= 0)\n        return;\n    function pulse() {\n      var i;\n      Search._pulse_status = (Search._pulse_status + 1) % 4;\n      var dotString = '';\n      for (i = 0; i < Search._pulse_status; i++)\n        dotString += '.';\n      Search.dots.text(dotString);\n      if (Search._pulse_status > -1)\n        window.setTimeout(pulse, 500);\n    }\n    pulse();\n  },\n\n  /**\n   * perform a search for something (or wait until index is loaded)\n   */\n  performSearch : function(query) {\n    // create the required interface elements\n    this.out = $('#search-results');\n    this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);\n    this.dots = $('<span></span>').appendTo(this.title);\n    this.status = $('<p class=\"search-summary\">&nbsp;</p>').appendTo(this.out);\n    this.output = $('<ul class=\"search\"/>').appendTo(this.out);\n\n    $('#search-progress').text(_('Preparing search...'));\n    this.startPulse();\n\n    // index already loaded, the browser was quick!\n    if (this.hasIndex())\n      this.query(query);\n    else\n      this.deferQuery(query);\n  },\n\n  /**\n   * execute search (requires search index to be loaded)\n   */\n  query : function(query) {\n    var i;\n\n    // stem the searchterms and add them to the correct list\n    var stemmer = new Stemmer();\n    var searchterms = [];\n    var excluded = [];\n    var hlterms = [];\n    var tmp = splitQuery(query);\n    var objectterms = [];\n    for (i = 0; i < tmp.length; i++) {\n      if (tmp[i] !== \"\") {\n          objectterms.push(tmp[i].toLowerCase());\n      }\n\n      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\\d+$/) ||\n          tmp[i] === \"\") {\n        // skip this \"word\"\n        continue;\n      }\n      // stem the word\n      var word = stemmer.stemWord(tmp[i].toLowerCase());\n      // prevent stemmer from cutting word smaller than two chars\n      if(word.length < 3 && tmp[i].length >= 3) {\n        word = tmp[i];\n      }\n      var toAppend;\n      // select the correct list\n      if (word[0] == '-') {\n        toAppend = excluded;\n        word = word.substr(1);\n      }\n      else {\n        toAppend = searchterms;\n        hlterms.push(tmp[i].toLowerCase());\n      }\n      // only add if not already in the list\n      if (!$u.contains(toAppend, word))\n        toAppend.push(word);\n    }\n    var highlightstring = '?highlight=' + $.urlencode(hlterms.join(\" \"));\n\n    // console.debug('SEARCH: searching for:');\n    // console.info('required: ', searchterms);\n    // console.info('excluded: ', excluded);\n\n    // prepare search\n    var terms = this._index.terms;\n    var titleterms = this._index.titleterms;\n\n    // array of [filename, title, anchor, descr, score]\n    var results = [];\n    $('#search-progress').empty();\n\n    // lookup as object\n    for (i = 0; i < objectterms.length; i++) {\n      var others = [].concat(objectterms.slice(0, i),\n                             objectterms.slice(i+1, objectterms.length));\n      results = results.concat(this.performObjectSearch(objectterms[i], others));\n    }\n\n    // lookup as search terms in fulltext\n    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));\n\n    // let the scorer override scores with a custom scoring function\n    if (Scorer.score) {\n      for (i = 0; i < results.length; i++)\n        results[i][4] = Scorer.score(results[i]);\n    }\n\n    // now sort the results by score (in opposite order of appearance, since the\n    // display function below uses pop() to retrieve items) and then\n    // alphabetically\n    results.sort(function(a, b) {\n      var left = a[4];\n      var right = b[4];\n      if (left > right) {\n        return 1;\n      } else if (left < right) {\n        return -1;\n      } else {\n        // same score: sort alphabetically\n        left = a[1].toLowerCase();\n        right = b[1].toLowerCase();\n        return (left > right) ? -1 : ((left < right) ? 1 : 0);\n      }\n    });\n\n    // for debugging\n    //Search.lastresults = results.slice();  // a copy\n    //console.info('search results:', Search.lastresults);\n\n    // print the results\n    var resultCount = results.length;\n    function displayNextItem() {\n      // results left, load the summary and display it\n      if (results.length) {\n        var item = results.pop();\n        var listItem = $('<li style=\"display:none\"></li>');\n        if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {\n          // dirhtml builder\n          var dirname = item[0] + '/';\n          if (dirname.match(/\\/index\\/$/)) {\n            dirname = dirname.substring(0, dirname.length-6);\n          } else if (dirname == 'index/') {\n            dirname = '';\n          }\n          listItem.append($('<a/>').attr('href',\n            DOCUMENTATION_OPTIONS.URL_ROOT + dirname +\n            highlightstring + item[2]).html(item[1]));\n        } else {\n          // normal html builders\n          listItem.append($('<a/>').attr('href',\n            item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +\n            highlightstring + item[2]).html(item[1]));\n        }\n        if (item[3]) {\n          listItem.append($('<span> (' + item[3] + ')</span>'));\n          Search.output.append(listItem);\n          listItem.slideDown(5, function() {\n            displayNextItem();\n          });\n        } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {\n          $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX,\n                  dataType: \"text\",\n                  complete: function(jqxhr, textstatus) {\n                    var data = jqxhr.responseText;\n                    if (data !== '' && data !== undefined) {\n                      listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));\n                    }\n                    Search.output.append(listItem);\n                    listItem.slideDown(5, function() {\n                      displayNextItem();\n                    });\n                  }});\n        } else {\n          // no source available, just display title\n          Search.output.append(listItem);\n          listItem.slideDown(5, function() {\n            displayNextItem();\n          });\n        }\n      }\n      // search finished, update title and status message\n      else {\n        Search.stopPulse();\n        Search.title.text(_('Search Results'));\n        if (!resultCount)\n          Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\\'ve selected enough categories.'));\n        else\n            Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));\n        Search.status.fadeIn(500);\n      }\n    }\n    displayNextItem();\n  },\n\n  /**\n   * search for object names\n   */\n  performObjectSearch : function(object, otherterms) {\n    var filenames = this._index.filenames;\n    var docnames = this._index.docnames;\n    var objects = this._index.objects;\n    var objnames = this._index.objnames;\n    var titles = this._index.titles;\n\n    var i;\n    var results = [];\n\n    for (var prefix in objects) {\n      for (var name in objects[prefix]) {\n        var fullname = (prefix ? prefix + '.' : '') + name;\n        var fullnameLower = fullname.toLowerCase()\n        if (fullnameLower.indexOf(object) > -1) {\n          var score = 0;\n          var parts = fullnameLower.split('.');\n          // check for different match types: exact matches of full name or\n          // \"last name\" (i.e. last dotted part)\n          if (fullnameLower == object || parts[parts.length - 1] == object) {\n            score += Scorer.objNameMatch;\n          // matches in last name\n          } else if (parts[parts.length - 1].indexOf(object) > -1) {\n            score += Scorer.objPartialMatch;\n          }\n          var match = objects[prefix][name];\n          var objname = objnames[match[1]][2];\n          var title = titles[match[0]];\n          // If more than one term searched for, we require other words to be\n          // found in the name/title/description\n          if (otherterms.length > 0) {\n            var haystack = (prefix + ' ' + name + ' ' +\n                            objname + ' ' + title).toLowerCase();\n            var allfound = true;\n            for (i = 0; i < otherterms.length; i++) {\n              if (haystack.indexOf(otherterms[i]) == -1) {\n                allfound = false;\n                break;\n              }\n            }\n            if (!allfound) {\n              continue;\n            }\n          }\n          var descr = objname + _(', in ') + title;\n\n          var anchor = match[3];\n          if (anchor === '')\n            anchor = fullname;\n          else if (anchor == '-')\n            anchor = objnames[match[1]][1] + '-' + fullname;\n          // add custom score for some objects according to scorer\n          if (Scorer.objPrio.hasOwnProperty(match[2])) {\n            score += Scorer.objPrio[match[2]];\n          } else {\n            score += Scorer.objPrioDefault;\n          }\n          results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);\n        }\n      }\n    }\n\n    return results;\n  },\n\n  /**\n   * search for full-text terms in the index\n   */\n  performTermsSearch : function(searchterms, excluded, terms, titleterms) {\n    var docnames = this._index.docnames;\n    var filenames = this._index.filenames;\n    var titles = this._index.titles;\n\n    var i, j, file;\n    var fileMap = {};\n    var scoreMap = {};\n    var results = [];\n\n    // perform the search on the required terms\n    for (i = 0; i < searchterms.length; i++) {\n      var word = searchterms[i];\n      var files = [];\n      var _o = [\n        {files: terms[word], score: Scorer.term},\n        {files: titleterms[word], score: Scorer.title}\n      ];\n      // add support for partial matches\n      if (word.length > 2) {\n        for (var w in terms) {\n          if (w.match(word) && !terms[word]) {\n            _o.push({files: terms[w], score: Scorer.partialTerm})\n          }\n        }\n        for (var w in titleterms) {\n          if (w.match(word) && !titleterms[word]) {\n              _o.push({files: titleterms[w], score: Scorer.partialTitle})\n          }\n        }\n      }\n\n      // no match but word was a required one\n      if ($u.every(_o, function(o){return o.files === undefined;})) {\n        break;\n      }\n      // found search word in contents\n      $u.each(_o, function(o) {\n        var _files = o.files;\n        if (_files === undefined)\n          return\n\n        if (_files.length === undefined)\n          _files = [_files];\n        files = files.concat(_files);\n\n        // set score for the word in each file to Scorer.term\n        for (j = 0; j < _files.length; j++) {\n          file = _files[j];\n          if (!(file in scoreMap))\n            scoreMap[file] = {}\n          scoreMap[file][word] = o.score;\n        }\n      });\n\n      // create the mapping\n      for (j = 0; j < files.length; j++) {\n        file = files[j];\n        if (file in fileMap)\n          fileMap[file].push(word);\n        else\n          fileMap[file] = [word];\n      }\n    }\n\n    // now check if the files don't contain excluded terms\n    for (file in fileMap) {\n      var valid = true;\n\n      // check if all requirements are matched\n      var filteredTermCount = // as search terms with length < 3 are discarded: ignore\n        searchterms.filter(function(term){return term.length > 2}).length\n      if (\n        fileMap[file].length != searchterms.length &&\n        fileMap[file].length != filteredTermCount\n      ) continue;\n\n      // ensure that none of the excluded terms is in the search result\n      for (i = 0; i < excluded.length; i++) {\n        if (terms[excluded[i]] == file ||\n            titleterms[excluded[i]] == file ||\n            $u.contains(terms[excluded[i]] || [], file) ||\n            $u.contains(titleterms[excluded[i]] || [], file)) {\n          valid = false;\n          break;\n        }\n      }\n\n      // if we have still a valid result we can add it to the result list\n      if (valid) {\n        // select one (max) score for the file.\n        // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...\n        var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));\n        results.push([docnames[file], titles[file], '', null, score, filenames[file]]);\n      }\n    }\n    return results;\n  },\n\n  /**\n   * helper function to return a node containing the\n   * search summary for a given text. keywords is a list\n   * of stemmed words, hlwords is the list of normal, unstemmed\n   * words. the first one is used to find the occurrence, the\n   * latter for highlighting it.\n   */\n  makeSearchSummary : function(htmlText, keywords, hlwords) {\n    var text = Search.htmlToText(htmlText);\n    var textLower = text.toLowerCase();\n    var start = 0;\n    $.each(keywords, function() {\n      var i = textLower.indexOf(this.toLowerCase());\n      if (i > -1)\n        start = i;\n    });\n    start = Math.max(start - 120, 0);\n    var excerpt = ((start > 0) ? '...' : '') +\n      $.trim(text.substr(start, 240)) +\n      ((start + 240 - text.length) ? '...' : '');\n    var rv = $('<div class=\"context\"></div>').text(excerpt);\n    $.each(hlwords, function() {\n      rv = rv.highlightText(this, 'highlighted');\n    });\n    return rv;\n  }\n};\n\n$(document).ready(function() {\n  Search.init();\n});\n"
  },
  {
    "path": "docs/_build/html/_static/theme_overrides.css",
    "content": "/* override table width restrictions */\n@media screen and (min-width: 767px) {\n\n   .wy-table-responsive table td {\n      /* !important prevents the common CSS stylesheets from overriding\n         this as on RTD they are loaded after this stylesheet */\n      white-space: normal !important;\n   }\n\n   .wy-table-responsive {\n      overflow: visible !important;\n   }\n}\n"
  },
  {
    "path": "docs/_build/html/_static/underscore-1.3.1.js",
    "content": "//     Underscore.js 1.3.1\n//     (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.\n//     Underscore is freely distributable under the MIT license.\n//     Portions of Underscore are inspired or borrowed from Prototype,\n//     Oliver Steele's Functional, and John Resig's Micro-Templating.\n//     For all details and documentation:\n//     http://documentcloud.github.com/underscore\n\n(function() {\n\n  // Baseline setup\n  // --------------\n\n  // Establish the root object, `window` in the browser, or `global` on the server.\n  var root = this;\n\n  // Save the previous value of the `_` variable.\n  var previousUnderscore = root._;\n\n  // Establish the object that gets returned to break out of a loop iteration.\n  var breaker = {};\n\n  // Save bytes in the minified (but not gzipped) version:\n  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n  // Create quick reference variables for speed access to core prototypes.\n  var slice            = ArrayProto.slice,\n      unshift          = ArrayProto.unshift,\n      toString         = ObjProto.toString,\n      hasOwnProperty   = ObjProto.hasOwnProperty;\n\n  // All **ECMAScript 5** native function implementations that we hope to use\n  // are declared here.\n  var\n    nativeForEach      = ArrayProto.forEach,\n    nativeMap          = ArrayProto.map,\n    nativeReduce       = ArrayProto.reduce,\n    nativeReduceRight  = ArrayProto.reduceRight,\n    nativeFilter       = ArrayProto.filter,\n    nativeEvery        = ArrayProto.every,\n    nativeSome         = ArrayProto.some,\n    nativeIndexOf      = ArrayProto.indexOf,\n    nativeLastIndexOf  = ArrayProto.lastIndexOf,\n    nativeIsArray      = Array.isArray,\n    nativeKeys         = Object.keys,\n    nativeBind         = FuncProto.bind;\n\n  // Create a safe reference to the Underscore object for use below.\n  var _ = function(obj) { return new wrapper(obj); };\n\n  // Export the Underscore object for **Node.js**, with\n  // backwards-compatibility for the old `require()` API. If we're in\n  // the browser, add `_` as a global object via a string identifier,\n  // for Closure Compiler \"advanced\" mode.\n  if (typeof exports !== 'undefined') {\n    if (typeof module !== 'undefined' && module.exports) {\n      exports = module.exports = _;\n    }\n    exports._ = _;\n  } else {\n    root['_'] = _;\n  }\n\n  // Current version.\n  _.VERSION = '1.3.1';\n\n  // Collection Functions\n  // --------------------\n\n  // The cornerstone, an `each` implementation, aka `forEach`.\n  // Handles objects with the built-in `forEach`, arrays, and raw objects.\n  // Delegates to **ECMAScript 5**'s native `forEach` if available.\n  var each = _.each = _.forEach = function(obj, iterator, context) {\n    if (obj == null) return;\n    if (nativeForEach && obj.forEach === nativeForEach) {\n      obj.forEach(iterator, context);\n    } else if (obj.length === +obj.length) {\n      for (var i = 0, l = obj.length; i < l; i++) {\n        if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;\n      }\n    } else {\n      for (var key in obj) {\n        if (_.has(obj, key)) {\n          if (iterator.call(context, obj[key], key, obj) === breaker) return;\n        }\n      }\n    }\n  };\n\n  // Return the results of applying the iterator to each element.\n  // Delegates to **ECMAScript 5**'s native `map` if available.\n  _.map = _.collect = function(obj, iterator, context) {\n    var results = [];\n    if (obj == null) return results;\n    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n    each(obj, function(value, index, list) {\n      results[results.length] = iterator.call(context, value, index, list);\n    });\n    if (obj.length === +obj.length) results.length = obj.length;\n    return results;\n  };\n\n  // **Reduce** builds up a single result from a list of values, aka `inject`,\n  // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.\n  _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\n    var initial = arguments.length > 2;\n    if (obj == null) obj = [];\n    if (nativeReduce && obj.reduce === nativeReduce) {\n      if (context) iterator = _.bind(iterator, context);\n      return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n    }\n    each(obj, function(value, index, list) {\n      if (!initial) {\n        memo = value;\n        initial = true;\n      } else {\n        memo = iterator.call(context, memo, value, index, list);\n      }\n    });\n    if (!initial) throw new TypeError('Reduce of empty array with no initial value');\n    return memo;\n  };\n\n  // The right-associative version of reduce, also known as `foldr`.\n  // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\n  _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\n    var initial = arguments.length > 2;\n    if (obj == null) obj = [];\n    if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n      if (context) iterator = _.bind(iterator, context);\n      return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n    }\n    var reversed = _.toArray(obj).reverse();\n    if (context && !initial) iterator = _.bind(iterator, context);\n    return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator);\n  };\n\n  // Return the first value which passes a truth test. Aliased as `detect`.\n  _.find = _.detect = function(obj, iterator, context) {\n    var result;\n    any(obj, function(value, index, list) {\n      if (iterator.call(context, value, index, list)) {\n        result = value;\n        return true;\n      }\n    });\n    return result;\n  };\n\n  // Return all the elements that pass a truth test.\n  // Delegates to **ECMAScript 5**'s native `filter` if available.\n  // Aliased as `select`.\n  _.filter = _.select = function(obj, iterator, context) {\n    var results = [];\n    if (obj == null) return results;\n    if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n    each(obj, function(value, index, list) {\n      if (iterator.call(context, value, index, list)) results[results.length] = value;\n    });\n    return results;\n  };\n\n  // Return all the elements for which a truth test fails.\n  _.reject = function(obj, iterator, context) {\n    var results = [];\n    if (obj == null) return results;\n    each(obj, function(value, index, list) {\n      if (!iterator.call(context, value, index, list)) results[results.length] = value;\n    });\n    return results;\n  };\n\n  // Determine whether all of the elements match a truth test.\n  // Delegates to **ECMAScript 5**'s native `every` if available.\n  // Aliased as `all`.\n  _.every = _.all = function(obj, iterator, context) {\n    var result = true;\n    if (obj == null) return result;\n    if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);\n    each(obj, function(value, index, list) {\n      if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n    });\n    return result;\n  };\n\n  // Determine if at least one element in the object matches a truth test.\n  // Delegates to **ECMAScript 5**'s native `some` if available.\n  // Aliased as `any`.\n  var any = _.some = _.any = function(obj, iterator, context) {\n    iterator || (iterator = _.identity);\n    var result = false;\n    if (obj == null) return result;\n    if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n    each(obj, function(value, index, list) {\n      if (result || (result = iterator.call(context, value, index, list))) return breaker;\n    });\n    return !!result;\n  };\n\n  // Determine if a given value is included in the array or object using `===`.\n  // Aliased as `contains`.\n  _.include = _.contains = function(obj, target) {\n    var found = false;\n    if (obj == null) return found;\n    if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n    found = any(obj, function(value) {\n      return value === target;\n    });\n    return found;\n  };\n\n  // Invoke a method (with arguments) on every item in a collection.\n  _.invoke = function(obj, method) {\n    var args = slice.call(arguments, 2);\n    return _.map(obj, function(value) {\n      return (_.isFunction(method) ? method || value : value[method]).apply(value, args);\n    });\n  };\n\n  // Convenience version of a common use case of `map`: fetching a property.\n  _.pluck = function(obj, key) {\n    return _.map(obj, function(value){ return value[key]; });\n  };\n\n  // Return the maximum element or (element-based computation).\n  _.max = function(obj, iterator, context) {\n    if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);\n    if (!iterator && _.isEmpty(obj)) return -Infinity;\n    var result = {computed : -Infinity};\n    each(obj, function(value, index, list) {\n      var computed = iterator ? iterator.call(context, value, index, list) : value;\n      computed >= result.computed && (result = {value : value, computed : computed});\n    });\n    return result.value;\n  };\n\n  // Return the minimum element (or element-based computation).\n  _.min = function(obj, iterator, context) {\n    if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);\n    if (!iterator && _.isEmpty(obj)) return Infinity;\n    var result = {computed : Infinity};\n    each(obj, function(value, index, list) {\n      var computed = iterator ? iterator.call(context, value, index, list) : value;\n      computed < result.computed && (result = {value : value, computed : computed});\n    });\n    return result.value;\n  };\n\n  // Shuffle an array.\n  _.shuffle = function(obj) {\n    var shuffled = [], rand;\n    each(obj, function(value, index, list) {\n      if (index == 0) {\n        shuffled[0] = value;\n      } else {\n        rand = Math.floor(Math.random() * (index + 1));\n        shuffled[index] = shuffled[rand];\n        shuffled[rand] = value;\n      }\n    });\n    return shuffled;\n  };\n\n  // Sort the object's values by a criterion produced by an iterator.\n  _.sortBy = function(obj, iterator, context) {\n    return _.pluck(_.map(obj, function(value, index, list) {\n      return {\n        value : value,\n        criteria : iterator.call(context, value, index, list)\n      };\n    }).sort(function(left, right) {\n      var a = left.criteria, b = right.criteria;\n      return a < b ? -1 : a > b ? 1 : 0;\n    }), 'value');\n  };\n\n  // Groups the object's values by a criterion. Pass either a string attribute\n  // to group by, or a function that returns the criterion.\n  _.groupBy = function(obj, val) {\n    var result = {};\n    var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };\n    each(obj, function(value, index) {\n      var key = iterator(value, index);\n      (result[key] || (result[key] = [])).push(value);\n    });\n    return result;\n  };\n\n  // Use a comparator function to figure out at what index an object should\n  // be inserted so as to maintain order. Uses binary search.\n  _.sortedIndex = function(array, obj, iterator) {\n    iterator || (iterator = _.identity);\n    var low = 0, high = array.length;\n    while (low < high) {\n      var mid = (low + high) >> 1;\n      iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;\n    }\n    return low;\n  };\n\n  // Safely convert anything iterable into a real, live array.\n  _.toArray = function(iterable) {\n    if (!iterable)                return [];\n    if (iterable.toArray)         return iterable.toArray();\n    if (_.isArray(iterable))      return slice.call(iterable);\n    if (_.isArguments(iterable))  return slice.call(iterable);\n    return _.values(iterable);\n  };\n\n  // Return the number of elements in an object.\n  _.size = function(obj) {\n    return _.toArray(obj).length;\n  };\n\n  // Array Functions\n  // ---------------\n\n  // Get the first element of an array. Passing **n** will return the first N\n  // values in the array. Aliased as `head`. The **guard** check allows it to work\n  // with `_.map`.\n  _.first = _.head = function(array, n, guard) {\n    return (n != null) && !guard ? slice.call(array, 0, n) : array[0];\n  };\n\n  // Returns everything but the last entry of the array. Especcialy useful on\n  // the arguments object. Passing **n** will return all the values in\n  // the array, excluding the last N. The **guard** check allows it to work with\n  // `_.map`.\n  _.initial = function(array, n, guard) {\n    return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n  };\n\n  // Get the last element of an array. Passing **n** will return the last N\n  // values in the array. The **guard** check allows it to work with `_.map`.\n  _.last = function(array, n, guard) {\n    if ((n != null) && !guard) {\n      return slice.call(array, Math.max(array.length - n, 0));\n    } else {\n      return array[array.length - 1];\n    }\n  };\n\n  // Returns everything but the first entry of the array. Aliased as `tail`.\n  // Especially useful on the arguments object. Passing an **index** will return\n  // the rest of the values in the array from that index onward. The **guard**\n  // check allows it to work with `_.map`.\n  _.rest = _.tail = function(array, index, guard) {\n    return slice.call(array, (index == null) || guard ? 1 : index);\n  };\n\n  // Trim out all falsy values from an array.\n  _.compact = function(array) {\n    return _.filter(array, function(value){ return !!value; });\n  };\n\n  // Return a completely flattened version of an array.\n  _.flatten = function(array, shallow) {\n    return _.reduce(array, function(memo, value) {\n      if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));\n      memo[memo.length] = value;\n      return memo;\n    }, []);\n  };\n\n  // Return a version of the array that does not contain the specified value(s).\n  _.without = function(array) {\n    return _.difference(array, slice.call(arguments, 1));\n  };\n\n  // Produce a duplicate-free version of the array. If the array has already\n  // been sorted, you have the option of using a faster algorithm.\n  // Aliased as `unique`.\n  _.uniq = _.unique = function(array, isSorted, iterator) {\n    var initial = iterator ? _.map(array, iterator) : array;\n    var result = [];\n    _.reduce(initial, function(memo, el, i) {\n      if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) {\n        memo[memo.length] = el;\n        result[result.length] = array[i];\n      }\n      return memo;\n    }, []);\n    return result;\n  };\n\n  // Produce an array that contains the union: each distinct element from all of\n  // the passed-in arrays.\n  _.union = function() {\n    return _.uniq(_.flatten(arguments, true));\n  };\n\n  // Produce an array that contains every item shared between all the\n  // passed-in arrays. (Aliased as \"intersect\" for back-compat.)\n  _.intersection = _.intersect = function(array) {\n    var rest = slice.call(arguments, 1);\n    return _.filter(_.uniq(array), function(item) {\n      return _.every(rest, function(other) {\n        return _.indexOf(other, item) >= 0;\n      });\n    });\n  };\n\n  // Take the difference between one array and a number of other arrays.\n  // Only the elements present in just the first array will remain.\n  _.difference = function(array) {\n    var rest = _.flatten(slice.call(arguments, 1));\n    return _.filter(array, function(value){ return !_.include(rest, value); });\n  };\n\n  // Zip together multiple lists into a single array -- elements that share\n  // an index go together.\n  _.zip = function() {\n    var args = slice.call(arguments);\n    var length = _.max(_.pluck(args, 'length'));\n    var results = new Array(length);\n    for (var i = 0; i < length; i++) results[i] = _.pluck(args, \"\" + i);\n    return results;\n  };\n\n  // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\n  // we need this function. Return the position of the first occurrence of an\n  // item in an array, or -1 if the item is not included in the array.\n  // Delegates to **ECMAScript 5**'s native `indexOf` if available.\n  // If the array is large and already in sort order, pass `true`\n  // for **isSorted** to use binary search.\n  _.indexOf = function(array, item, isSorted) {\n    if (array == null) return -1;\n    var i, l;\n    if (isSorted) {\n      i = _.sortedIndex(array, item);\n      return array[i] === item ? i : -1;\n    }\n    if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);\n    for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;\n    return -1;\n  };\n\n  // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n  _.lastIndexOf = function(array, item) {\n    if (array == null) return -1;\n    if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);\n    var i = array.length;\n    while (i--) if (i in array && array[i] === item) return i;\n    return -1;\n  };\n\n  // Generate an integer Array containing an arithmetic progression. A port of\n  // the native Python `range()` function. See\n  // [the Python documentation](http://docs.python.org/library/functions.html#range).\n  _.range = function(start, stop, step) {\n    if (arguments.length <= 1) {\n      stop = start || 0;\n      start = 0;\n    }\n    step = arguments[2] || 1;\n\n    var len = Math.max(Math.ceil((stop - start) / step), 0);\n    var idx = 0;\n    var range = new Array(len);\n\n    while(idx < len) {\n      range[idx++] = start;\n      start += step;\n    }\n\n    return range;\n  };\n\n  // Function (ahem) Functions\n  // ------------------\n\n  // Reusable constructor function for prototype setting.\n  var ctor = function(){};\n\n  // Create a function bound to a given object (assigning `this`, and arguments,\n  // optionally). Binding with arguments is also known as `curry`.\n  // Delegates to **ECMAScript 5**'s native `Function.bind` if available.\n  // We check for `func.bind` first, to fail fast when `func` is undefined.\n  _.bind = function bind(func, context) {\n    var bound, args;\n    if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n    if (!_.isFunction(func)) throw new TypeError;\n    args = slice.call(arguments, 2);\n    return bound = function() {\n      if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));\n      ctor.prototype = func.prototype;\n      var self = new ctor;\n      var result = func.apply(self, args.concat(slice.call(arguments)));\n      if (Object(result) === result) return result;\n      return self;\n    };\n  };\n\n  // Bind all of an object's methods to that object. Useful for ensuring that\n  // all callbacks defined on an object belong to it.\n  _.bindAll = function(obj) {\n    var funcs = slice.call(arguments, 1);\n    if (funcs.length == 0) funcs = _.functions(obj);\n    each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\n    return obj;\n  };\n\n  // Memoize an expensive function by storing its results.\n  _.memoize = function(func, hasher) {\n    var memo = {};\n    hasher || (hasher = _.identity);\n    return function() {\n      var key = hasher.apply(this, arguments);\n      return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n    };\n  };\n\n  // Delays a function for the given number of milliseconds, and then calls\n  // it with the arguments supplied.\n  _.delay = function(func, wait) {\n    var args = slice.call(arguments, 2);\n    return setTimeout(function(){ return func.apply(func, args); }, wait);\n  };\n\n  // Defers a function, scheduling it to run after the current call stack has\n  // cleared.\n  _.defer = function(func) {\n    return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n  };\n\n  // Returns a function, that, when invoked, will only be triggered at most once\n  // during a given window of time.\n  _.throttle = function(func, wait) {\n    var context, args, timeout, throttling, more;\n    var whenDone = _.debounce(function(){ more = throttling = false; }, wait);\n    return function() {\n      context = this; args = arguments;\n      var later = function() {\n        timeout = null;\n        if (more) func.apply(context, args);\n        whenDone();\n      };\n      if (!timeout) timeout = setTimeout(later, wait);\n      if (throttling) {\n        more = true;\n      } else {\n        func.apply(context, args);\n      }\n      whenDone();\n      throttling = true;\n    };\n  };\n\n  // Returns a function, that, as long as it continues to be invoked, will not\n  // be triggered. The function will be called after it stops being called for\n  // N milliseconds.\n  _.debounce = function(func, wait) {\n    var timeout;\n    return function() {\n      var context = this, args = arguments;\n      var later = function() {\n        timeout = null;\n        func.apply(context, args);\n      };\n      clearTimeout(timeout);\n      timeout = setTimeout(later, wait);\n    };\n  };\n\n  // Returns a function that will be executed at most one time, no matter how\n  // often you call it. Useful for lazy initialization.\n  _.once = function(func) {\n    var ran = false, memo;\n    return function() {\n      if (ran) return memo;\n      ran = true;\n      return memo = func.apply(this, arguments);\n    };\n  };\n\n  // Returns the first function passed as an argument to the second,\n  // allowing you to adjust arguments, run code before and after, and\n  // conditionally execute the original function.\n  _.wrap = function(func, wrapper) {\n    return function() {\n      var args = [func].concat(slice.call(arguments, 0));\n      return wrapper.apply(this, args);\n    };\n  };\n\n  // Returns a function that is the composition of a list of functions, each\n  // consuming the return value of the function that follows.\n  _.compose = function() {\n    var funcs = arguments;\n    return function() {\n      var args = arguments;\n      for (var i = funcs.length - 1; i >= 0; i--) {\n        args = [funcs[i].apply(this, args)];\n      }\n      return args[0];\n    };\n  };\n\n  // Returns a function that will only be executed after being called N times.\n  _.after = function(times, func) {\n    if (times <= 0) return func();\n    return function() {\n      if (--times < 1) { return func.apply(this, arguments); }\n    };\n  };\n\n  // Object Functions\n  // ----------------\n\n  // Retrieve the names of an object's properties.\n  // Delegates to **ECMAScript 5**'s native `Object.keys`\n  _.keys = nativeKeys || function(obj) {\n    if (obj !== Object(obj)) throw new TypeError('Invalid object');\n    var keys = [];\n    for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;\n    return keys;\n  };\n\n  // Retrieve the values of an object's properties.\n  _.values = function(obj) {\n    return _.map(obj, _.identity);\n  };\n\n  // Return a sorted list of the function names available on the object.\n  // Aliased as `methods`\n  _.functions = _.methods = function(obj) {\n    var names = [];\n    for (var key in obj) {\n      if (_.isFunction(obj[key])) names.push(key);\n    }\n    return names.sort();\n  };\n\n  // Extend a given object with all the properties in passed-in object(s).\n  _.extend = function(obj) {\n    each(slice.call(arguments, 1), function(source) {\n      for (var prop in source) {\n        obj[prop] = source[prop];\n      }\n    });\n    return obj;\n  };\n\n  // Fill in a given object with default properties.\n  _.defaults = function(obj) {\n    each(slice.call(arguments, 1), function(source) {\n      for (var prop in source) {\n        if (obj[prop] == null) obj[prop] = source[prop];\n      }\n    });\n    return obj;\n  };\n\n  // Create a (shallow-cloned) duplicate of an object.\n  _.clone = function(obj) {\n    if (!_.isObject(obj)) return obj;\n    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n  };\n\n  // Invokes interceptor with the obj, and then returns obj.\n  // The primary purpose of this method is to \"tap into\" a method chain, in\n  // order to perform operations on intermediate results within the chain.\n  _.tap = function(obj, interceptor) {\n    interceptor(obj);\n    return obj;\n  };\n\n  // Internal recursive comparison function.\n  function eq(a, b, stack) {\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.\n    if (a === b) return a !== 0 || 1 / a == 1 / b;\n    // A strict comparison is necessary because `null == undefined`.\n    if (a == null || b == null) return a === b;\n    // Unwrap any wrapped objects.\n    if (a._chain) a = a._wrapped;\n    if (b._chain) b = b._wrapped;\n    // Invoke a custom `isEqual` method if one is provided.\n    if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);\n    if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);\n    // Compare `[[Class]]` names.\n    var className = toString.call(a);\n    if (className != toString.call(b)) return false;\n    switch (className) {\n      // Strings, numbers, dates, and booleans are compared by value.\n      case '[object String]':\n        // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n        // equivalent to `new String(\"5\")`.\n        return a == String(b);\n      case '[object Number]':\n        // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n        // other numeric values.\n        return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n      case '[object Date]':\n      case '[object Boolean]':\n        // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n        // millisecond representations. Note that invalid dates with millisecond representations\n        // of `NaN` are not equivalent.\n        return +a == +b;\n      // RegExps are compared by their source patterns and flags.\n      case '[object RegExp]':\n        return a.source == b.source &&\n               a.global == b.global &&\n               a.multiline == b.multiline &&\n               a.ignoreCase == b.ignoreCase;\n    }\n    if (typeof a != 'object' || typeof b != 'object') return false;\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n    var length = stack.length;\n    while (length--) {\n      // Linear search. Performance is inversely proportional to the number of\n      // unique nested structures.\n      if (stack[length] == a) return true;\n    }\n    // Add the first object to the stack of traversed objects.\n    stack.push(a);\n    var size = 0, result = true;\n    // Recursively compare objects and arrays.\n    if (className == '[object Array]') {\n      // Compare array lengths to determine if a deep comparison is necessary.\n      size = a.length;\n      result = size == b.length;\n      if (result) {\n        // Deep compare the contents, ignoring non-numeric properties.\n        while (size--) {\n          // Ensure commutative equality for sparse arrays.\n          if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;\n        }\n      }\n    } else {\n      // Objects with different constructors are not equivalent.\n      if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false;\n      // Deep compare objects.\n      for (var key in a) {\n        if (_.has(a, key)) {\n          // Count the expected number of properties.\n          size++;\n          // Deep compare each member.\n          if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;\n        }\n      }\n      // Ensure that both objects contain the same number of properties.\n      if (result) {\n        for (key in b) {\n          if (_.has(b, key) && !(size--)) break;\n        }\n        result = !size;\n      }\n    }\n    // Remove the first object from the stack of traversed objects.\n    stack.pop();\n    return result;\n  }\n\n  // Perform a deep comparison to check if two objects are equal.\n  _.isEqual = function(a, b) {\n    return eq(a, b, []);\n  };\n\n  // Is a given array, string, or object empty?\n  // An \"empty\" object has no enumerable own-properties.\n  _.isEmpty = function(obj) {\n    if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n    for (var key in obj) if (_.has(obj, key)) return false;\n    return true;\n  };\n\n  // Is a given value a DOM element?\n  _.isElement = function(obj) {\n    return !!(obj && obj.nodeType == 1);\n  };\n\n  // Is a given value an array?\n  // Delegates to ECMA5's native Array.isArray\n  _.isArray = nativeIsArray || function(obj) {\n    return toString.call(obj) == '[object Array]';\n  };\n\n  // Is a given variable an object?\n  _.isObject = function(obj) {\n    return obj === Object(obj);\n  };\n\n  // Is a given variable an arguments object?\n  _.isArguments = function(obj) {\n    return toString.call(obj) == '[object Arguments]';\n  };\n  if (!_.isArguments(arguments)) {\n    _.isArguments = function(obj) {\n      return !!(obj && _.has(obj, 'callee'));\n    };\n  }\n\n  // Is a given value a function?\n  _.isFunction = function(obj) {\n    return toString.call(obj) == '[object Function]';\n  };\n\n  // Is a given value a string?\n  _.isString = function(obj) {\n    return toString.call(obj) == '[object String]';\n  };\n\n  // Is a given value a number?\n  _.isNumber = function(obj) {\n    return toString.call(obj) == '[object Number]';\n  };\n\n  // Is the given value `NaN`?\n  _.isNaN = function(obj) {\n    // `NaN` is the only value for which `===` is not reflexive.\n    return obj !== obj;\n  };\n\n  // Is a given value a boolean?\n  _.isBoolean = function(obj) {\n    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\n  };\n\n  // Is a given value a date?\n  _.isDate = function(obj) {\n    return toString.call(obj) == '[object Date]';\n  };\n\n  // Is the given value a regular expression?\n  _.isRegExp = function(obj) {\n    return toString.call(obj) == '[object RegExp]';\n  };\n\n  // Is a given value equal to null?\n  _.isNull = function(obj) {\n    return obj === null;\n  };\n\n  // Is a given variable undefined?\n  _.isUndefined = function(obj) {\n    return obj === void 0;\n  };\n\n  // Has own property?\n  _.has = function(obj, key) {\n    return hasOwnProperty.call(obj, key);\n  };\n\n  // Utility Functions\n  // -----------------\n\n  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n  // previous owner. Returns a reference to the Underscore object.\n  _.noConflict = function() {\n    root._ = previousUnderscore;\n    return this;\n  };\n\n  // Keep the identity function around for default iterators.\n  _.identity = function(value) {\n    return value;\n  };\n\n  // Run a function **n** times.\n  _.times = function (n, iterator, context) {\n    for (var i = 0; i < n; i++) iterator.call(context, i);\n  };\n\n  // Escape a string for HTML interpolation.\n  _.escape = function(string) {\n    return (''+string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\\//g,'&#x2F;');\n  };\n\n  // Add your own custom functions to the Underscore object, ensuring that\n  // they're correctly added to the OOP wrapper as well.\n  _.mixin = function(obj) {\n    each(_.functions(obj), function(name){\n      addToWrapper(name, _[name] = obj[name]);\n    });\n  };\n\n  // Generate a unique integer id (unique within the entire client session).\n  // Useful for temporary DOM ids.\n  var idCounter = 0;\n  _.uniqueId = function(prefix) {\n    var id = idCounter++;\n    return prefix ? prefix + id : id;\n  };\n\n  // By default, Underscore uses ERB-style template delimiters, change the\n  // following template settings to use alternative delimiters.\n  _.templateSettings = {\n    evaluate    : /<%([\\s\\S]+?)%>/g,\n    interpolate : /<%=([\\s\\S]+?)%>/g,\n    escape      : /<%-([\\s\\S]+?)%>/g\n  };\n\n  // When customizing `templateSettings`, if you don't want to define an\n  // interpolation, evaluation or escaping regex, we need one that is\n  // guaranteed not to match.\n  var noMatch = /.^/;\n\n  // Within an interpolation, evaluation, or escaping, remove HTML escaping\n  // that had been previously added.\n  var unescape = function(code) {\n    return code.replace(/\\\\\\\\/g, '\\\\').replace(/\\\\'/g, \"'\");\n  };\n\n  // JavaScript micro-templating, similar to John Resig's implementation.\n  // Underscore templating handles arbitrary delimiters, preserves whitespace,\n  // and correctly escapes quotes within interpolated code.\n  _.template = function(str, data) {\n    var c  = _.templateSettings;\n    var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +\n      'with(obj||{}){__p.push(\\'' +\n      str.replace(/\\\\/g, '\\\\\\\\')\n         .replace(/'/g, \"\\\\'\")\n         .replace(c.escape || noMatch, function(match, code) {\n           return \"',_.escape(\" + unescape(code) + \"),'\";\n         })\n         .replace(c.interpolate || noMatch, function(match, code) {\n           return \"',\" + unescape(code) + \",'\";\n         })\n         .replace(c.evaluate || noMatch, function(match, code) {\n           return \"');\" + unescape(code).replace(/[\\r\\n\\t]/g, ' ') + \";__p.push('\";\n         })\n         .replace(/\\r/g, '\\\\r')\n         .replace(/\\n/g, '\\\\n')\n         .replace(/\\t/g, '\\\\t')\n         + \"');}return __p.join('');\";\n    var func = new Function('obj', '_', tmpl);\n    if (data) return func(data, _);\n    return function(data) {\n      return func.call(this, data, _);\n    };\n  };\n\n  // Add a \"chain\" function, which will delegate to the wrapper.\n  _.chain = function(obj) {\n    return _(obj).chain();\n  };\n\n  // The OOP Wrapper\n  // ---------------\n\n  // If Underscore is called as a function, it returns a wrapped object that\n  // can be used OO-style. This wrapper holds altered versions of all the\n  // underscore functions. Wrapped objects may be chained.\n  var wrapper = function(obj) { this._wrapped = obj; };\n\n  // Expose `wrapper.prototype` as `_.prototype`\n  _.prototype = wrapper.prototype;\n\n  // Helper function to continue chaining intermediate results.\n  var result = function(obj, chain) {\n    return chain ? _(obj).chain() : obj;\n  };\n\n  // A method to easily add functions to the OOP wrapper.\n  var addToWrapper = function(name, func) {\n    wrapper.prototype[name] = function() {\n      var args = slice.call(arguments);\n      unshift.call(args, this._wrapped);\n      return result(func.apply(_, args), this._chain);\n    };\n  };\n\n  // Add all of the Underscore functions to the wrapper object.\n  _.mixin(_);\n\n  // Add all mutator Array functions to the wrapper.\n  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n    var method = ArrayProto[name];\n    wrapper.prototype[name] = function() {\n      var wrapped = this._wrapped;\n      method.apply(wrapped, arguments);\n      var length = wrapped.length;\n      if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];\n      return result(wrapped, this._chain);\n    };\n  });\n\n  // Add all accessor Array functions to the wrapper.\n  each(['concat', 'join', 'slice'], function(name) {\n    var method = ArrayProto[name];\n    wrapper.prototype[name] = function() {\n      return result(method.apply(this._wrapped, arguments), this._chain);\n    };\n  });\n\n  // Start chaining a wrapped Underscore object.\n  wrapper.prototype.chain = function() {\n    this._chain = true;\n    return this;\n  };\n\n  // Extracts the result from a wrapped and chained object.\n  wrapper.prototype.value = function() {\n    return this._wrapped;\n  };\n\n}).call(this);\n"
  },
  {
    "path": "docs/_build/html/_static/underscore.js",
    "content": "// Underscore.js 1.3.1\n// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.\n// Underscore is freely distributable under the MIT license.\n// Portions of Underscore are inspired or borrowed from Prototype,\n// Oliver Steele's Functional, and John Resig's Micro-Templating.\n// For all details and documentation:\n// http://documentcloud.github.com/underscore\n(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case \"[object String]\":return a==String(c);case \"[object Number]\":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case \"[object Date]\":case \"[object Boolean]\":return+a==+c;case \"[object RegExp]\":return a.source==\nc.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!=\"object\"||typeof c!=\"object\")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e==\"[object Array]\"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if(\"constructor\"in a!=\"constructor\"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,\nh)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!==\"undefined\"){if(typeof module!==\"undefined\"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION=\"1.3.1\";var j=b.each=\nb.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==\nnull&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError(\"Reduce of empty array with no initial value\");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=\nfunction(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e=\ne&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=\nfunction(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});\nreturn e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),\"value\")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,\nc,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=\nb.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]);\nreturn e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,\"length\")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,\"\"+e);return d};b.indexOf=function(a,c,\nd){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};\nvar F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,\nc){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:\na.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};\nb.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError(\"Invalid object\");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments,\n1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)==\"[object Array]\"};b.isObject=function(a){return a===Object(a)};\nb.isArguments=function(a){return l.call(a)==\"[object Arguments]\"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,\"callee\"))};b.isFunction=function(a){return l.call(a)==\"[object Function]\"};b.isString=function(a){return l.call(a)==\"[object String]\"};b.isNumber=function(a){return l.call(a)==\"[object Number]\"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)==\"[object Boolean]\"};b.isDate=function(a){return l.call(a)==\"[object Date]\"};\nb.isRegExp=function(a){return l.call(a)==\"[object RegExp]\"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(\"\"+a).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#x27;\").replace(/\\//g,\"&#x2F;\")};b.mixin=function(a){j(b.functions(a),\nfunction(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\\s\\S]+?)%>/g,interpolate:/<%=([\\s\\S]+?)%>/g,escape:/<%-([\\s\\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\\\\\/g,\"\\\\\").replace(/\\\\'/g,\"'\")};b.template=function(a,c){var d=b.templateSettings,d=\"var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('\"+a.replace(/\\\\/g,\"\\\\\\\\\").replace(/'/g,\"\\\\'\").replace(d.escape||t,function(a,b){return\"',_.escape(\"+\nu(b)+\"),'\"}).replace(d.interpolate||t,function(a,b){return\"',\"+u(b)+\",'\"}).replace(d.evaluate||t,function(a,b){return\"');\"+u(b).replace(/[\\r\\n\\t]/g,\" \")+\";__p.push('\"}).replace(/\\r/g,\"\\\\r\").replace(/\\n/g,\"\\\\n\").replace(/\\t/g,\"\\\\t\")+\"');}return __p.join('');\",e=new Function(\"obj\",\"_\",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]=\nfunction(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j(\"pop,push,reverse,shift,sort,splice,unshift\".split(\",\"),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a==\"shift\"||a==\"splice\")&&e===0&&delete d[0];return v(d,this._chain)}});j([\"concat\",\"join\",\"slice\"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=\ntrue;return this};m.prototype.value=function(){return this._wrapped}}).call(this);\n"
  },
  {
    "path": "docs/_build/html/_static/websupport.js",
    "content": "/*\n * websupport.js\n * ~~~~~~~~~~~~~\n *\n * sphinx.websupport utilities for all documentation.\n *\n * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.\n * :license: BSD, see LICENSE for details.\n *\n */\n\n(function($) {\n  $.fn.autogrow = function() {\n    return this.each(function() {\n    var textarea = this;\n\n    $.fn.autogrow.resize(textarea);\n\n    $(textarea)\n      .focus(function() {\n        textarea.interval = setInterval(function() {\n          $.fn.autogrow.resize(textarea);\n        }, 500);\n      })\n      .blur(function() {\n        clearInterval(textarea.interval);\n      });\n    });\n  };\n\n  $.fn.autogrow.resize = function(textarea) {\n    var lineHeight = parseInt($(textarea).css('line-height'), 10);\n    var lines = textarea.value.split('\\n');\n    var columns = textarea.cols;\n    var lineCount = 0;\n    $.each(lines, function() {\n      lineCount += Math.ceil(this.length / columns) || 1;\n    });\n    var height = lineHeight * (lineCount + 1);\n    $(textarea).css('height', height);\n  };\n})(jQuery);\n\n(function($) {\n  var comp, by;\n\n  function init() {\n    initEvents();\n    initComparator();\n  }\n\n  function initEvents() {\n    $(document).on(\"click\", 'a.comment-close', function(event) {\n      event.preventDefault();\n      hide($(this).attr('id').substring(2));\n    });\n    $(document).on(\"click\", 'a.vote', function(event) {\n      event.preventDefault();\n      handleVote($(this));\n    });\n    $(document).on(\"click\", 'a.reply', function(event) {\n      event.preventDefault();\n      openReply($(this).attr('id').substring(2));\n    });\n    $(document).on(\"click\", 'a.close-reply', function(event) {\n      event.preventDefault();\n      closeReply($(this).attr('id').substring(2));\n    });\n    $(document).on(\"click\", 'a.sort-option', function(event) {\n      event.preventDefault();\n      handleReSort($(this));\n    });\n    $(document).on(\"click\", 'a.show-proposal', function(event) {\n      event.preventDefault();\n      showProposal($(this).attr('id').substring(2));\n    });\n    $(document).on(\"click\", 'a.hide-proposal', function(event) {\n      event.preventDefault();\n      hideProposal($(this).attr('id').substring(2));\n    });\n    $(document).on(\"click\", 'a.show-propose-change', function(event) {\n      event.preventDefault();\n      showProposeChange($(this).attr('id').substring(2));\n    });\n    $(document).on(\"click\", 'a.hide-propose-change', function(event) {\n      event.preventDefault();\n      hideProposeChange($(this).attr('id').substring(2));\n    });\n    $(document).on(\"click\", 'a.accept-comment', function(event) {\n      event.preventDefault();\n      acceptComment($(this).attr('id').substring(2));\n    });\n    $(document).on(\"click\", 'a.delete-comment', function(event) {\n      event.preventDefault();\n      deleteComment($(this).attr('id').substring(2));\n    });\n    $(document).on(\"click\", 'a.comment-markup', function(event) {\n      event.preventDefault();\n      toggleCommentMarkupBox($(this).attr('id').substring(2));\n    });\n  }\n\n  /**\n   * Set comp, which is a comparator function used for sorting and\n   * inserting comments into the list.\n   */\n  function setComparator() {\n    // If the first three letters are \"asc\", sort in ascending order\n    // and remove the prefix.\n    if (by.substring(0,3) == 'asc') {\n      var i = by.substring(3);\n      comp = function(a, b) { return a[i] - b[i]; };\n    } else {\n      // Otherwise sort in descending order.\n      comp = function(a, b) { return b[by] - a[by]; };\n    }\n\n    // Reset link styles and format the selected sort option.\n    $('a.sel').attr('href', '#').removeClass('sel');\n    $('a.by' + by).removeAttr('href').addClass('sel');\n  }\n\n  /**\n   * Create a comp function. If the user has preferences stored in\n   * the sortBy cookie, use those, otherwise use the default.\n   */\n  function initComparator() {\n    by = 'rating'; // Default to sort by rating.\n    // If the sortBy cookie is set, use that instead.\n    if (document.cookie.length > 0) {\n      var start = document.cookie.indexOf('sortBy=');\n      if (start != -1) {\n        start = start + 7;\n        var end = document.cookie.indexOf(\";\", start);\n        if (end == -1) {\n          end = document.cookie.length;\n          by = unescape(document.cookie.substring(start, end));\n        }\n      }\n    }\n    setComparator();\n  }\n\n  /**\n   * Show a comment div.\n   */\n  function show(id) {\n    $('#ao' + id).hide();\n    $('#ah' + id).show();\n    var context = $.extend({id: id}, opts);\n    var popup = $(renderTemplate(popupTemplate, context)).hide();\n    popup.find('textarea[name=\"proposal\"]').hide();\n    popup.find('a.by' + by).addClass('sel');\n    var form = popup.find('#cf' + id);\n    form.submit(function(event) {\n      event.preventDefault();\n      addComment(form);\n    });\n    $('#s' + id).after(popup);\n    popup.slideDown('fast', function() {\n      getComments(id);\n    });\n  }\n\n  /**\n   * Hide a comment div.\n   */\n  function hide(id) {\n    $('#ah' + id).hide();\n    $('#ao' + id).show();\n    var div = $('#sc' + id);\n    div.slideUp('fast', function() {\n      div.remove();\n    });\n  }\n\n  /**\n   * Perform an ajax request to get comments for a node\n   * and insert the comments into the comments tree.\n   */\n  function getComments(id) {\n    $.ajax({\n     type: 'GET',\n     url: opts.getCommentsURL,\n     data: {node: id},\n     success: function(data, textStatus, request) {\n       var ul = $('#cl' + id);\n       var speed = 100;\n       $('#cf' + id)\n         .find('textarea[name=\"proposal\"]')\n         .data('source', data.source);\n\n       if (data.comments.length === 0) {\n         ul.html('<li>No comments yet.</li>');\n         ul.data('empty', true);\n       } else {\n         // If there are comments, sort them and put them in the list.\n         var comments = sortComments(data.comments);\n         speed = data.comments.length * 100;\n         appendComments(comments, ul);\n         ul.data('empty', false);\n       }\n       $('#cn' + id).slideUp(speed + 200);\n       ul.slideDown(speed);\n     },\n     error: function(request, textStatus, error) {\n       showError('Oops, there was a problem retrieving the comments.');\n     },\n     dataType: 'json'\n    });\n  }\n\n  /**\n   * Add a comment via ajax and insert the comment into the comment tree.\n   */\n  function addComment(form) {\n    var node_id = form.find('input[name=\"node\"]').val();\n    var parent_id = form.find('input[name=\"parent\"]').val();\n    var text = form.find('textarea[name=\"comment\"]').val();\n    var proposal = form.find('textarea[name=\"proposal\"]').val();\n\n    if (text == '') {\n      showError('Please enter a comment.');\n      return;\n    }\n\n    // Disable the form that is being submitted.\n    form.find('textarea,input').attr('disabled', 'disabled');\n\n    // Send the comment to the server.\n    $.ajax({\n      type: \"POST\",\n      url: opts.addCommentURL,\n      dataType: 'json',\n      data: {\n        node: node_id,\n        parent: parent_id,\n        text: text,\n        proposal: proposal\n      },\n      success: function(data, textStatus, error) {\n        // Reset the form.\n        if (node_id) {\n          hideProposeChange(node_id);\n        }\n        form.find('textarea')\n          .val('')\n          .add(form.find('input'))\n          .removeAttr('disabled');\n\tvar ul = $('#cl' + (node_id || parent_id));\n        if (ul.data('empty')) {\n          $(ul).empty();\n          ul.data('empty', false);\n        }\n        insertComment(data.comment);\n        var ao = $('#ao' + node_id);\n        ao.find('img').attr({'src': opts.commentBrightImage});\n        if (node_id) {\n          // if this was a \"root\" comment, remove the commenting box\n          // (the user can get it back by reopening the comment popup)\n          $('#ca' + node_id).slideUp();\n        }\n      },\n      error: function(request, textStatus, error) {\n        form.find('textarea,input').removeAttr('disabled');\n        showError('Oops, there was a problem adding the comment.');\n      }\n    });\n  }\n\n  /**\n   * Recursively append comments to the main comment list and children\n   * lists, creating the comment tree.\n   */\n  function appendComments(comments, ul) {\n    $.each(comments, function() {\n      var div = createCommentDiv(this);\n      ul.append($(document.createElement('li')).html(div));\n      appendComments(this.children, div.find('ul.comment-children'));\n      // To avoid stagnating data, don't store the comments children in data.\n      this.children = null;\n      div.data('comment', this);\n    });\n  }\n\n  /**\n   * After adding a new comment, it must be inserted in the correct\n   * location in the comment tree.\n   */\n  function insertComment(comment) {\n    var div = createCommentDiv(comment);\n\n    // To avoid stagnating data, don't store the comments children in data.\n    comment.children = null;\n    div.data('comment', comment);\n\n    var ul = $('#cl' + (comment.node || comment.parent));\n    var siblings = getChildren(ul);\n\n    var li = $(document.createElement('li'));\n    li.hide();\n\n    // Determine where in the parents children list to insert this comment.\n    for(var i=0; i < siblings.length; i++) {\n      if (comp(comment, siblings[i]) <= 0) {\n        $('#cd' + siblings[i].id)\n          .parent()\n          .before(li.html(div));\n        li.slideDown('fast');\n        return;\n      }\n    }\n\n    // If we get here, this comment rates lower than all the others,\n    // or it is the only comment in the list.\n    ul.append(li.html(div));\n    li.slideDown('fast');\n  }\n\n  function acceptComment(id) {\n    $.ajax({\n      type: 'POST',\n      url: opts.acceptCommentURL,\n      data: {id: id},\n      success: function(data, textStatus, request) {\n        $('#cm' + id).fadeOut('fast');\n        $('#cd' + id).removeClass('moderate');\n      },\n      error: function(request, textStatus, error) {\n        showError('Oops, there was a problem accepting the comment.');\n      }\n    });\n  }\n\n  function deleteComment(id) {\n    $.ajax({\n      type: 'POST',\n      url: opts.deleteCommentURL,\n      data: {id: id},\n      success: function(data, textStatus, request) {\n        var div = $('#cd' + id);\n        if (data == 'delete') {\n          // Moderator mode: remove the comment and all children immediately\n          div.slideUp('fast', function() {\n            div.remove();\n          });\n          return;\n        }\n        // User mode: only mark the comment as deleted\n        div\n          .find('span.user-id:first')\n          .text('[deleted]').end()\n          .find('div.comment-text:first')\n          .text('[deleted]').end()\n          .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +\n                ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)\n          .remove();\n        var comment = div.data('comment');\n        comment.username = '[deleted]';\n        comment.text = '[deleted]';\n        div.data('comment', comment);\n      },\n      error: function(request, textStatus, error) {\n        showError('Oops, there was a problem deleting the comment.');\n      }\n    });\n  }\n\n  function showProposal(id) {\n    $('#sp' + id).hide();\n    $('#hp' + id).show();\n    $('#pr' + id).slideDown('fast');\n  }\n\n  function hideProposal(id) {\n    $('#hp' + id).hide();\n    $('#sp' + id).show();\n    $('#pr' + id).slideUp('fast');\n  }\n\n  function showProposeChange(id) {\n    $('#pc' + id).hide();\n    $('#hc' + id).show();\n    var textarea = $('#pt' + id);\n    textarea.val(textarea.data('source'));\n    $.fn.autogrow.resize(textarea[0]);\n    textarea.slideDown('fast');\n  }\n\n  function hideProposeChange(id) {\n    $('#hc' + id).hide();\n    $('#pc' + id).show();\n    var textarea = $('#pt' + id);\n    textarea.val('').removeAttr('disabled');\n    textarea.slideUp('fast');\n  }\n\n  function toggleCommentMarkupBox(id) {\n    $('#mb' + id).toggle();\n  }\n\n  /** Handle when the user clicks on a sort by link. */\n  function handleReSort(link) {\n    var classes = link.attr('class').split(/\\s+/);\n    for (var i=0; i<classes.length; i++) {\n      if (classes[i] != 'sort-option') {\n\tby = classes[i].substring(2);\n      }\n    }\n    setComparator();\n    // Save/update the sortBy cookie.\n    var expiration = new Date();\n    expiration.setDate(expiration.getDate() + 365);\n    document.cookie= 'sortBy=' + escape(by) +\n                     ';expires=' + expiration.toUTCString();\n    $('ul.comment-ul').each(function(index, ul) {\n      var comments = getChildren($(ul), true);\n      comments = sortComments(comments);\n      appendComments(comments, $(ul).empty());\n    });\n  }\n\n  /**\n   * Function to process a vote when a user clicks an arrow.\n   */\n  function handleVote(link) {\n    if (!opts.voting) {\n      showError(\"You'll need to login to vote.\");\n      return;\n    }\n\n    var id = link.attr('id');\n    if (!id) {\n      // Didn't click on one of the voting arrows.\n      return;\n    }\n    // If it is an unvote, the new vote value is 0,\n    // Otherwise it's 1 for an upvote, or -1 for a downvote.\n    var value = 0;\n    if (id.charAt(1) != 'u') {\n      value = id.charAt(0) == 'u' ? 1 : -1;\n    }\n    // The data to be sent to the server.\n    var d = {\n      comment_id: id.substring(2),\n      value: value\n    };\n\n    // Swap the vote and unvote links.\n    link.hide();\n    $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)\n      .show();\n\n    // The div the comment is displayed in.\n    var div = $('div#cd' + d.comment_id);\n    var data = div.data('comment');\n\n    // If this is not an unvote, and the other vote arrow has\n    // already been pressed, unpress it.\n    if ((d.value !== 0) && (data.vote === d.value * -1)) {\n      $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();\n      $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();\n    }\n\n    // Update the comments rating in the local data.\n    data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);\n    data.vote = d.value;\n    div.data('comment', data);\n\n    // Change the rating text.\n    div.find('.rating:first')\n      .text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));\n\n    // Send the vote information to the server.\n    $.ajax({\n      type: \"POST\",\n      url: opts.processVoteURL,\n      data: d,\n      error: function(request, textStatus, error) {\n        showError('Oops, there was a problem casting that vote.');\n      }\n    });\n  }\n\n  /**\n   * Open a reply form used to reply to an existing comment.\n   */\n  function openReply(id) {\n    // Swap out the reply link for the hide link\n    $('#rl' + id).hide();\n    $('#cr' + id).show();\n\n    // Add the reply li to the children ul.\n    var div = $(renderTemplate(replyTemplate, {id: id})).hide();\n    $('#cl' + id)\n      .prepend(div)\n      // Setup the submit handler for the reply form.\n      .find('#rf' + id)\n      .submit(function(event) {\n        event.preventDefault();\n        addComment($('#rf' + id));\n        closeReply(id);\n      })\n      .find('input[type=button]')\n      .click(function() {\n        closeReply(id);\n      });\n    div.slideDown('fast', function() {\n      $('#rf' + id).find('textarea').focus();\n    });\n  }\n\n  /**\n   * Close the reply form opened with openReply.\n   */\n  function closeReply(id) {\n    // Remove the reply div from the DOM.\n    $('#rd' + id).slideUp('fast', function() {\n      $(this).remove();\n    });\n\n    // Swap out the hide link for the reply link\n    $('#cr' + id).hide();\n    $('#rl' + id).show();\n  }\n\n  /**\n   * Recursively sort a tree of comments using the comp comparator.\n   */\n  function sortComments(comments) {\n    comments.sort(comp);\n    $.each(comments, function() {\n      this.children = sortComments(this.children);\n    });\n    return comments;\n  }\n\n  /**\n   * Get the children comments from a ul. If recursive is true,\n   * recursively include childrens' children.\n   */\n  function getChildren(ul, recursive) {\n    var children = [];\n    ul.children().children(\"[id^='cd']\")\n      .each(function() {\n        var comment = $(this).data('comment');\n        if (recursive)\n          comment.children = getChildren($(this).find('#cl' + comment.id), true);\n        children.push(comment);\n      });\n    return children;\n  }\n\n  /** Create a div to display a comment in. */\n  function createCommentDiv(comment) {\n    if (!comment.displayed && !opts.moderator) {\n      return $('<div class=\"moderate\">Thank you!  Your comment will show up '\n               + 'once it is has been approved by a moderator.</div>');\n    }\n    // Prettify the comment rating.\n    comment.pretty_rating = comment.rating + ' point' +\n      (comment.rating == 1 ? '' : 's');\n    // Make a class (for displaying not yet moderated comments differently)\n    comment.css_class = comment.displayed ? '' : ' moderate';\n    // Create a div for this comment.\n    var context = $.extend({}, opts, comment);\n    var div = $(renderTemplate(commentTemplate, context));\n\n    // If the user has voted on this comment, highlight the correct arrow.\n    if (comment.vote) {\n      var direction = (comment.vote == 1) ? 'u' : 'd';\n      div.find('#' + direction + 'v' + comment.id).hide();\n      div.find('#' + direction + 'u' + comment.id).show();\n    }\n\n    if (opts.moderator || comment.text != '[deleted]') {\n      div.find('a.reply').show();\n      if (comment.proposal_diff)\n        div.find('#sp' + comment.id).show();\n      if (opts.moderator && !comment.displayed)\n        div.find('#cm' + comment.id).show();\n      if (opts.moderator || (opts.username == comment.username))\n        div.find('#dc' + comment.id).show();\n    }\n    return div;\n  }\n\n  /**\n   * A simple template renderer. Placeholders such as <%id%> are replaced\n   * by context['id'] with items being escaped. Placeholders such as <#id#>\n   * are not escaped.\n   */\n  function renderTemplate(template, context) {\n    var esc = $(document.createElement('div'));\n\n    function handle(ph, escape) {\n      var cur = context;\n      $.each(ph.split('.'), function() {\n        cur = cur[this];\n      });\n      return escape ? esc.text(cur || \"\").html() : cur;\n    }\n\n    return template.replace(/<([%#])([\\w\\.]*)\\1>/g, function() {\n      return handle(arguments[2], arguments[1] == '%' ? true : false);\n    });\n  }\n\n  /** Flash an error message briefly. */\n  function showError(message) {\n    $(document.createElement('div')).attr({'class': 'popup-error'})\n      .append($(document.createElement('div'))\n               .attr({'class': 'error-message'}).text(message))\n      .appendTo('body')\n      .fadeIn(\"slow\")\n      .delay(2000)\n      .fadeOut(\"slow\");\n  }\n\n  /** Add a link the user uses to open the comments popup. */\n  $.fn.comment = function() {\n    return this.each(function() {\n      var id = $(this).attr('id').substring(1);\n      var count = COMMENT_METADATA[id];\n      var title = count + ' comment' + (count == 1 ? '' : 's');\n      var image = count > 0 ? opts.commentBrightImage : opts.commentImage;\n      var addcls = count == 0 ? ' nocomment' : '';\n      $(this)\n        .append(\n          $(document.createElement('a')).attr({\n            href: '#',\n            'class': 'sphinx-comment-open' + addcls,\n            id: 'ao' + id\n          })\n            .append($(document.createElement('img')).attr({\n              src: image,\n              alt: 'comment',\n              title: title\n            }))\n            .click(function(event) {\n              event.preventDefault();\n              show($(this).attr('id').substring(2));\n            })\n        )\n        .append(\n          $(document.createElement('a')).attr({\n            href: '#',\n            'class': 'sphinx-comment-close hidden',\n            id: 'ah' + id\n          })\n            .append($(document.createElement('img')).attr({\n              src: opts.closeCommentImage,\n              alt: 'close',\n              title: 'close'\n            }))\n            .click(function(event) {\n              event.preventDefault();\n              hide($(this).attr('id').substring(2));\n            })\n        );\n    });\n  };\n\n  var opts = {\n    processVoteURL: '/_process_vote',\n    addCommentURL: '/_add_comment',\n    getCommentsURL: '/_get_comments',\n    acceptCommentURL: '/_accept_comment',\n    deleteCommentURL: '/_delete_comment',\n    commentImage: '/static/_static/comment.png',\n    closeCommentImage: '/static/_static/comment-close.png',\n    loadingImage: '/static/_static/ajax-loader.gif',\n    commentBrightImage: '/static/_static/comment-bright.png',\n    upArrow: '/static/_static/up.png',\n    downArrow: '/static/_static/down.png',\n    upArrowPressed: '/static/_static/up-pressed.png',\n    downArrowPressed: '/static/_static/down-pressed.png',\n    voting: false,\n    moderator: false\n  };\n\n  if (typeof COMMENT_OPTIONS != \"undefined\") {\n    opts = jQuery.extend(opts, COMMENT_OPTIONS);\n  }\n\n  var popupTemplate = '\\\n    <div class=\"sphinx-comments\" id=\"sc<%id%>\">\\\n      <p class=\"sort-options\">\\\n        Sort by:\\\n        <a href=\"#\" class=\"sort-option byrating\">best rated</a>\\\n        <a href=\"#\" class=\"sort-option byascage\">newest</a>\\\n        <a href=\"#\" class=\"sort-option byage\">oldest</a>\\\n      </p>\\\n      <div class=\"comment-header\">Comments</div>\\\n      <div class=\"comment-loading\" id=\"cn<%id%>\">\\\n        loading comments... <img src=\"<%loadingImage%>\" alt=\"\" /></div>\\\n      <ul id=\"cl<%id%>\" class=\"comment-ul\"></ul>\\\n      <div id=\"ca<%id%>\">\\\n      <p class=\"add-a-comment\">Add a comment\\\n        (<a href=\"#\" class=\"comment-markup\" id=\"ab<%id%>\">markup</a>):</p>\\\n      <div class=\"comment-markup-box\" id=\"mb<%id%>\">\\\n        reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \\\n        <code>``code``</code>, \\\n        code blocks: <code>::</code> and an indented block after blank line</div>\\\n      <form method=\"post\" id=\"cf<%id%>\" class=\"comment-form\" action=\"\">\\\n        <textarea name=\"comment\" cols=\"80\"></textarea>\\\n        <p class=\"propose-button\">\\\n          <a href=\"#\" id=\"pc<%id%>\" class=\"show-propose-change\">\\\n            Propose a change &#9657;\\\n          </a>\\\n          <a href=\"#\" id=\"hc<%id%>\" class=\"hide-propose-change\">\\\n            Propose a change &#9663;\\\n          </a>\\\n        </p>\\\n        <textarea name=\"proposal\" id=\"pt<%id%>\" cols=\"80\"\\\n                  spellcheck=\"false\"></textarea>\\\n        <input type=\"submit\" value=\"Add comment\" />\\\n        <input type=\"hidden\" name=\"node\" value=\"<%id%>\" />\\\n        <input type=\"hidden\" name=\"parent\" value=\"\" />\\\n      </form>\\\n      </div>\\\n    </div>';\n\n  var commentTemplate = '\\\n    <div id=\"cd<%id%>\" class=\"sphinx-comment<%css_class%>\">\\\n      <div class=\"vote\">\\\n        <div class=\"arrow\">\\\n          <a href=\"#\" id=\"uv<%id%>\" class=\"vote\" title=\"vote up\">\\\n            <img src=\"<%upArrow%>\" />\\\n          </a>\\\n          <a href=\"#\" id=\"uu<%id%>\" class=\"un vote\" title=\"vote up\">\\\n            <img src=\"<%upArrowPressed%>\" />\\\n          </a>\\\n        </div>\\\n        <div class=\"arrow\">\\\n          <a href=\"#\" id=\"dv<%id%>\" class=\"vote\" title=\"vote down\">\\\n            <img src=\"<%downArrow%>\" id=\"da<%id%>\" />\\\n          </a>\\\n          <a href=\"#\" id=\"du<%id%>\" class=\"un vote\" title=\"vote down\">\\\n            <img src=\"<%downArrowPressed%>\" />\\\n          </a>\\\n        </div>\\\n      </div>\\\n      <div class=\"comment-content\">\\\n        <p class=\"tagline comment\">\\\n          <span class=\"user-id\"><%username%></span>\\\n          <span class=\"rating\"><%pretty_rating%></span>\\\n          <span class=\"delta\"><%time.delta%></span>\\\n        </p>\\\n        <div class=\"comment-text comment\"><#text#></div>\\\n        <p class=\"comment-opts comment\">\\\n          <a href=\"#\" class=\"reply hidden\" id=\"rl<%id%>\">reply &#9657;</a>\\\n          <a href=\"#\" class=\"close-reply\" id=\"cr<%id%>\">reply &#9663;</a>\\\n          <a href=\"#\" id=\"sp<%id%>\" class=\"show-proposal\">proposal &#9657;</a>\\\n          <a href=\"#\" id=\"hp<%id%>\" class=\"hide-proposal\">proposal &#9663;</a>\\\n          <a href=\"#\" id=\"dc<%id%>\" class=\"delete-comment hidden\">delete</a>\\\n          <span id=\"cm<%id%>\" class=\"moderation hidden\">\\\n            <a href=\"#\" id=\"ac<%id%>\" class=\"accept-comment\">accept</a>\\\n          </span>\\\n        </p>\\\n        <pre class=\"proposal\" id=\"pr<%id%>\">\\\n<#proposal_diff#>\\\n        </pre>\\\n          <ul class=\"comment-children\" id=\"cl<%id%>\"></ul>\\\n        </div>\\\n        <div class=\"clearleft\"></div>\\\n      </div>\\\n    </div>';\n\n  var replyTemplate = '\\\n    <li>\\\n      <div class=\"reply-div\" id=\"rd<%id%>\">\\\n        <form id=\"rf<%id%>\">\\\n          <textarea name=\"comment\" cols=\"80\"></textarea>\\\n          <input type=\"submit\" value=\"Add reply\" />\\\n          <input type=\"button\" value=\"Cancel\" />\\\n          <input type=\"hidden\" name=\"parent\" value=\"<%id%>\" />\\\n          <input type=\"hidden\" name=\"node\" value=\"\" />\\\n        </form>\\\n      </div>\\\n    </li>';\n\n  $(document).ready(function() {\n    init();\n  });\n})(jQuery);\n\n$(document).ready(function() {\n  // add comment anchors for all paragraphs that are commentable\n  $('.sphinx-has-comment').comment();\n\n  // highlight search words in search results\n  $(\"div.context\").each(function() {\n    var params = $.getQueryParameters();\n    var terms = (params.q) ? params.q[0].split(/\\s+/) : [];\n    var result = $(this);\n    $.each(terms, function() {\n      result.highlightText(this.toLowerCase(), 'highlighted');\n    });\n  });\n\n  // directly open comment window if requested\n  var anchor = document.location.hash;\n  if (anchor.substring(0, 9) == '#comment-') {\n    $('#ao' + anchor.substring(9)).click();\n    document.location.hash = '#s' + anchor.substring(9);\n  }\n});\n"
  },
  {
    "path": "docs/_build/html/claf.config.factory.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config.factory package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.data package\" href=\"claf.data.html\" />\n    <link rel=\"prev\" title=\"claf.config package\" href=\"claf.config.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.config.html\">config</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.config.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.config.factory package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.config.factory.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.config.factory\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.config.html#module-claf.config.args\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.config.html#module-claf.config\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.config.html\">claf.config package</a> &raquo;</li>\n        \n      <li>claf.config.factory package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.config.factory.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-config-factory-package\">\n<h1>claf.config.factory package<a class=\"headerlink\" href=\"#claf-config-factory-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.config.factory.base\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.config.factory.base\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.config.factory.base.Factory\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.factory.base.</code><code class=\"sig-name descname\">Factory</code><a class=\"reference internal\" href=\"_modules/claf/config/factory/base.html#Factory\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.base.Factory\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Factory Base Class</p>\n<p>Factory method pattern</p>\n<p>In class-based programming, the factory method pattern is a creational pattern that\nuses factory methods to deal with the problem of creating objects without having to\nspecify the exact class of the object that will be created. This is done by creating\nobjects by calling a factory method—either specified in an interface and implemented\nby child classes, or implemented in a base class and optionally overridden by derived\nclasses—rather than by calling a constructor.</p>\n<dl class=\"method\">\n<dt id=\"claf.config.factory.base.Factory.create\">\n<code class=\"sig-name descname\">create</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/base.html#Factory.create\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.base.Factory.create\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>interface</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.config.factory.data_loader\"></span><dl class=\"class\">\n<dt id=\"claf.config.factory.data_loader.DataLoaderFactory\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.factory.data_loader.</code><code class=\"sig-name descname\">DataLoaderFactory</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/data_loader.html#DataLoaderFactory\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.data_loader.DataLoaderFactory\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.config.factory.base.Factory\" title=\"claf.config.factory.base.Factory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.config.factory.base.Factory</span></code></a></p>\n<p>DataLoader Factory Class</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: data_loader config from argument (config.data_loader)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.config.factory.data_loader.DataLoaderFactory.create\">\n<code class=\"sig-name descname\">create</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">datasets</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/data_loader.html#DataLoaderFactory.create\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.data_loader.DataLoaderFactory.create\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>create train, valid and test iterator</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.factory.data_loader.make_data_loader\">\n<code class=\"sig-prename descclassname\">claf.config.factory.data_loader.</code><code class=\"sig-name descname\">make_data_loader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dataset</em>, <em class=\"sig-param\">batch_size=32</em>, <em class=\"sig-param\">shuffle=True</em>, <em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/data_loader.html#make_data_loader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.data_loader.make_data_loader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<span class=\"target\" id=\"module-claf.config.factory.data_reader\"></span><dl class=\"class\">\n<dt id=\"claf.config.factory.data_reader.DataReaderFactory\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.factory.data_reader.</code><code class=\"sig-name descname\">DataReaderFactory</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/data_reader.html#DataReaderFactory\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.data_reader.DataReaderFactory\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.config.factory.base.Factory\" title=\"claf.config.factory.base.Factory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.config.factory.base.Factory</span></code></a></p>\n<p>DataReader Factory Class</p>\n<p>Create Concrete reader according to config.dataset\nGet reader from reader registries (eg. &#64;register(“reader:{reader_name}”))</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: data_reader config from argument (config.data_reader)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.config.factory.data_reader.DataReaderFactory.create\">\n<code class=\"sig-name descname\">create</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/data_reader.html#DataReaderFactory.create\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.data_reader.DataReaderFactory.create\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>interface</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.config.factory.model\"></span><dl class=\"class\">\n<dt id=\"claf.config.factory.model.ModelFactory\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.factory.model.</code><code class=\"sig-name descname\">ModelFactory</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/model.html#ModelFactory\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.model.ModelFactory\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.config.factory.base.Factory\" title=\"claf.config.factory.base.Factory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.config.factory.base.Factory</span></code></a></p>\n<p>Model Factory Class</p>\n<p>Create Concrete model according to config.model_name\nGet model from model registries (eg. &#64;register(“model:{model_name}”))</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: model config from argument (config.model)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.config.factory.model.ModelFactory.create\">\n<code class=\"sig-name descname\">create</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em>, <em class=\"sig-param\">**params</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/model.html#ModelFactory.create\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.model.ModelFactory.create\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>interface</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.config.factory.model.ModelFactory.create_token_embedder\">\n<code class=\"sig-name descname\">create_token_embedder</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em>, <em class=\"sig-param\">token_makers</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/model.html#ModelFactory.create_token_embedder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.model.ModelFactory.create_token_embedder\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.config.factory.optimizer\"></span><dl class=\"class\">\n<dt id=\"claf.config.factory.optimizer.OptimizerFactory\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.factory.optimizer.</code><code class=\"sig-name descname\">OptimizerFactory</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/optimizer.html#OptimizerFactory\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.optimizer.OptimizerFactory\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.config.factory.base.Factory\" title=\"claf.config.factory.base.Factory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.config.factory.base.Factory</span></code></a></p>\n<p>Optimizer Factory Class</p>\n<p>include optimizer, learning_rate_scheduler and exponential_moving_average</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: optimizer config from argument (config.optimizer)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.config.factory.optimizer.OptimizerFactory.create\">\n<code class=\"sig-name descname\">create</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/optimizer.html#OptimizerFactory.create\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.optimizer.OptimizerFactory.create\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>interface</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.config.factory.optimizer.OptimizerFactory.set_warmup_steps\">\n<code class=\"sig-name descname\">set_warmup_steps</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/optimizer.html#OptimizerFactory.set_warmup_steps\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.optimizer.OptimizerFactory.set_warmup_steps\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.config.factory.tokens\"></span><dl class=\"class\">\n<dt id=\"claf.config.factory.tokens.TokenMakersFactory\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.factory.tokens.</code><code class=\"sig-name descname\">TokenMakersFactory</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/tokens.html#TokenMakersFactory\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.tokens.TokenMakersFactory\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.config.factory.base.Factory\" title=\"claf.config.factory.base.Factory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.config.factory.base.Factory</span></code></a></p>\n<p>TokenMakers Factory Class</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: token config from argument (config.token)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.config.factory.tokens.TokenMakersFactory.LANGS\">\n<code class=\"sig-name descname\">LANGS</code><em class=\"property\"> = ['eng', 'kor']</em><a class=\"headerlink\" href=\"#claf.config.factory.tokens.TokenMakersFactory.LANGS\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.config.factory.tokens.TokenMakersFactory.create\">\n<code class=\"sig-name descname\">create</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/tokens.html#TokenMakersFactory.create\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.tokens.TokenMakersFactory.create\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>interface</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.factory.tokens.make_all_tokenizers\">\n<code class=\"sig-prename descclassname\">claf.config.factory.tokens.</code><code class=\"sig-name descname\">make_all_tokenizers</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">all_tokenizer_config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/tokens.html#make_all_tokenizers\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.tokens.make_all_tokenizers\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Tokenizer is resource used all token together</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.factory.tokens.make_tokenizer\">\n<code class=\"sig-prename descclassname\">claf.config.factory.tokens.</code><code class=\"sig-name descname\">make_tokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer_cls</em>, <em class=\"sig-param\">tokenizer_config</em>, <em class=\"sig-param\">parent_tokenizers={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/tokens.html#make_tokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.tokens.make_tokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.config.factory\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.config.factory\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.config.factory.DataReaderFactory\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.factory.</code><code class=\"sig-name descname\">DataReaderFactory</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/data_reader.html#DataReaderFactory\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.DataReaderFactory\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.config.factory.base.Factory\" title=\"claf.config.factory.base.Factory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.config.factory.base.Factory</span></code></a></p>\n<p>DataReader Factory Class</p>\n<p>Create Concrete reader according to config.dataset\nGet reader from reader registries (eg. &#64;register(“reader:{reader_name}”))</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: data_reader config from argument (config.data_reader)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.config.factory.DataReaderFactory.create\">\n<code class=\"sig-name descname\">create</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/data_reader.html#DataReaderFactory.create\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.DataReaderFactory.create\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>interface</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.config.factory.DataLoaderFactory\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.factory.</code><code class=\"sig-name descname\">DataLoaderFactory</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/data_loader.html#DataLoaderFactory\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.DataLoaderFactory\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.config.factory.base.Factory\" title=\"claf.config.factory.base.Factory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.config.factory.base.Factory</span></code></a></p>\n<p>DataLoader Factory Class</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: data_loader config from argument (config.data_loader)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.config.factory.DataLoaderFactory.create\">\n<code class=\"sig-name descname\">create</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">datasets</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/data_loader.html#DataLoaderFactory.create\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.DataLoaderFactory.create\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>create train, valid and test iterator</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.config.factory.ModelFactory\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.factory.</code><code class=\"sig-name descname\">ModelFactory</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/model.html#ModelFactory\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.ModelFactory\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.config.factory.base.Factory\" title=\"claf.config.factory.base.Factory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.config.factory.base.Factory</span></code></a></p>\n<p>Model Factory Class</p>\n<p>Create Concrete model according to config.model_name\nGet model from model registries (eg. &#64;register(“model:{model_name}”))</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: model config from argument (config.model)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.config.factory.ModelFactory.create\">\n<code class=\"sig-name descname\">create</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em>, <em class=\"sig-param\">**params</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/model.html#ModelFactory.create\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.ModelFactory.create\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>interface</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.config.factory.ModelFactory.create_token_embedder\">\n<code class=\"sig-name descname\">create_token_embedder</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em>, <em class=\"sig-param\">token_makers</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/model.html#ModelFactory.create_token_embedder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.ModelFactory.create_token_embedder\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.config.factory.OptimizerFactory\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.factory.</code><code class=\"sig-name descname\">OptimizerFactory</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/optimizer.html#OptimizerFactory\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.OptimizerFactory\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.config.factory.base.Factory\" title=\"claf.config.factory.base.Factory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.config.factory.base.Factory</span></code></a></p>\n<p>Optimizer Factory Class</p>\n<p>include optimizer, learning_rate_scheduler and exponential_moving_average</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: optimizer config from argument (config.optimizer)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.config.factory.OptimizerFactory.create\">\n<code class=\"sig-name descname\">create</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/optimizer.html#OptimizerFactory.create\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.OptimizerFactory.create\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>interface</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.config.factory.OptimizerFactory.set_warmup_steps\">\n<code class=\"sig-name descname\">set_warmup_steps</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/optimizer.html#OptimizerFactory.set_warmup_steps\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.OptimizerFactory.set_warmup_steps\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.config.factory.TokenMakersFactory\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.factory.</code><code class=\"sig-name descname\">TokenMakersFactory</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/tokens.html#TokenMakersFactory\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.TokenMakersFactory\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.config.factory.base.Factory\" title=\"claf.config.factory.base.Factory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.config.factory.base.Factory</span></code></a></p>\n<p>TokenMakers Factory Class</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: token config from argument (config.token)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.config.factory.TokenMakersFactory.LANGS\">\n<code class=\"sig-name descname\">LANGS</code><em class=\"property\"> = ['eng', 'kor']</em><a class=\"headerlink\" href=\"#claf.config.factory.TokenMakersFactory.LANGS\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.config.factory.TokenMakersFactory.create\">\n<code class=\"sig-name descname\">create</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/factory/tokens.html#TokenMakersFactory.create\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.factory.TokenMakersFactory.create\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>interface</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.data.html\" class=\"btn btn-neutral float-right\" title=\"claf.data package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.config.html\" class=\"btn btn-neutral\" title=\"claf.config package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.config.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.config package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.config.factory package\" href=\"claf.config.factory.html\" />\n    <link rel=\"prev\" title=\"Tokens\" href=\"contents/tokens.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">config</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.config.factory.html\">claf.config.factory package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.config.args\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.config\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf.config package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.config.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-config-package\">\n<h1>claf.config package<a class=\"headerlink\" href=\"#claf-config-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"subpackages\">\n<h2>Subpackages<a class=\"headerlink\" href=\"#subpackages\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.factory.html\">claf.config.factory package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.config.factory.html#module-claf.config.factory.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.config.factory.html#module-claf.config.factory\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"module-claf.config.args\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.config.args\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"function\">\n<dt id=\"claf.config.args.arg_str2bool\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">arg_str2bool</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">v</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#arg_str2bool\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.arg_str2bool\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.base_config\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">base_config</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#base_config\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.base_config\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.config\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">config</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">argv=None</em>, <em class=\"sig-param\">mode=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#config\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.config\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.data\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">data</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#data\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.data\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.evaluate\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">evaluate</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#evaluate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.evaluate\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.general\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">general</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#general\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.general\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.get_input_arguments\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">get_input_arguments</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em>, <em class=\"sig-param\">input_arguments</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#get_input_arguments\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.get_input_arguments\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.machine\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">machine</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#machine\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.machine\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.model\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">model</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#model\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.model\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.nsml_for_internal\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">nsml_for_internal</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#nsml_for_internal\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.nsml_for_internal\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.optimize_config\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">optimize_config</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#optimize_config\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.optimize_config\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.predict\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#predict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.set_batch_size\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">set_batch_size</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#set_batch_size\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.set_batch_size\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.set_gpu_env\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">set_gpu_env</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#set_gpu_env\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.set_gpu_env\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.token\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">token</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#token\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.token\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.train_config\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">train_config</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em>, <em class=\"sig-param\">input_argv=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#train_config\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.train_config\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Add argument only for hyperparameter tuning.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.args.trainer\">\n<code class=\"sig-prename descclassname\">claf.config.args.</code><code class=\"sig-name descname\">trainer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">parser</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/args.html#trainer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.args.trainer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<span class=\"target\" id=\"module-claf.config.namespace\"></span><dl class=\"class\">\n<dt id=\"claf.config.namespace.NestedNamespace\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.namespace.</code><code class=\"sig-name descname\">NestedNamespace</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/namespace.html#NestedNamespace\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.namespace.NestedNamespace\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/argparse.html#argparse.Namespace\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">argparse.Namespace</span></code></a></p>\n<p>Nested Namespace\n(Simple class used by default by parse_args() to create</p>\n<blockquote>\n<div><p>an object holding attributes and return it.)</p>\n</div></blockquote>\n<dl class=\"method\">\n<dt id=\"claf.config.namespace.NestedNamespace.delete_unselected\">\n<code class=\"sig-name descname\">delete_unselected</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">namespace</em>, <em class=\"sig-param\">excepts=[]</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/namespace.html#NestedNamespace.delete_unselected\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.namespace.NestedNamespace.delete_unselected\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.config.namespace.NestedNamespace.load_from_json\">\n<code class=\"sig-name descname\">load_from_json</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dict_data</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/namespace.html#NestedNamespace.load_from_json\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.namespace.NestedNamespace.load_from_json\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.config.namespace.NestedNamespace.overwrite\">\n<code class=\"sig-name descname\">overwrite</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/namespace.html#NestedNamespace.overwrite\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.namespace.NestedNamespace.overwrite\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.config.pattern\"></span><dl class=\"class\">\n<dt id=\"claf.config.pattern.Singleton\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.pattern.</code><code class=\"sig-name descname\">Singleton</code><a class=\"reference internal\" href=\"_modules/claf/config/pattern.html#Singleton\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.pattern.Singleton\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#type\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">type</span></code></a></p>\n<p>Design Pattern Base</p>\n<p>Singleton Meta Class\nthe singleton pattern is a software design pattern that restricts the\ninstantiation of a class to one object.</p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.config.registry\"></span><dl class=\"class\">\n<dt id=\"claf.config.registry.Registry\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.config.registry.</code><code class=\"sig-name descname\">Registry</code><a class=\"reference internal\" href=\"_modules/claf/config/registry.html#Registry\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.registry.Registry\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Registry class (Singleton)</p>\n<dl class=\"method\">\n<dt id=\"claf.config.registry.Registry.add\">\n<code class=\"sig-name descname\">add</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">obj</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/registry.html#Registry.add\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.registry.Registry.add\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.config.registry.Registry.get\">\n<code class=\"sig-name descname\">get</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/registry.html#Registry.get\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.registry.Registry.get\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.config.utils\"></span><dl class=\"function\">\n<dt id=\"claf.config.utils.convert_config2dict\">\n<code class=\"sig-prename descclassname\">claf.config.utils.</code><code class=\"sig-name descname\">convert_config2dict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/utils.html#convert_config2dict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.utils.convert_config2dict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.utils.pretty_json_dumps\">\n<code class=\"sig-prename descclassname\">claf.config.utils.</code><code class=\"sig-name descname\">pretty_json_dumps</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/utils.html#pretty_json_dumps\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.utils.pretty_json_dumps\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.utils.remove_none\">\n<code class=\"sig-prename descclassname\">claf.config.utils.</code><code class=\"sig-name descname\">remove_none</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">obj</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/utils.html#remove_none\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.utils.remove_none\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.config.utils.set_global_seed\">\n<code class=\"sig-prename descclassname\">claf.config.utils.</code><code class=\"sig-name descname\">set_global_seed</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">seed=21</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/config/utils.html#set_global_seed\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.config.utils.set_global_seed\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.config\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.config\" title=\"Permalink to this headline\">¶</a></h2>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.config.factory.html\" class=\"btn btn-neutral float-right\" title=\"claf.config.factory package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"contents/tokens.html\" class=\"btn btn-neutral\" title=\"Tokens\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.data.dataset.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.dataset package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.data.reader package\" href=\"claf.data.reader.html\" />\n    <link rel=\"prev\" title=\"claf.data package\" href=\"claf.data.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.data.html\">data</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.data.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.data.dataset package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.data.dataset.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.data.dataset\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.data.reader.html\">claf.data.reader package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.html#module-claf.data.collate\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.html#module-claf.data\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.data.html\">claf.data package</a> &raquo;</li>\n        \n      <li>claf.data.dataset package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.data.dataset.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-data-dataset-package\">\n<h1>claf.data.dataset package<a class=\"headerlink\" href=\"#claf-data-dataset-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.data.dataset.base\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.data.dataset.base\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.data.dataset.base.DatasetBase\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.base.</code><code class=\"sig-name descname\">DatasetBase</code><a class=\"reference internal\" href=\"_modules/claf/data/dataset/base.html#DatasetBase\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.utils.data.dataset.Dataset</span></code></p>\n<p>Dataset Base Model\nAn abstract class representing a Dataset.</p>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.base.DatasetBase.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/base.html#DatasetBase.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.base.DatasetBase.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.base.DatasetBase.get_ground_truth\">\n<code class=\"sig-name descname\">get_ground_truth</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/base.html#DatasetBase.get_ground_truth\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.base.DatasetBase.get_ground_truth\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.base.DatasetBase.get_ground_truths\">\n<code class=\"sig-name descname\">get_ground_truths</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_idxs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/base.html#DatasetBase.get_ground_truths\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.base.DatasetBase.get_ground_truths\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.base.DatasetBase.get_predict\">\n<code class=\"sig-name descname\">get_predict</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/base.html#DatasetBase.get_predict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.base.DatasetBase.get_predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.base.DatasetBase.lazy_evaluation\">\n<code class=\"sig-name descname\">lazy_evaluation</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/base.html#DatasetBase.lazy_evaluation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.base.DatasetBase.lazy_evaluation\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.dataset.seq_cls\"></span><dl class=\"class\">\n<dt id=\"claf.data.dataset.seq_cls.SeqClsDataset\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.seq_cls.</code><code class=\"sig-name descname\">SeqClsDataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">batch</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helper=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/seq_cls.html#SeqClsDataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.seq_cls.SeqClsDataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"claf.data.dataset.base.DatasetBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.dataset.base.DatasetBase</span></code></a></p>\n<p>Dataset for Sequence Classification</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>batch: Batch DTO (claf.data.batch)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>helper: helper from data_reader</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.seq_cls.SeqClsDataset.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/seq_cls.html#SeqClsDataset.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.seq_cls.SeqClsDataset.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>collate: indexed features and labels -&gt; tensor</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.seq_cls.SeqClsDataset.get_class_text_with_idx\">\n<code class=\"sig-name descname\">get_class_text_with_idx</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">class_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/seq_cls.html#SeqClsDataset.get_class_text_with_idx\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.seq_cls.SeqClsDataset.get_class_text_with_idx\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.seq_cls.SeqClsDataset.get_ground_truth\">\n<code class=\"sig-name descname\">get_ground_truth</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/seq_cls.html#SeqClsDataset.get_ground_truth\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.seq_cls.SeqClsDataset.get_ground_truth\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.seq_cls.SeqClsDataset.get_id\">\n<code class=\"sig-name descname\">get_id</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/seq_cls.html#SeqClsDataset.get_id\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.seq_cls.SeqClsDataset.get_id\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.seq_cls.SeqClsDataset.num_classes\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">num_classes</code><a class=\"headerlink\" href=\"#claf.data.dataset.seq_cls.SeqClsDataset.num_classes\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.seq_cls.SeqClsDataset.sequence_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">sequence_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.seq_cls.SeqClsDataset.sequence_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.dataset.squad\"></span><dl class=\"class\">\n<dt id=\"claf.data.dataset.squad.SQuADDataset\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.squad.</code><code class=\"sig-name descname\">SQuADDataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">batch</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helper=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.squad.SQuADDataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"claf.data.dataset.base.DatasetBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.dataset.base.DatasetBase</span></code></a></p>\n<dl class=\"simple\">\n<dt>SQuAD Dataset</dt><dd><p>compatible with v1.1 and v2.0</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>batch: Batch DTO (claf.data.batch)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>helper: helper from data_reader</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.squad.SQuADDataset.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.squad.SQuADDataset.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>collate: indexed features and labels -&gt; tensor</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.squad.SQuADDataset.context_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">context_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.squad.SQuADDataset.context_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.squad.SQuADDataset.get_context\">\n<code class=\"sig-name descname\">get_context</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_context\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.squad.SQuADDataset.get_context\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.squad.SQuADDataset.get_ground_truths\">\n<code class=\"sig-name descname\">get_ground_truths</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_ground_truths\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.squad.SQuADDataset.get_ground_truths\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.squad.SQuADDataset.get_predict\">\n<code class=\"sig-name descname\">get_predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em>, <em class=\"sig-param\">start</em>, <em class=\"sig-param\">end</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_predict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.squad.SQuADDataset.get_predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.squad.SQuADDataset.get_qid\">\n<code class=\"sig-name descname\">get_qid</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_qid\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.squad.SQuADDataset.get_qid\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.squad.SQuADDataset.get_text_span\">\n<code class=\"sig-name descname\">get_text_span</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_text_span\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.squad.SQuADDataset.get_text_span\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.squad.SQuADDataset.get_text_with_index\">\n<code class=\"sig-name descname\">get_text_with_index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em>, <em class=\"sig-param\">start</em>, <em class=\"sig-param\">end</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_text_with_index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.squad.SQuADDataset.get_text_with_index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.squad.SQuADDataset.question_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">question_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.squad.SQuADDataset.question_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.dataset.wikisql\"></span><dl class=\"class\">\n<dt id=\"claf.data.dataset.wikisql.WikiSQLDataset\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.wikisql.</code><code class=\"sig-name descname\">WikiSQLDataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">batch</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helper=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.wikisql.WikiSQLDataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"claf.data.dataset.base.DatasetBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.dataset.base.DatasetBase</span></code></a></p>\n<p>WikiSQL Dataset</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>batch: Batch DTO (claf.data.batch)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>helper: helper from data_reader</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.wikisql.WikiSQLDataset.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.wikisql.WikiSQLDataset.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>collate: indexed features and labels -&gt; tensor</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.wikisql.WikiSQLDataset.get_ground_truth\">\n<code class=\"sig-name descname\">get_ground_truth</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset.get_ground_truth\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.wikisql.WikiSQLDataset.get_ground_truth\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.wikisql.WikiSQLDataset.get_id\">\n<code class=\"sig-name descname\">get_id</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset.get_id\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.wikisql.WikiSQLDataset.get_id\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.wikisql.WikiSQLDataset.get_table_id\">\n<code class=\"sig-name descname\">get_table_id</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset.get_table_id\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.wikisql.WikiSQLDataset.get_table_id\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.wikisql.WikiSQLDataset.get_tokenized_question\">\n<code class=\"sig-name descname\">get_tokenized_question</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset.get_tokenized_question\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.wikisql.WikiSQLDataset.get_tokenized_question\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.wikisql.WikiSQLDataset.question_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">question_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.wikisql.WikiSQLDataset.question_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.data.dataset\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.data.dataset\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.data.dataset.MultiTaskBertDataset\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.</code><code class=\"sig-name descname\">MultiTaskBertDataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">batches</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helper=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/multi_task.html#MultiTaskBertDataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.MultiTaskBertDataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"claf.data.dataset.base.DatasetBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.dataset.base.DatasetBase</span></code></a></p>\n<p>Dataset for Multi-Task GLUE using BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>batch: Batch DTO (claf.data.batch)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>helper: helper from data_reader</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.MultiTaskBertDataset.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/multi_task.html#MultiTaskBertDataset.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.MultiTaskBertDataset.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.MultiTaskBertDataset.init_iterators\">\n<code class=\"sig-name descname\">init_iterators</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/multi_task.html#MultiTaskBertDataset.init_iterators\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.MultiTaskBertDataset.init_iterators\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.dataset.RegressionBertDataset\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.</code><code class=\"sig-name descname\">RegressionBertDataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">batch</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helper=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/regression.html#RegressionBertDataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.RegressionBertDataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"claf.data.dataset.base.DatasetBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.dataset.base.DatasetBase</span></code></a></p>\n<p>Dataset for Regression using BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>batch: Batch DTO (claf.data.batch)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>helper: helper from data_reader</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.RegressionBertDataset.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/regression.html#RegressionBertDataset.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.RegressionBertDataset.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>collate: indexed features and labels -&gt; tensor</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.RegressionBertDataset.get_ground_truth\">\n<code class=\"sig-name descname\">get_ground_truth</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/regression.html#RegressionBertDataset.get_ground_truth\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.RegressionBertDataset.get_ground_truth\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.RegressionBertDataset.get_id\">\n<code class=\"sig-name descname\">get_id</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/regression.html#RegressionBertDataset.get_id\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.RegressionBertDataset.get_id\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.RegressionBertDataset.sequence_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">sequence_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.RegressionBertDataset.sequence_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.dataset.SeqClsDataset\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.</code><code class=\"sig-name descname\">SeqClsDataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">batch</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helper=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/seq_cls.html#SeqClsDataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsDataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"claf.data.dataset.base.DatasetBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.dataset.base.DatasetBase</span></code></a></p>\n<p>Dataset for Sequence Classification</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>batch: Batch DTO (claf.data.batch)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>helper: helper from data_reader</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsDataset.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/seq_cls.html#SeqClsDataset.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsDataset.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>collate: indexed features and labels -&gt; tensor</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsDataset.get_class_text_with_idx\">\n<code class=\"sig-name descname\">get_class_text_with_idx</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">class_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/seq_cls.html#SeqClsDataset.get_class_text_with_idx\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsDataset.get_class_text_with_idx\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsDataset.get_ground_truth\">\n<code class=\"sig-name descname\">get_ground_truth</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/seq_cls.html#SeqClsDataset.get_ground_truth\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsDataset.get_ground_truth\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsDataset.get_id\">\n<code class=\"sig-name descname\">get_id</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/seq_cls.html#SeqClsDataset.get_id\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsDataset.get_id\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsDataset.num_classes\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">num_classes</code><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsDataset.num_classes\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsDataset.sequence_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">sequence_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsDataset.sequence_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.dataset.SeqClsBertDataset\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.</code><code class=\"sig-name descname\">SeqClsBertDataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">batch</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helper=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/seq_cls.html#SeqClsBertDataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsBertDataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"claf.data.dataset.base.DatasetBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.dataset.base.DatasetBase</span></code></a></p>\n<p>Dataset for Sequence Classification using BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>batch: Batch DTO (claf.data.batch)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>helper: helper from data_reader</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsBertDataset.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/seq_cls.html#SeqClsBertDataset.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsBertDataset.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>collate: indexed features and labels -&gt; tensor</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsBertDataset.get_class_text_with_idx\">\n<code class=\"sig-name descname\">get_class_text_with_idx</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">class_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/seq_cls.html#SeqClsBertDataset.get_class_text_with_idx\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsBertDataset.get_class_text_with_idx\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsBertDataset.get_ground_truth\">\n<code class=\"sig-name descname\">get_ground_truth</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/seq_cls.html#SeqClsBertDataset.get_ground_truth\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsBertDataset.get_ground_truth\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsBertDataset.get_id\">\n<code class=\"sig-name descname\">get_id</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/seq_cls.html#SeqClsBertDataset.get_id\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsBertDataset.get_id\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsBertDataset.num_classes\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">num_classes</code><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsBertDataset.num_classes\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SeqClsBertDataset.sequence_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">sequence_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.SeqClsBertDataset.sequence_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.dataset.SQuADDataset\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.</code><code class=\"sig-name descname\">SQuADDataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">batch</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helper=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADDataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"claf.data.dataset.base.DatasetBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.dataset.base.DatasetBase</span></code></a></p>\n<dl class=\"simple\">\n<dt>SQuAD Dataset</dt><dd><p>compatible with v1.1 and v2.0</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>batch: Batch DTO (claf.data.batch)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>helper: helper from data_reader</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADDataset.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADDataset.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>collate: indexed features and labels -&gt; tensor</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADDataset.context_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">context_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADDataset.context_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADDataset.get_context\">\n<code class=\"sig-name descname\">get_context</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_context\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADDataset.get_context\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADDataset.get_ground_truths\">\n<code class=\"sig-name descname\">get_ground_truths</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_ground_truths\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADDataset.get_ground_truths\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADDataset.get_predict\">\n<code class=\"sig-name descname\">get_predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em>, <em class=\"sig-param\">start</em>, <em class=\"sig-param\">end</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_predict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADDataset.get_predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADDataset.get_qid\">\n<code class=\"sig-name descname\">get_qid</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_qid\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADDataset.get_qid\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADDataset.get_text_span\">\n<code class=\"sig-name descname\">get_text_span</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_text_span\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADDataset.get_text_span\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADDataset.get_text_with_index\">\n<code class=\"sig-name descname\">get_text_with_index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em>, <em class=\"sig-param\">start</em>, <em class=\"sig-param\">end</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/squad.html#SQuADDataset.get_text_with_index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADDataset.get_text_with_index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADDataset.question_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">question_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADDataset.question_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.dataset.SQuADBertDataset\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.</code><code class=\"sig-name descname\">SQuADBertDataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">batch</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helper=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/squad.html#SQuADBertDataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADBertDataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"claf.data.dataset.base.DatasetBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.dataset.base.DatasetBase</span></code></a></p>\n<dl class=\"simple\">\n<dt>SQuAD Dataset for BERT</dt><dd><p>compatible with v1.1 and v2.0</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>batch: Batch DTO (claf.data.batch)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>helper: helper from data_reader</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADBertDataset.bert_input_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">bert_input_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADBertDataset.bert_input_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADBertDataset.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/squad.html#SQuADBertDataset.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADBertDataset.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>collate: indexed features and labels -&gt; tensor</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADBertDataset.get_bert_tokens\">\n<code class=\"sig-name descname\">get_bert_tokens</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/squad.html#SQuADBertDataset.get_bert_tokens\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADBertDataset.get_bert_tokens\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADBertDataset.get_context\">\n<code class=\"sig-name descname\">get_context</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/squad.html#SQuADBertDataset.get_context\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADBertDataset.get_context\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADBertDataset.get_ground_truths\">\n<code class=\"sig-name descname\">get_ground_truths</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/squad.html#SQuADBertDataset.get_ground_truths\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADBertDataset.get_ground_truths\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADBertDataset.get_id\">\n<code class=\"sig-name descname\">get_id</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/squad.html#SQuADBertDataset.get_id\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADBertDataset.get_id\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADBertDataset.get_predict\">\n<code class=\"sig-name descname\">get_predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em>, <em class=\"sig-param\">start</em>, <em class=\"sig-param\">end</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/squad.html#SQuADBertDataset.get_predict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADBertDataset.get_predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADBertDataset.get_qid\">\n<code class=\"sig-name descname\">get_qid</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/squad.html#SQuADBertDataset.get_qid\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADBertDataset.get_qid\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADBertDataset.get_qid_index\">\n<code class=\"sig-name descname\">get_qid_index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/squad.html#SQuADBertDataset.get_qid_index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADBertDataset.get_qid_index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.SQuADBertDataset.get_text_with_index\">\n<code class=\"sig-name descname\">get_text_with_index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em>, <em class=\"sig-param\">start</em>, <em class=\"sig-param\">end</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/squad.html#SQuADBertDataset.get_text_with_index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.SQuADBertDataset.get_text_with_index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.dataset.TokClsBertDataset\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.</code><code class=\"sig-name descname\">TokClsBertDataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">batch</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helper=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/tok_cls.html#TokClsBertDataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.TokClsBertDataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"claf.data.dataset.base.DatasetBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.dataset.base.DatasetBase</span></code></a></p>\n<p>Dataset for Token Classification</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>batch: Batch DTO (claf.data.batch)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>helper: helper from data_reader</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.TokClsBertDataset.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/tok_cls.html#TokClsBertDataset.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.TokClsBertDataset.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>collate: indexed features and labels -&gt; tensor</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.TokClsBertDataset.get_ground_truth\">\n<code class=\"sig-name descname\">get_ground_truth</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/tok_cls.html#TokClsBertDataset.get_ground_truth\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.TokClsBertDataset.get_ground_truth\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.TokClsBertDataset.get_id\">\n<code class=\"sig-name descname\">get_id</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/tok_cls.html#TokClsBertDataset.get_id\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.TokClsBertDataset.get_id\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.TokClsBertDataset.get_tag_text_with_idx\">\n<code class=\"sig-name descname\">get_tag_text_with_idx</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tag_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/tok_cls.html#TokClsBertDataset.get_tag_text_with_idx\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.TokClsBertDataset.get_tag_text_with_idx\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.TokClsBertDataset.get_tag_texts_with_idxs\">\n<code class=\"sig-name descname\">get_tag_texts_with_idxs</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tag_idxs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/bert/tok_cls.html#TokClsBertDataset.get_tag_texts_with_idxs\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.TokClsBertDataset.get_tag_texts_with_idxs\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.TokClsBertDataset.num_tags\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">num_tags</code><a class=\"headerlink\" href=\"#claf.data.dataset.TokClsBertDataset.num_tags\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.TokClsBertDataset.sequence_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">sequence_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.TokClsBertDataset.sequence_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.dataset.WikiSQLDataset\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.dataset.</code><code class=\"sig-name descname\">WikiSQLDataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">batch</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helper=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.WikiSQLDataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.dataset.base.DatasetBase\" title=\"claf.data.dataset.base.DatasetBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.dataset.base.DatasetBase</span></code></a></p>\n<p>WikiSQL Dataset</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>batch: Batch DTO (claf.data.batch)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>helper: helper from data_reader</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.WikiSQLDataset.collate_fn\">\n<code class=\"sig-name descname\">collate_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset.collate_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.WikiSQLDataset.collate_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>collate: indexed features and labels -&gt; tensor</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.WikiSQLDataset.get_ground_truth\">\n<code class=\"sig-name descname\">get_ground_truth</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset.get_ground_truth\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.WikiSQLDataset.get_ground_truth\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.WikiSQLDataset.get_id\">\n<code class=\"sig-name descname\">get_id</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset.get_id\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.WikiSQLDataset.get_id\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.WikiSQLDataset.get_table_id\">\n<code class=\"sig-name descname\">get_table_id</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset.get_table_id\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.WikiSQLDataset.get_table_id\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.WikiSQLDataset.get_tokenized_question\">\n<code class=\"sig-name descname\">get_tokenized_question</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/dataset/wikisql.html#WikiSQLDataset.get_tokenized_question\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.dataset.WikiSQLDataset.get_tokenized_question\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.dataset.WikiSQLDataset.question_maxlen\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">question_maxlen</code><a class=\"headerlink\" href=\"#claf.data.dataset.WikiSQLDataset.question_maxlen\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.data.reader.html\" class=\"btn btn-neutral float-right\" title=\"claf.data.reader package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.data.html\" class=\"btn btn-neutral\" title=\"claf.data package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.data.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.data.dataset package\" href=\"claf.data.dataset.html\" />\n    <link rel=\"prev\" title=\"claf.config.factory package\" href=\"claf.config.factory.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">data</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.data.dataset.html\">claf.data.dataset package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.data.reader.html\">claf.data.reader package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.data.collate\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.data\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf.data package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.data.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-data-package\">\n<h1>claf.data package<a class=\"headerlink\" href=\"#claf-data-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"subpackages\">\n<h2>Subpackages<a class=\"headerlink\" href=\"#subpackages\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.dataset.html\">claf.data.dataset package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.dataset.html#module-claf.data.dataset.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.dataset.html#module-claf.data.dataset\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.reader.html\">claf.data.reader package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.reader.html#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.data.reader.bert.html\">claf.data.reader.bert package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.reader.bert.html#module-claf.data.reader.bert.conll2003\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.reader.bert.html#module-claf.data.reader.bert\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.reader.html#module-claf.data.reader.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.reader.html#module-claf.data.reader\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"module-claf.data.collate\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.data.collate\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.data.collate.FeatLabelPadCollator\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.collate.</code><code class=\"sig-name descname\">FeatLabelPadCollator</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None, pad_value=0, skip_keys=['text']</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/collate.html#FeatLabelPadCollator\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.collate.FeatLabelPadCollator\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.collate.PadCollator\" title=\"claf.data.collate.PadCollator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.collate.PadCollator</span></code></a></p>\n<p>Collator apply pad and make tensor\nMinimizes amount of padding needed while producing mini-batch.</p>\n<p>FeatLabelPadCollator allows applying pad to not only features, but also labels.</p>\n<ul>\n<li><dl>\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>cuda_device_id: tensor assign to cuda device id</dt><dd><p>Default is None (CPU)</p>\n</dd>\n</dl>\n<p>skip_keys: skip to make tensor</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.collate.FeatLabelPadCollator.collate\">\n<code class=\"sig-name descname\">collate</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">datas</em>, <em class=\"sig-param\">apply_pad=True</em>, <em class=\"sig-param\">apply_pad_labels=()</em>, <em class=\"sig-param\">apply_pad_values=()</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/collate.html#FeatLabelPadCollator.collate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.collate.FeatLabelPadCollator.collate\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.collate.PadCollator\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.collate.</code><code class=\"sig-name descname\">PadCollator</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cuda_device_id=None, pad_value=0, skip_keys=['text']</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/collate.html#PadCollator\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.collate.PadCollator\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Collator apply pad and make tensor\nMinimizes amount of padding needed while producing mini-batch.</p>\n<ul>\n<li><dl>\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>cuda_device_id: tensor assign to cuda device id</dt><dd><p>Default is None (CPU)</p>\n</dd>\n</dl>\n<p>skip_keys: skip to make tensor</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.collate.PadCollator.collate\">\n<code class=\"sig-name descname\">collate</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">datas</em>, <em class=\"sig-param\">apply_pad=True</em>, <em class=\"sig-param\">pad_value=0</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/collate.html#PadCollator.collate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.collate.PadCollator.collate\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.data_handler\"></span><dl class=\"class\">\n<dt id=\"claf.data.data_handler.CachePath\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.data_handler.</code><code class=\"sig-name descname\">CachePath</code><a class=\"reference internal\" href=\"_modules/claf/data/data_handler.html#CachePath\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.data_handler.CachePath\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<dl class=\"attribute\">\n<dt id=\"claf.data.data_handler.CachePath.DATASET\">\n<code class=\"sig-name descname\">DATASET</code><em class=\"property\"> = PosixPath('/Users/Dongjun/.claf_cache/dataset')</em><a class=\"headerlink\" href=\"#claf.data.data_handler.CachePath.DATASET\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.data_handler.CachePath.MACHINE\">\n<code class=\"sig-name descname\">MACHINE</code><em class=\"property\"> = PosixPath('/Users/Dongjun/.claf_cache/machine')</em><a class=\"headerlink\" href=\"#claf.data.data_handler.CachePath.MACHINE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.data_handler.CachePath.PRETRAINED_VECTOR\">\n<code class=\"sig-name descname\">PRETRAINED_VECTOR</code><em class=\"property\"> = PosixPath('/Users/Dongjun/.claf_cache/pretrained_vector')</em><a class=\"headerlink\" href=\"#claf.data.data_handler.CachePath.PRETRAINED_VECTOR\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.data_handler.CachePath.ROOT\">\n<code class=\"sig-name descname\">ROOT</code><em class=\"property\"> = PosixPath('/Users/Dongjun/.claf_cache')</em><a class=\"headerlink\" href=\"#claf.data.data_handler.CachePath.ROOT\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.data_handler.CachePath.TOKEN_COUNTER\">\n<code class=\"sig-name descname\">TOKEN_COUNTER</code><em class=\"property\"> = PosixPath('/Users/Dongjun/.claf_cache/token_counter')</em><a class=\"headerlink\" href=\"#claf.data.data_handler.CachePath.TOKEN_COUNTER\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.data_handler.CachePath.VOCAB\">\n<code class=\"sig-name descname\">VOCAB</code><em class=\"property\"> = PosixPath('/Users/Dongjun/.claf_cache/vocab')</em><a class=\"headerlink\" href=\"#claf.data.data_handler.CachePath.VOCAB\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.data_handler.DataHandler\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.data_handler.</code><code class=\"sig-name descname\">DataHandler</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">cache_path=PosixPath('/Users/Dongjun/.claf_cache')</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/data_handler.html#DataHandler\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.data_handler.DataHandler\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>DataHandler with CachePath</p>\n<ul class=\"simple\">\n<li><p>read (from_path, from_http)</p></li>\n<li><p>dump (.msgpack or .pkl (pickle))</p></li>\n<li><p>load</p></li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.data_handler.DataHandler.cache_token_counter\">\n<code class=\"sig-name descname\">cache_token_counter</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_reader_config</em>, <em class=\"sig-param\">tokenizer_name</em>, <em class=\"sig-param\">obj=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/data_handler.html#DataHandler.cache_token_counter\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.data_handler.DataHandler.cache_token_counter\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.data_handler.DataHandler.convert_cache_path\">\n<code class=\"sig-name descname\">convert_cache_path</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/data_handler.html#DataHandler.convert_cache_path\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.data_handler.DataHandler.convert_cache_path\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.data_handler.DataHandler.dump\">\n<code class=\"sig-name descname\">dump</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_path</em>, <em class=\"sig-param\">obj</em>, <em class=\"sig-param\">encoding='utf-8'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/data_handler.html#DataHandler.dump\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.data_handler.DataHandler.dump\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.data_handler.DataHandler.load\">\n<code class=\"sig-name descname\">load</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_path</em>, <em class=\"sig-param\">encoding='utf-8'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/data_handler.html#DataHandler.load\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.data_handler.DataHandler.load\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.data_handler.DataHandler.read\">\n<code class=\"sig-name descname\">read</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_path</em>, <em class=\"sig-param\">encoding='utf-8'</em>, <em class=\"sig-param\">return_path=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/data_handler.html#DataHandler.read\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.data_handler.DataHandler.read\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.data_handler.DataHandler.read_embedding\">\n<code class=\"sig-name descname\">read_embedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/data_handler.html#DataHandler.read_embedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.data_handler.DataHandler.read_embedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.utils\"></span><dl class=\"function\">\n<dt id=\"claf.data.utils.get_is_head_of_word\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">get_is_head_of_word</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">naive_tokens</em>, <em class=\"sig-param\">sequence_tokens</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#get_is_head_of_word\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.get_is_head_of_word\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Return a list of flags whether the token is head(prefix) of naively split tokens</p>\n<dl>\n<dt>ex) naive_tokens: [“hello.”, “how”, “are”, “you?”]</dt><dd><p>sequence_tokens: [“hello”, “.”, “how”, “are”, “you”, “?”]</p>\n<p>=&gt; [1, 0, 1, 1, 1, 0]</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>naive_tokens: a list of tokens, naively split by whitespace\nsequence_tokens: a list of tokens, split by ‘word_tokenizer’</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><dl class=\"simple\">\n<dt>is_head_of_word: a list with its length the same as that of ‘sequence_tokens’.</dt><dd><p>has 1 if the tokenized word at the position is head(prefix) of a <cite>naive_token</cite>\nand 0 if otherwise.</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.data.utils.get_sequence_a\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">get_sequence_a</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">example</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#get_sequence_a\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.get_sequence_a\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.data.utils.get_token_dim\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">get_token_dim</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokens</em>, <em class=\"sig-param\">dim=0</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#get_token_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.get_token_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.data.utils.get_token_type\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">get_token_type</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokens</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#get_token_type\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.get_token_type\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.data.utils.is_lazy\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">is_lazy</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokens</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#is_lazy\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.is_lazy\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.data.utils.make_batch\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">make_batch</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#make_batch\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.make_batch\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.data.utils.make_bert_input\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">make_bert_input</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">sequence_a</em>, <em class=\"sig-param\">sequence_b</em>, <em class=\"sig-param\">bert_tokenizer</em>, <em class=\"sig-param\">max_seq_length=128</em>, <em class=\"sig-param\">data_type='train'</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#make_bert_input\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.make_bert_input\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.data.utils.make_bert_token_type\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">make_bert_token_type</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">bert_input_text</em>, <em class=\"sig-param\">SEP_token='[SEP]'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#make_bert_token_type\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.make_bert_token_type\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.data.utils.make_bert_token_types\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">make_bert_token_types</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">bert_inputs</em>, <em class=\"sig-param\">SEP_token='[SEP]'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#make_bert_token_types\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.make_bert_token_types\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bert Inputs segment_ids</p>\n<p>ex) [CLS] hi [SEP] he ##llo [SEP] =&gt; 0 0 0 1 1 1</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><dl class=\"simple\">\n<dt>bert_inputs: feature dictionary consisting of</dt><dd><ul>\n<li><p>text: text from data_reader</p></li>\n<li><p>token_name: text converted to corresponding token_type</p></li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>SEP_token: SEP special token for BERT</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.data.utils.padding_tokens\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">padding_tokens</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokens</em>, <em class=\"sig-param\">max_len=None</em>, <em class=\"sig-param\">token_name=None</em>, <em class=\"sig-param\">pad_value=0</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#padding_tokens\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.padding_tokens\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Padding tokens according to token’s dimension</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.data.utils.sanity_check_iob\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">sanity_check_iob</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">naive_tokens</em>, <em class=\"sig-param\">tag_texts</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#sanity_check_iob\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.sanity_check_iob\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Check if the IOB tags are valid.</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>naive_tokens: tokens split by .split()\ntag_texts: list of tags in IOB format</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.data.utils.transpose\">\n<code class=\"sig-prename descclassname\">claf.data.utils.</code><code class=\"sig-name descname\">transpose</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">list_of_dict</em>, <em class=\"sig-param\">skip_keys=[]</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/utils.html#transpose\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.utils.transpose\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.data\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.data\" title=\"Permalink to this headline\">¶</a></h2>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.data.dataset.html\" class=\"btn btn-neutral float-right\" title=\"claf.data.dataset package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.config.factory.html\" class=\"btn btn-neutral\" title=\"claf.config.factory package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.data.reader.bert.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader.bert package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.learn package\" href=\"claf.learn.html\" />\n    <link rel=\"prev\" title=\"claf.data.reader package\" href=\"claf.data.reader.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.data.html\">data</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.data.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.data.dataset.html\">claf.data.dataset package</a></li>\n<li class=\"toctree-l3 current\"><a class=\"reference internal\" href=\"claf.data.reader.html\">claf.data.reader package</a><ul class=\"current\">\n<li class=\"toctree-l4 current\"><a class=\"reference internal\" href=\"claf.data.reader.html#subpackages\">Subpackages</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.reader.html#module-claf.data.reader.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.reader.html#module-claf.data.reader\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.html#module-claf.data.collate\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.html#module-claf.data\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.data.html\">claf.data package</a> &raquo;</li>\n        \n          <li><a href=\"claf.data.reader.html\">claf.data.reader package</a> &raquo;</li>\n        \n      <li>claf.data.reader.bert package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.data.reader.bert.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-data-reader-bert-package\">\n<h1>claf.data.reader.bert package<a class=\"headerlink\" href=\"#claf-data-reader-bert-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.data.reader.bert.conll2003\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.data.reader.bert.conll2003\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.data.reader.bert.conll2003.CoNLL2003BertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.bert.conll2003.</code><code class=\"sig-name descname\">CoNLL2003BertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">ignore_tag_idx=-1</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/conll2003.html#CoNLL2003BertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.bert.conll2003.CoNLL2003BertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.bert.tok_cls.TokClsBertReader\" title=\"claf.data.reader.bert.tok_cls.TokClsBertReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.tok_cls.TokClsBertReader</span></code></a></p>\n<blockquote>\n<div><p>CoNLL2003 for BERT</p>\n</div></blockquote>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: file paths (train and dev)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>ignore_tag_idx: prediction results that have this number as ground-truth idx are ignored</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.reader.bert.seq_cls\"></span><dl class=\"class\">\n<dt id=\"claf.data.reader.bert.seq_cls.SeqClsBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.bert.seq_cls.</code><code class=\"sig-name descname\">SeqClsBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">class_key='class'</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/seq_cls.html#SeqClsBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.bert.seq_cls.SeqClsBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.html#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>DataReader for Sequence (Single and Pair) Classification using BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: define tokenizers config (subword)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>class_key: name of the label in .json file to use for classification</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.bert.seq_cls.SeqClsBertReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = None</em><a class=\"headerlink\" href=\"#claf.data.reader.bert.seq_cls.SeqClsBertReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.bert.seq_cls.SeqClsBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = None</em><a class=\"headerlink\" href=\"#claf.data.reader.bert.seq_cls.SeqClsBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.bert.seq_cls.SeqClsBertReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/seq_cls.html#SeqClsBertReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.bert.seq_cls.SeqClsBertReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: sequence_a and sequence_b</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.reader.bert.squad\"></span><dl class=\"class\">\n<dt id=\"claf.data.reader.bert.squad.SQuADBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.bert.squad.</code><code class=\"sig-name descname\">SQuADBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">lang_code</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">max_seq_length=384</em>, <em class=\"sig-param\">context_stride=128</em>, <em class=\"sig-param\">max_question_length=64</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/squad.html#SQuADBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.bert.squad.SQuADBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.html#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>SQuAD DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: defined tokenizers config (char/word)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.bert.squad.SQuADBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'f1'</em><a class=\"headerlink\" href=\"#claf.data.reader.bert.squad.SQuADBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.bert.squad.SQuADBertReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/squad.html#SQuADBertReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.bert.squad.SQuADBertReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: question, context</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.bert.squad.Token\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.bert.squad.</code><code class=\"sig-name descname\">Token</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em>, <em class=\"sig-param\">text_span=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/squad.html#Token\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.bert.squad.Token\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.reader.bert.tok_cls\"></span><dl class=\"class\">\n<dt id=\"claf.data.reader.bert.tok_cls.TokClsBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.bert.tok_cls.</code><code class=\"sig-name descname\">TokClsBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">lang_code=None</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">tag_key='tags'</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">ignore_tag_idx=-1</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/tok_cls.html#TokClsBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.bert.tok_cls.TokClsBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.html#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>DataReader for Token Classification using BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: define tokenizers config (subword)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>lang_code: language code: set as ‘ko’ if using BERT model trained with mecab-tokenized data\ntag_key: name of the label in .json file to use for classification\nignore_tag_idx: prediction results that have this number as ground-truth idx are ignored</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.reader.bert.tok_cls.TokClsBertReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/tok_cls.html#TokClsBertReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.bert.tok_cls.TokClsBertReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: sequence</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.data.reader.bert\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.data.reader.bert\" title=\"Permalink to this headline\">¶</a></h2>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.learn.html\" class=\"btn btn-neutral float-right\" title=\"claf.learn package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.data.reader.html\" class=\"btn btn-neutral\" title=\"claf.data.reader package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.data.reader.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.data.reader package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.data.reader.bert package\" href=\"claf.data.reader.bert.html\" />\n    <link rel=\"prev\" title=\"claf.data.dataset package\" href=\"claf.data.dataset.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.data.html\">data</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.data.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.data.dataset.html\">claf.data.dataset package</a></li>\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.data.reader package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#subpackages\">Subpackages</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.data.reader.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.data.reader\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.html#module-claf.data.collate\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.html#module-claf.data\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.data.html\">claf.data package</a> &raquo;</li>\n        \n      <li>claf.data.reader package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.data.reader.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-data-reader-package\">\n<h1>claf.data.reader package<a class=\"headerlink\" href=\"#claf-data-reader-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"subpackages\">\n<h2>Subpackages<a class=\"headerlink\" href=\"#subpackages\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.reader.bert.html\">claf.data.reader.bert package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.reader.bert.html#module-claf.data.reader.bert.conll2003\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.reader.bert.html#module-claf.data.reader.bert\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"module-claf.data.reader.base\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.data.reader.base\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.data.reader.base.DataReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.base.</code><code class=\"sig-name descname\">DataReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">dataset_obj</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/base.html#DataReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.base.DataReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>DataReader Base Class</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: dictionary of consisting (‘train’ and ‘vaild’) file_path\ndataset_obj: Dataset Object (claf.data.dataset.base)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.reader.base.DataReader.convert_to_dataset\">\n<code class=\"sig-name descname\">convert_to_dataset</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">datas</em>, <em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">helpers=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/base.html#DataReader.convert_to_dataset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.base.DataReader.convert_to_dataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Batch to Dataset</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.base.DataReader.filter_texts\">\n<code class=\"sig-name descname\">filter_texts</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dataset</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/base.html#DataReader.filter_texts\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.base.DataReader.filter_texts\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.base.DataReader.read\">\n<code class=\"sig-name descname\">read</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/base.html#DataReader.read\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.base.DataReader.read\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>read with Concrete DataReader each type</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.base.DataReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/base.html#DataReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.base.DataReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.reader.cola\"></span><dl class=\"class\">\n<dt id=\"claf.data.reader.cola.CoLAReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.cola.</code><code class=\"sig-name descname\">CoLAReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/cola.html#CoLAReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.cola.CoLAReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.seq_cls.SeqClsReader\" title=\"claf.data.reader.seq_cls.SeqClsReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.seq_cls.SeqClsReader</span></code></a></p>\n<p>CoLA DataReader</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: define tokenizers config (word)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.cola.CoLAReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = [0, 1]</em><a class=\"headerlink\" href=\"#claf.data.reader.cola.CoLAReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.reader.seq_cls\"></span><dl class=\"class\">\n<dt id=\"claf.data.reader.seq_cls.SeqClsReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.seq_cls.</code><code class=\"sig-name descname\">SeqClsReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">class_key='class'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/seq_cls.html#SeqClsReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.seq_cls.SeqClsReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>DataReader for Sequence Classification</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: define tokenizers config (word)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>class_key: name of the label in .json file to use for classification</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.seq_cls.SeqClsReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = None</em><a class=\"headerlink\" href=\"#claf.data.reader.seq_cls.SeqClsReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.seq_cls.SeqClsReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/seq_cls.html#SeqClsReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.seq_cls.SeqClsReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: sequence</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.reader.squad\"></span><dl class=\"class\">\n<dt id=\"claf.data.reader.squad.SQuADReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.squad.</code><code class=\"sig-name descname\">SQuADReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">lang_code</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">context_max_length=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/squad.html#SQuADReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.squad.SQuADReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>SQuAD DataReader</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: defined tokenizers config (char/word)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.reader.squad.SQuADReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/squad.html#SQuADReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.squad.SQuADReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: question, context</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.data.reader.wikisql\"></span><dl class=\"class\">\n<dt id=\"claf.data.reader.wikisql.WikiSQLReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.wikisql.</code><code class=\"sig-name descname\">WikiSQLReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">context_max_length=None</em>, <em class=\"sig-param\">is_test=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/wikisql.html#WikiSQLReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.wikisql.WikiSQLReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>WikiSQL DataReader\n(<a class=\"reference external\" href=\"http://arxiv.org/abs/1709.00103\">http://arxiv.org/abs/1709.00103</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: defined tokenizers config (char/word)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.reader.wikisql.WikiSQLReader.get_coditions_value_position\">\n<code class=\"sig-name descname\">get_coditions_value_position</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question</em>, <em class=\"sig-param\">values</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/wikisql.html#WikiSQLReader.get_coditions_value_position\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.wikisql.WikiSQLReader.get_coditions_value_position\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.wikisql.WikiSQLReader.load_data\">\n<code class=\"sig-name descname\">load_data</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">sql_path</em>, <em class=\"sig-param\">table_path</em>, <em class=\"sig-param\">data_type=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/wikisql.html#WikiSQLReader.load_data\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.wikisql.WikiSQLReader.load_data\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.wikisql.WikiSQLReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/wikisql.html#WikiSQLReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.wikisql.WikiSQLReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: question, column, db_path, table_id</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.data.reader\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.data.reader\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.data.reader.MultiTaskBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">MultiTaskBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">batch_sizes=[]</em>, <em class=\"sig-param\">readers=[]</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/multi_task.html#MultiTaskBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.MultiTaskBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>DataReader for Multi-Task using BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: define tokenizers config (subword)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>class_key: name of the label in .json file to use for classification</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.MultiTaskBertReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = None</em><a class=\"headerlink\" href=\"#claf.data.reader.MultiTaskBertReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.MultiTaskBertReader.make_data_reader\">\n<code class=\"sig-name descname\">make_data_reader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config_dict</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/multi_task.html#MultiTaskBertReader.make_data_reader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.MultiTaskBertReader.make_data_reader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.MultiTaskBertReader.make_task_by_reader\">\n<code class=\"sig-name descname\">make_task_by_reader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">data_reader</em>, <em class=\"sig-param\">helper</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/multi_task.html#MultiTaskBertReader.make_task_by_reader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.MultiTaskBertReader.make_task_by_reader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.MultiTaskBertReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/multi_task.html#MultiTaskBertReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.MultiTaskBertReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.RegressionBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">RegressionBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">label_key='score'</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/regression.html#RegressionBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.RegressionBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>Regression DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .tsv file paths (train and dev)\ntokenizers: defined tokenizers config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.RegressionBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = None</em><a class=\"headerlink\" href=\"#claf.data.reader.RegressionBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.RegressionBertReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/regression.html#RegressionBertReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.RegressionBertReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: sequence_a and sequence_b</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.STSBBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">STSBBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/glue/stsb.html#STSBBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.STSBBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.regression.RegressionBertReader</span></code></p>\n<p>STS-B (Semantic Textual Similarity Benchmark) DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .tsv file paths (train and dev)\ntokenizers: defined tokenizers config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.STSBBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'pearson_spearman_corr'</em><a class=\"headerlink\" href=\"#claf.data.reader.STSBBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.SeqClsReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">SeqClsReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">class_key='class'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/seq_cls.html#SeqClsReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.SeqClsReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>DataReader for Sequence Classification</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: define tokenizers config (word)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>class_key: name of the label in .json file to use for classification</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.SeqClsReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = None</em><a class=\"headerlink\" href=\"#claf.data.reader.SeqClsReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.SeqClsReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/seq_cls.html#SeqClsReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.SeqClsReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: sequence</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.CoLAReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">CoLAReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/cola.html#CoLAReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.CoLAReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.seq_cls.SeqClsReader\" title=\"claf.data.reader.seq_cls.SeqClsReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.seq_cls.SeqClsReader</span></code></a></p>\n<p>CoLA DataReader</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: define tokenizers config (word)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.CoLAReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = [0, 1]</em><a class=\"headerlink\" href=\"#claf.data.reader.CoLAReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.SeqClsBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">SeqClsBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">class_key='class'</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/seq_cls.html#SeqClsBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.SeqClsBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>DataReader for Sequence (Single and Pair) Classification using BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: define tokenizers config (subword)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>class_key: name of the label in .json file to use for classification</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.SeqClsBertReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = None</em><a class=\"headerlink\" href=\"#claf.data.reader.SeqClsBertReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.SeqClsBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = None</em><a class=\"headerlink\" href=\"#claf.data.reader.SeqClsBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.SeqClsBertReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/seq_cls.html#SeqClsBertReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.SeqClsBertReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: sequence_a and sequence_b</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.CoLABertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">CoLABertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/glue/cola.html#CoLABertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.CoLABertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader\" title=\"claf.data.reader.bert.seq_cls.SeqClsBertReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.seq_cls.SeqClsBertReader</span></code></a></p>\n<p>CoLA DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .tsv file paths (train and dev)\ntokenizers: defined tokenizers config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.CoLABertReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = [0, 1]</em><a class=\"headerlink\" href=\"#claf.data.reader.CoLABertReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.CoLABertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'matthews_corr'</em><a class=\"headerlink\" href=\"#claf.data.reader.CoLABertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.MRPCBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">MRPCBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/glue/mrpc.html#MRPCBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.MRPCBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader\" title=\"claf.data.reader.bert.seq_cls.SeqClsBertReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.seq_cls.SeqClsBertReader</span></code></a></p>\n<p>MRPC DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .tsv file paths (train and dev)\ntokenizers: defined tokenizers config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.MRPCBertReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = [0, 1]</em><a class=\"headerlink\" href=\"#claf.data.reader.MRPCBertReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.MRPCBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'f1'</em><a class=\"headerlink\" href=\"#claf.data.reader.MRPCBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.MNLIBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">MNLIBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/glue/mnli.html#MNLIBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.MNLIBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader\" title=\"claf.data.reader.bert.seq_cls.SeqClsBertReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.seq_cls.SeqClsBertReader</span></code></a></p>\n<p>MNLI DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .tsv file paths (train and dev)\ntokenizers: defined tokenizers config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.MNLIBertReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = ['contradiction', 'entailment', 'neutral']</em><a class=\"headerlink\" href=\"#claf.data.reader.MNLIBertReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.MNLIBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'accuracy'</em><a class=\"headerlink\" href=\"#claf.data.reader.MNLIBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.QNLIBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">QNLIBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/glue/qnli.html#QNLIBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.QNLIBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader\" title=\"claf.data.reader.bert.seq_cls.SeqClsBertReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.seq_cls.SeqClsBertReader</span></code></a></p>\n<p>QNLI DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .tsv file paths (train and dev)\ntokenizers: defined tokenizers config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.QNLIBertReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = ['entailment', 'not_entailment']</em><a class=\"headerlink\" href=\"#claf.data.reader.QNLIBertReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.QNLIBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'accuracy'</em><a class=\"headerlink\" href=\"#claf.data.reader.QNLIBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.QQPBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">QQPBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/glue/qqp.html#QQPBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.QQPBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader\" title=\"claf.data.reader.bert.seq_cls.SeqClsBertReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.seq_cls.SeqClsBertReader</span></code></a></p>\n<p>Quora Question Pairs DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .tsv file paths (train and dev)\ntokenizers: defined tokenizers config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.QQPBertReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = [0, 1]</em><a class=\"headerlink\" href=\"#claf.data.reader.QQPBertReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.QQPBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'f1'</em><a class=\"headerlink\" href=\"#claf.data.reader.QQPBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.RTEBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">RTEBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/glue/rte.html#RTEBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.RTEBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader\" title=\"claf.data.reader.bert.seq_cls.SeqClsBertReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.seq_cls.SeqClsBertReader</span></code></a></p>\n<p>RTE (Recognizing Textual Entailment) DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .tsv file paths (train and dev)\ntokenizers: defined tokenizers config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.RTEBertReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = ['entailment', 'not_entailment']</em><a class=\"headerlink\" href=\"#claf.data.reader.RTEBertReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.RTEBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'accuracy'</em><a class=\"headerlink\" href=\"#claf.data.reader.RTEBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.SSTBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">SSTBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/glue/sst.html#SSTBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.SSTBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader\" title=\"claf.data.reader.bert.seq_cls.SeqClsBertReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.seq_cls.SeqClsBertReader</span></code></a></p>\n<p>SST DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .tsv file paths (train and dev)\ntokenizers: defined tokenizers config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.SSTBertReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = [0, 1]</em><a class=\"headerlink\" href=\"#claf.data.reader.SSTBertReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.SSTBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'accuracy'</em><a class=\"headerlink\" href=\"#claf.data.reader.SSTBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt>\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">STSBBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/glue/stsb.html#STSBBertReader\"><span class=\"viewcode-link\">[source]</span></a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.regression.RegressionBertReader</span></code></p>\n<p>STS-B (Semantic Textual Similarity Benchmark) DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .tsv file paths (train and dev)\ntokenizers: defined tokenizers config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt>\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'pearson_spearman_corr'</em></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.WNLIBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">WNLIBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">input_type='bert'</em>, <em class=\"sig-param\">is_test=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/glue/wnli.html#WNLIBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.WNLIBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader\" title=\"claf.data.reader.bert.seq_cls.SeqClsBertReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.seq_cls.SeqClsBertReader</span></code></a></p>\n<p>WNLI (Winograd NLI) DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .tsv file paths (train and dev)\ntokenizers: defined tokenizers config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.WNLIBertReader.CLASS_DATA\">\n<code class=\"sig-name descname\">CLASS_DATA</code><em class=\"property\"> = [0, 1]</em><a class=\"headerlink\" href=\"#claf.data.reader.WNLIBertReader.CLASS_DATA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.WNLIBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'accuracy'</em><a class=\"headerlink\" href=\"#claf.data.reader.WNLIBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.SQuADReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">SQuADReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">lang_code</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">context_max_length=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/squad.html#SQuADReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.SQuADReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>SQuAD DataReader</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: defined tokenizers config (char/word)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.reader.SQuADReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/squad.html#SQuADReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.SQuADReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: question, context</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.SQuADBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">SQuADBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">lang_code</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">max_seq_length=384</em>, <em class=\"sig-param\">context_stride=128</em>, <em class=\"sig-param\">max_question_length=64</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/squad.html#SQuADBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.SQuADBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>SQuAD DataReader for BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: defined tokenizers config (char/word)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.data.reader.SQuADBertReader.METRIC_KEY\">\n<code class=\"sig-name descname\">METRIC_KEY</code><em class=\"property\"> = 'f1'</em><a class=\"headerlink\" href=\"#claf.data.reader.SQuADBertReader.METRIC_KEY\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.SQuADBertReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/squad.html#SQuADBertReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.SQuADBertReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: question, context</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.TokClsBertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">TokClsBertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">lang_code=None</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">tag_key='tags'</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">ignore_tag_idx=-1</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/tok_cls.html#TokClsBertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.TokClsBertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>DataReader for Token Classification using BERT</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: define tokenizers config (subword)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>lang_code: language code: set as ‘ko’ if using BERT model trained with mecab-tokenized data\ntag_key: name of the label in .json file to use for classification\nignore_tag_idx: prediction results that have this number as ground-truth idx are ignored</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.reader.TokClsBertReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/tok_cls.html#TokClsBertReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.TokClsBertReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: sequence</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.CoNLL2003BertReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">CoNLL2003BertReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">sequence_max_length=None</em>, <em class=\"sig-param\">cls_token='[CLS]'</em>, <em class=\"sig-param\">sep_token='[SEP]'</em>, <em class=\"sig-param\">ignore_tag_idx=-1</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/bert/conll2003.html#CoNLL2003BertReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.CoNLL2003BertReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"claf.data.reader.bert.html#claf.data.reader.bert.tok_cls.TokClsBertReader\" title=\"claf.data.reader.bert.tok_cls.TokClsBertReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.bert.tok_cls.TokClsBertReader</span></code></a></p>\n<blockquote>\n<div><p>CoNLL2003 for BERT</p>\n</div></blockquote>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: file paths (train and dev)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>ignore_tag_idx: prediction results that have this number as ground-truth idx are ignored</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.data.reader.WikiSQLReader\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.data.reader.</code><code class=\"sig-name descname\">WikiSQLReader</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_paths</em>, <em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">context_max_length=None</em>, <em class=\"sig-param\">is_test=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/wikisql.html#WikiSQLReader\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.WikiSQLReader\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.data.reader.base.DataReader\" title=\"claf.data.reader.base.DataReader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.data.reader.base.DataReader</span></code></a></p>\n<p>WikiSQL DataReader\n(<a class=\"reference external\" href=\"http://arxiv.org/abs/1709.00103\">http://arxiv.org/abs/1709.00103</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>file_paths: .json file paths (train and dev)\ntokenizers: defined tokenizers config (char/word)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.data.reader.WikiSQLReader.get_coditions_value_position\">\n<code class=\"sig-name descname\">get_coditions_value_position</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question</em>, <em class=\"sig-param\">values</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/wikisql.html#WikiSQLReader.get_coditions_value_position\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.WikiSQLReader.get_coditions_value_position\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.WikiSQLReader.load_data\">\n<code class=\"sig-name descname\">load_data</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">sql_path</em>, <em class=\"sig-param\">table_path</em>, <em class=\"sig-param\">data_type=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/wikisql.html#WikiSQLReader.load_data\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.WikiSQLReader.load_data\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.data.reader.WikiSQLReader.read_one_example\">\n<code class=\"sig-name descname\">read_one_example</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/data/reader/wikisql.html#WikiSQLReader.read_one_example\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.data.reader.WikiSQLReader.read_one_example\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs keys: question, column, db_path, table_id</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.data.reader.bert.html\" class=\"btn btn-neutral float-right\" title=\"claf.data.reader.bert package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.data.dataset.html\" class=\"btn btn-neutral\" title=\"claf.data.dataset package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.decorator.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.decorator package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf.decorator package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.decorator.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-decorator-package\">\n<h1>claf.decorator package<a class=\"headerlink\" href=\"#claf-decorator-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.decorator.arguments\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.decorator.arguments\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.decorator.arguments.arguments_required\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.decorator.arguments.</code><code class=\"sig-name descname\">arguments_required</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">required_fields</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/decorator/arguments.html#arguments_required\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.decorator.arguments.arguments_required\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Decorator Class\ncheck required arguments for predict function\n(eg. &#64;arguments_required([“db_path”, “table_id”]))</p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.decorator.register\"></span><dl class=\"class\">\n<dt id=\"claf.decorator.register.register\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.decorator.register.</code><code class=\"sig-name descname\">register</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/decorator/register.html#register\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.decorator.register.register\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Decorator Class\nregister subclass with decorator.\n(eg. &#64;register(“model:bidaf”), &#64;register(“reader:squad”) )</p>\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.decorator\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.decorator\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.decorator.arguments_required\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.decorator.</code><code class=\"sig-name descname\">arguments_required</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">required_fields</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/decorator/arguments.html#arguments_required\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.decorator.arguments_required\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Decorator Class\ncheck required arguments for predict function\n(eg. &#64;arguments_required([“db_path”, “table_id”]))</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.decorator.register\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.decorator.</code><code class=\"sig-name descname\">register</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/decorator/register.html#register\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.decorator.register\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Decorator Class\nregister subclass with decorator.\n(eg. &#64;register(“model:bidaf”), &#64;register(“reader:squad”) )</p>\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-package\">\n<h1>claf package<a class=\"headerlink\" href=\"#claf-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"subpackages\">\n<h2>Subpackages<a class=\"headerlink\" href=\"#subpackages\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">claf.config package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.config.html#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.config.factory.html\">claf.config.factory package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.config.factory.html#module-claf.config.factory.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.config.factory.html#module-claf.config.factory\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.config.html#module-claf.config.args\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.config.html#module-claf.config\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">claf.data package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.html#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.data.dataset.html\">claf.data.dataset package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.dataset.html#module-claf.data.dataset.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.dataset.html#module-claf.data.dataset\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.data.reader.html\">claf.data.reader package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.reader.html#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l5\"><a class=\"reference internal\" href=\"claf.data.reader.bert.html\">claf.data.reader.bert package</a><ul>\n<li class=\"toctree-l6\"><a class=\"reference internal\" href=\"claf.data.reader.bert.html#module-claf.data.reader.bert.conll2003\">Submodules</a></li>\n<li class=\"toctree-l6\"><a class=\"reference internal\" href=\"claf.data.reader.bert.html#module-claf.data.reader.bert\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.reader.html#module-claf.data.reader.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.reader.html#module-claf.data.reader\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.html#module-claf.data.collate\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.data.html#module-claf.data\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.decorator.html\">claf.decorator package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.decorator.html#module-claf.decorator.arguments\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.decorator.html#module-claf.decorator\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">claf.learn package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.learn.html#module-claf.learn.experiment\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.learn.html#module-claf.learn\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.machine.html\">claf.machine package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.machine.html#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.machine.components.html\">claf.machine.components package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.machine.components.html#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l5\"><a class=\"reference internal\" href=\"claf.machine.components.retrieval.html\">claf.machine.components.retrieval package</a><ul>\n<li class=\"toctree-l6\"><a class=\"reference internal\" href=\"claf.machine.components.retrieval.html#module-claf.machine.components.retrieval.tfidf\">Submodules</a></li>\n<li class=\"toctree-l6\"><a class=\"reference internal\" href=\"claf.machine.components.retrieval.html#module-claf.machine.components.retrieval\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.machine.components.html#module-claf.machine.components\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.machine.html#module-claf.machine.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.machine.html#module-claf.machine\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">claf.metric package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.metric.html#module-claf.metric.classification\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.metric.html#module-claf.metric\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">claf.model package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.html#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.reading_comprehension.html\">claf.model.reading_comprehension package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.bidaf\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.semantic_parsing.html\">claf.model.semantic_parsing package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing.mixin\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.sequence_classification.html\">claf.model.sequence_classification package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.model.sequence_classification.html#module-claf.model.sequence_classification.mixin\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.model.sequence_classification.html#module-claf.model.sequence_classification\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.token_classification.html\">claf.model.token_classification package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.model.token_classification.html#module-claf.model.token_classification.mixin\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.model.token_classification.html#module-claf.model.token_classification\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">claf.modules package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.html#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.attention.html\">claf.modules.attention package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.modules.attention.html#module-claf.modules.attention.bi_attention\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.modules.attention.html#module-claf.modules.attention\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.conv.html\">claf.modules.conv package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.modules.conv.html#module-claf.modules.conv.depthwise_separable_conv\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.modules.conv.html#module-claf.modules.conv\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.encoder.html\">claf.modules.encoder package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.modules.encoder.html#module-claf.modules.encoder.lstm_cell_with_projection\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.modules.encoder.html#module-claf.modules.encoder\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.layer.html\">claf.modules.layer package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.modules.layer.html#module-claf.modules.layer.highway\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.modules.layer.html#module-claf.modules.layer\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules.activation\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">claf.tokens package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.html#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.embedding.html\">claf.tokens.embedding package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.tokens.embedding.html#module-claf.tokens.embedding\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.indexer.html\">claf.tokens.indexer package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.tokens.indexer.html#module-claf.tokens.indexer\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.token_embedder.html\">claf.tokens.token_embedder package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.tokenizer.html\">claf.tokens.tokenizer package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens.cove\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"module-claf.utils\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.utils\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"function\">\n<dt id=\"claf.utils.flatten\">\n<code class=\"sig-prename descclassname\">claf.utils.</code><code class=\"sig-name descname\">flatten</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">l</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/utils.html#flatten\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.utils.flatten\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.utils.get_user_input\">\n<code class=\"sig-prename descclassname\">claf.utils.</code><code class=\"sig-name descname\">get_user_input</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">category</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/utils.html#get_user_input\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.utils.get_user_input\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.utils.set_logging_config\">\n<code class=\"sig-prename descclassname\">claf.utils.</code><code class=\"sig-name descname\">set_logging_config</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">mode</em>, <em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/utils.html#set_logging_config\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.utils.set_logging_config\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf\" title=\"Permalink to this headline\">¶</a></h2>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.learn.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.learn package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.metric package\" href=\"claf.metric.html\" />\n    <link rel=\"prev\" title=\"claf.data.reader.bert package\" href=\"claf.data.reader.bert.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">learn</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.learn.experiment\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.learn\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf.learn package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.learn.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-learn-package\">\n<h1>claf.learn package<a class=\"headerlink\" href=\"#claf-learn-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.learn.experiment\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.learn.experiment\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.learn.experiment.Experiment\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.learn.experiment.</code><code class=\"sig-name descname\">Experiment</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">mode</em>, <em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/experiment.html#Experiment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.experiment.Experiment\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Experiment settings with config.</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>mode: Mode (ex. TRAIN, EVAL, INFER_EVAL, PREDICT)\nconfig: (NestedNamespace) Argument config according to mode</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.learn.experiment.Experiment.common_setting\">\n<code class=\"sig-name descname\">common_setting</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">mode</em>, <em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/experiment.html#Experiment.common_setting\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.experiment.Experiment.common_setting\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Common Setting - experiment config, use_gpu and cuda_device_ids</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.experiment.Experiment.load_setting\">\n<code class=\"sig-name descname\">load_setting</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/experiment.html#Experiment.load_setting\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.experiment.Experiment.load_setting\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Load Setting - need to load checkpoint case (ex. evaluate and predict)</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.experiment.Experiment.predict\">\n<code class=\"sig-name descname\">predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">raw_features</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/experiment.html#Experiment.predict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.experiment.Experiment.predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.experiment.Experiment.set_eval_inference_latency_mode\">\n<code class=\"sig-name descname\">set_eval_inference_latency_mode</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/experiment.html#Experiment.set_eval_inference_latency_mode\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.experiment.Experiment.set_eval_inference_latency_mode\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Evaluate Inference Latency Mode</p>\n<ul class=\"simple\">\n<li><p>Pipeline\n1. read raw_data (DataReader)\n2. load vocabs from checkpoint (DataReader, Token)\n3. define raw_to_tensor_fn (DataReader, Token)\n4. define and load model\n5. run!</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.experiment.Experiment.set_eval_mode\">\n<code class=\"sig-name descname\">set_eval_mode</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/experiment.html#Experiment.set_eval_mode\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.experiment.Experiment.set_eval_mode\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Evaluate Mode</p>\n<ul class=\"simple\">\n<li><p>Pipeline\n1. read raw_data (DataReader)\n2. load vocabs from checkpoint (DataReader, Token)\n3. indexing tokens (DataReader, Token)\n4. convert to DataSet (DataReader)\n5. create DataLoader (DataLoader)\n6. define and load model\n7. run!</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.experiment.Experiment.set_predict_mode\">\n<code class=\"sig-name descname\">set_predict_mode</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">preload=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/experiment.html#Experiment.set_predict_mode\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.experiment.Experiment.set_predict_mode\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Predict Mode</p>\n<ul class=\"simple\">\n<li><p>Pipeline\n1. read raw_data (Argument)\n2. load vocabs from checkpoint (DataReader, Token)\n3. define raw_to_tensor_fn (DataReader, Token)\n4. define and load model\n5. run!</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.experiment.Experiment.set_train_mode\">\n<code class=\"sig-name descname\">set_train_mode</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/experiment.html#Experiment.set_train_mode\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.experiment.Experiment.set_train_mode\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Training Mode</p>\n<ul class=\"simple\">\n<li><p>Pipeline\n1. read raw_data (DataReader)\n2. build vocabs (DataReader, Token)\n3. indexing tokens (DataReader, Token)\n4. convert to DataSet (DataReader)\n5. create DataLoader (DataLoader)\n6. define model and optimizer\n7. run!</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.experiment.Experiment.set_trainer\">\n<code class=\"sig-name descname\">set_trainer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em>, <em class=\"sig-param\">op_dict={}</em>, <em class=\"sig-param\">save_params={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/experiment.html#Experiment.set_trainer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.experiment.Experiment.set_trainer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.learn.mode\"></span><dl class=\"class\">\n<dt id=\"claf.learn.mode.Mode\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.learn.mode.</code><code class=\"sig-name descname\">Mode</code><a class=\"reference internal\" href=\"_modules/claf/learn/mode.html#Mode\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.mode.Mode\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Experiment Flag class</p>\n<dl class=\"attribute\">\n<dt id=\"claf.learn.mode.Mode.EVAL\">\n<code class=\"sig-name descname\">EVAL</code><em class=\"property\"> = 'eval'</em><a class=\"headerlink\" href=\"#claf.learn.mode.Mode.EVAL\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.learn.mode.Mode.INFER_EVAL\">\n<code class=\"sig-name descname\">INFER_EVAL</code><em class=\"property\"> = 'infer_eval'</em><a class=\"headerlink\" href=\"#claf.learn.mode.Mode.INFER_EVAL\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.learn.mode.Mode.MACHINE\">\n<code class=\"sig-name descname\">MACHINE</code><em class=\"property\"> = 'machine'</em><a class=\"headerlink\" href=\"#claf.learn.mode.Mode.MACHINE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.learn.mode.Mode.PREDICT\">\n<code class=\"sig-name descname\">PREDICT</code><em class=\"property\"> = 'predict'</em><a class=\"headerlink\" href=\"#claf.learn.mode.Mode.PREDICT\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.learn.mode.Mode.TRAIN\">\n<code class=\"sig-name descname\">TRAIN</code><em class=\"property\"> = 'train'</em><a class=\"headerlink\" href=\"#claf.learn.mode.Mode.TRAIN\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.learn.tensorboard\"></span><dl class=\"class\">\n<dt id=\"claf.learn.tensorboard.TensorBoard\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.learn.tensorboard.</code><code class=\"sig-name descname\">TensorBoard</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">log_dir</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/tensorboard.html#TensorBoard\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.tensorboard.TensorBoard\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>TensorBoard Wrapper for Pytorch</p>\n<dl class=\"method\">\n<dt id=\"claf.learn.tensorboard.TensorBoard.embedding_summary\">\n<code class=\"sig-name descname\">embedding_summary</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">metadata=None</em>, <em class=\"sig-param\">label_img=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/tensorboard.html#TensorBoard.embedding_summary\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.tensorboard.TensorBoard.embedding_summary\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.tensorboard.TensorBoard.graph_summary\">\n<code class=\"sig-name descname\">graph_summary</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em>, <em class=\"sig-param\">input_to_model=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/tensorboard.html#TensorBoard.graph_summary\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.tensorboard.TensorBoard.graph_summary\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.tensorboard.TensorBoard.histogram_summary\">\n<code class=\"sig-name descname\">histogram_summary</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tag</em>, <em class=\"sig-param\">values</em>, <em class=\"sig-param\">step</em>, <em class=\"sig-param\">bins=1000</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/tensorboard.html#TensorBoard.histogram_summary\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.tensorboard.TensorBoard.histogram_summary\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Log a histogram of the tensor of values.</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.tensorboard.TensorBoard.image_summary\">\n<code class=\"sig-name descname\">image_summary</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tag</em>, <em class=\"sig-param\">images</em>, <em class=\"sig-param\">step</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/tensorboard.html#TensorBoard.image_summary\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.tensorboard.TensorBoard.image_summary\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Log a list of images.</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.tensorboard.TensorBoard.scalar_summaries\">\n<code class=\"sig-name descname\">scalar_summaries</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">step</em>, <em class=\"sig-param\">summary</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/tensorboard.html#TensorBoard.scalar_summaries\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.tensorboard.TensorBoard.scalar_summaries\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.tensorboard.TensorBoard.scalar_summary\">\n<code class=\"sig-name descname\">scalar_summary</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">step</em>, <em class=\"sig-param\">tag</em>, <em class=\"sig-param\">value</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/tensorboard.html#TensorBoard.scalar_summary\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.tensorboard.TensorBoard.scalar_summary\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Log a scalar variable.</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.learn.trainer\"></span><dl class=\"class\">\n<dt id=\"claf.learn.trainer.Trainer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.learn.trainer.</code><code class=\"sig-name descname\">Trainer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em>, <em class=\"sig-param\">config={}</em>, <em class=\"sig-param\">log_dir='logs/experiment'</em>, <em class=\"sig-param\">grad_max_norm=None</em>, <em class=\"sig-param\">gradient_accumulation_steps=1</em>, <em class=\"sig-param\">learning_rate_scheduler=None</em>, <em class=\"sig-param\">exponential_moving_average=None</em>, <em class=\"sig-param\">num_epochs=20</em>, <em class=\"sig-param\">early_stopping_threshold=10</em>, <em class=\"sig-param\">max_eval_examples=5</em>, <em class=\"sig-param\">metric_key=None</em>, <em class=\"sig-param\">verbose_step_count=100</em>, <em class=\"sig-param\">eval_and_save_step_count='epoch'</em>, <em class=\"sig-param\">save_checkpoint=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/trainer.html#Trainer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.trainer.Trainer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Run experiment</p>\n<ul class=\"simple\">\n<li><p>train</p></li>\n<li><p>train_and_evaluate</p></li>\n<li><p>evaluate</p></li>\n<li><p>evaluate_inference_latency</p></li>\n<li><p>predict</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: experiment overall config\nmodel: Model based on torch.nn.Module</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>log_dir: path to directory for save model and other options\ngrad_max_norm: Clips gradient norm of an iterable of parameters.\nlearning_rate_scheduler: PyTorch’s Learning Rate Scheduler.</p>\n<blockquote>\n<div><p>(<a class=\"reference external\" href=\"https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html\">https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html</a>)</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>exponential_moving_average: the moving averages of all weights of the model are maintained</dt><dd><p>with the exponential decay rate of {ema}.</p>\n</dd>\n</dl>\n<p>num_epochs: the number of maximun epochs (Default is 20)\nearly_stopping_threshold: the number of early stopping threshold (Default is 10)\nmax_eval_examples: print evaluation examples\nmetric_key: metric score’s control point\nverbose_step_count: print verbose step count (Default is 100)\neval_and_save_step_count: evaluate valid_dataset then save every n step_count (Default is ‘epoch’)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.learn.trainer.Trainer.evaluate\">\n<code class=\"sig-name descname\">evaluate</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_loader</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/trainer.html#Trainer.evaluate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.trainer.Trainer.evaluate\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Evaluate</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.trainer.Trainer.evaluate_inference_latency\">\n<code class=\"sig-name descname\">evaluate_inference_latency</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">raw_examples</em>, <em class=\"sig-param\">raw_to_tensor_fn</em>, <em class=\"sig-param\">token_key=None</em>, <em class=\"sig-param\">max_latency=1000</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/trainer.html#Trainer.evaluate_inference_latency\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.trainer.Trainer.evaluate_inference_latency\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Evaluate with focusing inferece latency\n(Note: must use sorted synthetic data)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>inference_latency: raw_data -&gt; pre-processing -&gt; model -&gt; predict_value</dt><dd><p>(elapsed_time)               (elapsed_time)</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.trainer.Trainer.predict\">\n<code class=\"sig-name descname\">predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">raw_feature</em>, <em class=\"sig-param\">raw_to_tensor_fn</em>, <em class=\"sig-param\">arguments</em>, <em class=\"sig-param\">interactive=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/trainer.html#Trainer.predict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.trainer.Trainer.predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Inference / Predict</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.trainer.Trainer.save\">\n<code class=\"sig-name descname\">save</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">optimizer</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/trainer.html#Trainer.save\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.trainer.Trainer.save\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.trainer.Trainer.set_model_base_properties\">\n<code class=\"sig-name descname\">set_model_base_properties</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em>, <em class=\"sig-param\">log_dir</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/trainer.html#Trainer.set_model_base_properties\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.trainer.Trainer.set_model_base_properties\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.trainer.Trainer.train\">\n<code class=\"sig-name descname\">train</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_loader</em>, <em class=\"sig-param\">optimizer</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/trainer.html#Trainer.train\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.trainer.Trainer.train\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Train</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.trainer.Trainer.train_and_evaluate\">\n<code class=\"sig-name descname\">train_and_evaluate</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">train_loader</em>, <em class=\"sig-param\">valid_loader</em>, <em class=\"sig-param\">optimizer</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/trainer.html#Trainer.train_and_evaluate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.trainer.Trainer.train_and_evaluate\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Train and Evaluate</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.learn.utils\"></span><dl class=\"class\">\n<dt id=\"claf.learn.utils.TrainCounter\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.learn.utils.</code><code class=\"sig-name descname\">TrainCounter</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">display_unit='epoch'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/utils.html#TrainCounter\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.utils.TrainCounter\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<dl class=\"attribute\">\n<dt id=\"claf.learn.utils.TrainCounter.epoch\">\n<code class=\"sig-name descname\">epoch</code><em class=\"property\"> = 0</em><a class=\"headerlink\" href=\"#claf.learn.utils.TrainCounter.epoch\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.learn.utils.TrainCounter.get_display\">\n<code class=\"sig-name descname\">get_display</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/utils.html#TrainCounter.get_display\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.utils.TrainCounter.get_display\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.learn.utils.TrainCounter.global_step\">\n<code class=\"sig-name descname\">global_step</code><em class=\"property\"> = 0</em><a class=\"headerlink\" href=\"#claf.learn.utils.TrainCounter.global_step\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.learn.utils.bind_nsml\">\n<code class=\"sig-prename descclassname\">claf.learn.utils.</code><code class=\"sig-name descname\">bind_nsml</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em>, <em class=\"sig-param\">**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/utils.html#bind_nsml\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.utils.bind_nsml\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.learn.utils.get_session_name\">\n<code class=\"sig-prename descclassname\">claf.learn.utils.</code><code class=\"sig-name descname\">get_session_name</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/utils.html#get_session_name\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.utils.get_session_name\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.learn.utils.get_sorted_path\">\n<code class=\"sig-prename descclassname\">claf.learn.utils.</code><code class=\"sig-name descname\">get_sorted_path</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">checkpoint_dir</em>, <em class=\"sig-param\">both_exist=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/utils.html#get_sorted_path\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.utils.get_sorted_path\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.learn.utils.load_model_checkpoint\">\n<code class=\"sig-prename descclassname\">claf.learn.utils.</code><code class=\"sig-name descname\">load_model_checkpoint</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em>, <em class=\"sig-param\">checkpoint</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/utils.html#load_model_checkpoint\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.utils.load_model_checkpoint\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.learn.utils.load_optimizer_checkpoint\">\n<code class=\"sig-prename descclassname\">claf.learn.utils.</code><code class=\"sig-name descname\">load_optimizer_checkpoint</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">optimizer</em>, <em class=\"sig-param\">checkpoint</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/utils.html#load_optimizer_checkpoint\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.utils.load_optimizer_checkpoint\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.learn.utils.load_vocabs\">\n<code class=\"sig-prename descclassname\">claf.learn.utils.</code><code class=\"sig-name descname\">load_vocabs</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_checkpoint</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/utils.html#load_vocabs\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.utils.load_vocabs\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"data\">\n<dt id=\"claf.learn.utils.logger\">\n<code class=\"sig-prename descclassname\">claf.learn.utils.</code><code class=\"sig-name descname\">logger</code><em class=\"property\"> = &lt;Logger claf.learn.utils (WARNING)&gt;</em><a class=\"headerlink\" href=\"#claf.learn.utils.logger\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Train Counter</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.learn.utils.save_checkpoint\">\n<code class=\"sig-prename descclassname\">claf.learn.utils.</code><code class=\"sig-name descname\">save_checkpoint</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">path</em>, <em class=\"sig-param\">model</em>, <em class=\"sig-param\">optimizer</em>, <em class=\"sig-param\">max_to_keep=10</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/utils.html#save_checkpoint\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.utils.save_checkpoint\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.learn.utils.send_message_to_slack\">\n<code class=\"sig-prename descclassname\">claf.learn.utils.</code><code class=\"sig-name descname\">send_message_to_slack</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">webhook_url</em>, <em class=\"sig-param\">title=None</em>, <em class=\"sig-param\">message=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/learn/utils.html#send_message_to_slack\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.learn.utils.send_message_to_slack\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.learn\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.learn\" title=\"Permalink to this headline\">¶</a></h2>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.metric.html\" class=\"btn btn-neutral float-right\" title=\"claf.metric package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.data.reader.bert.html\" class=\"btn btn-neutral\" title=\"claf.data.reader.bert package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.machine.components.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.machine.components package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf.machine.components package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.machine.components.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-machine-components-package\">\n<h1>claf.machine.components package<a class=\"headerlink\" href=\"#claf-machine-components-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"subpackages\">\n<h2>Subpackages<a class=\"headerlink\" href=\"#subpackages\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.machine.components.retrieval.html\">claf.machine.components.retrieval package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.machine.components.retrieval.html#module-claf.machine.components.retrieval.tfidf\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.machine.components.retrieval.html#module-claf.machine.components.retrieval\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"module-claf.machine.components\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.machine.components\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.machine.components.TFIDF\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.machine.components.</code><code class=\"sig-name descname\">TFIDF</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">texts</em>, <em class=\"sig-param\">word_tokenizer</em>, <em class=\"sig-param\">k=1</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.TFIDF\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>TF-IDF document retrieval model</p>\n<ul class=\"simple\">\n<li><p>Term Frequency</p></li>\n<li><p>Inverse Document Frequency</p></li>\n<li><p>log(tf + 1) * log((N - Nt + 0.5) / (Nt + 0.5))</p></li>\n</ul>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>k: the number of top k results</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.machine.components.TFIDF.INDEX_FNAME\">\n<code class=\"sig-name descname\">INDEX_FNAME</code><em class=\"property\"> = 'similarities.index'</em><a class=\"headerlink\" href=\"#claf.machine.components.TFIDF.INDEX_FNAME\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.machine.components.TFIDF.TFIDF_FNAME\">\n<code class=\"sig-name descname\">TFIDF_FNAME</code><em class=\"property\"> = 'tfidf.model'</em><a class=\"headerlink\" href=\"#claf.machine.components.TFIDF.TFIDF_FNAME\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.machine.components.TFIDF.VOCAB_FNAME\">\n<code class=\"sig-name descname\">VOCAB_FNAME</code><em class=\"property\"> = 'vocab.txt'</em><a class=\"headerlink\" href=\"#claf.machine.components.TFIDF.VOCAB_FNAME\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.TFIDF.get_closest\">\n<code class=\"sig-name descname\">get_closest</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">query</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.get_closest\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.TFIDF.get_closest\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.TFIDF.init\">\n<code class=\"sig-name descname\">init</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.init\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.TFIDF.init\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.TFIDF.init_model\">\n<code class=\"sig-name descname\">init_model</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.init_model\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.TFIDF.init_model\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.TFIDF.load\">\n<code class=\"sig-name descname\">load</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dir_path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.load\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.TFIDF.load\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.TFIDF.parse\">\n<code class=\"sig-name descname\">parse</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">query</em>, <em class=\"sig-param\">ngram=1</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.parse\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.TFIDF.parse\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.TFIDF.save\">\n<code class=\"sig-name descname\">save</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dir_path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.save\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.TFIDF.save\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.TFIDF.text_to_tfidf\">\n<code class=\"sig-name descname\">text_to_tfidf</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">query</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.text_to_tfidf\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.TFIDF.text_to_tfidf\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Create a tfidf-weighted word vector from query.</p>\n<p>tfidf = log(tf + 1) * log((N - Nt + 0.5) / (Nt + 0.5))</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.machine.components.retrieval.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.machine.components.retrieval package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf.machine.components.retrieval package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.machine.components.retrieval.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-machine-components-retrieval-package\">\n<h1>claf.machine.components.retrieval package<a class=\"headerlink\" href=\"#claf-machine-components-retrieval-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.machine.components.retrieval.tfidf\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.machine.components.retrieval.tfidf\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.machine.components.retrieval.tfidf.TFIDF\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.machine.components.retrieval.tfidf.</code><code class=\"sig-name descname\">TFIDF</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">texts</em>, <em class=\"sig-param\">word_tokenizer</em>, <em class=\"sig-param\">k=1</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.retrieval.tfidf.TFIDF\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>TF-IDF document retrieval model</p>\n<ul class=\"simple\">\n<li><p>Term Frequency</p></li>\n<li><p>Inverse Document Frequency</p></li>\n<li><p>log(tf + 1) * log((N - Nt + 0.5) / (Nt + 0.5))</p></li>\n</ul>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>k: the number of top k results</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.machine.components.retrieval.tfidf.TFIDF.INDEX_FNAME\">\n<code class=\"sig-name descname\">INDEX_FNAME</code><em class=\"property\"> = 'similarities.index'</em><a class=\"headerlink\" href=\"#claf.machine.components.retrieval.tfidf.TFIDF.INDEX_FNAME\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.machine.components.retrieval.tfidf.TFIDF.TFIDF_FNAME\">\n<code class=\"sig-name descname\">TFIDF_FNAME</code><em class=\"property\"> = 'tfidf.model'</em><a class=\"headerlink\" href=\"#claf.machine.components.retrieval.tfidf.TFIDF.TFIDF_FNAME\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.machine.components.retrieval.tfidf.TFIDF.VOCAB_FNAME\">\n<code class=\"sig-name descname\">VOCAB_FNAME</code><em class=\"property\"> = 'vocab.txt'</em><a class=\"headerlink\" href=\"#claf.machine.components.retrieval.tfidf.TFIDF.VOCAB_FNAME\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.retrieval.tfidf.TFIDF.get_closest\">\n<code class=\"sig-name descname\">get_closest</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">query</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.get_closest\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.retrieval.tfidf.TFIDF.get_closest\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.retrieval.tfidf.TFIDF.init\">\n<code class=\"sig-name descname\">init</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.init\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.retrieval.tfidf.TFIDF.init\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.retrieval.tfidf.TFIDF.init_model\">\n<code class=\"sig-name descname\">init_model</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.init_model\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.retrieval.tfidf.TFIDF.init_model\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.retrieval.tfidf.TFIDF.load\">\n<code class=\"sig-name descname\">load</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dir_path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.load\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.retrieval.tfidf.TFIDF.load\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.retrieval.tfidf.TFIDF.parse\">\n<code class=\"sig-name descname\">parse</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">query</em>, <em class=\"sig-param\">ngram=1</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.parse\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.retrieval.tfidf.TFIDF.parse\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.retrieval.tfidf.TFIDF.save\">\n<code class=\"sig-name descname\">save</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dir_path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.save\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.retrieval.tfidf.TFIDF.save\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.components.retrieval.tfidf.TFIDF.text_to_tfidf\">\n<code class=\"sig-name descname\">text_to_tfidf</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">query</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/components/retrieval/tfidf.html#TFIDF.text_to_tfidf\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.components.retrieval.tfidf.TFIDF.text_to_tfidf\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Create a tfidf-weighted word vector from query.</p>\n<p>tfidf = log(tf + 1) * log((N - Nt + 0.5) / (Nt + 0.5))</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.machine.components.retrieval\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.machine.components.retrieval\" title=\"Permalink to this headline\">¶</a></h2>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.machine.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.machine package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf.machine package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.machine.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-machine-package\">\n<h1>claf.machine package<a class=\"headerlink\" href=\"#claf-machine-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"subpackages\">\n<h2>Subpackages<a class=\"headerlink\" href=\"#subpackages\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.machine.components.html\">claf.machine.components package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.machine.components.html#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.machine.components.retrieval.html\">claf.machine.components.retrieval package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.machine.components.retrieval.html#module-claf.machine.components.retrieval.tfidf\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.machine.components.retrieval.html#module-claf.machine.components.retrieval\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.machine.components.html#module-claf.machine.components\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"module-claf.machine.base\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.machine.base\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.machine.base.Machine\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.machine.base.</code><code class=\"sig-name descname\">Machine</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/base.html#Machine\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.base.Machine\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Machine: Combine modules then make a NLP Machine</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: machine_config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.machine.base.Machine.load\">\n<code class=\"sig-name descname\">load</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/base.html#Machine.load\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.base.Machine.load\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.base.Machine.load_from_config\">\n<em class=\"property\">classmethod </em><code class=\"sig-name descname\">load_from_config</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config_path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/base.html#Machine.load_from_config\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.base.Machine.load_from_config\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.base.Machine.make_module\">\n<code class=\"sig-name descname\">make_module</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/base.html#Machine.make_module\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.base.Machine.make_module\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Make component or experiment for claf Machine’s module</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><ul>\n<li><p>config: module’s config (claf.config.namespace.NestedNamespace)</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.machine.module\"></span><dl class=\"class\">\n<dt id=\"claf.machine.module.Module\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.machine.module.</code><code class=\"sig-name descname\">Module</code><a class=\"reference internal\" href=\"_modules/claf/machine/module.html#Module\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.module.Module\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Machine Flag class</p>\n<dl class=\"attribute\">\n<dt id=\"claf.machine.module.Module.COMPONENT\">\n<code class=\"sig-name descname\">COMPONENT</code><em class=\"property\"> = 'component'</em><a class=\"headerlink\" href=\"#claf.machine.module.Module.COMPONENT\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.machine.module.Module.EXPERIMENT\">\n<code class=\"sig-name descname\">EXPERIMENT</code><em class=\"property\"> = 'experiment'</em><a class=\"headerlink\" href=\"#claf.machine.module.Module.EXPERIMENT\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.machine.module.Module.KNOWLEDGE_BASE\">\n<code class=\"sig-name descname\">KNOWLEDGE_BASE</code><em class=\"property\"> = 'knowledge_base'</em><a class=\"headerlink\" href=\"#claf.machine.module.Module.KNOWLEDGE_BASE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.machine.nlu\"></span><dl class=\"class\">\n<dt id=\"claf.machine.nlu.NLU\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.machine.nlu.</code><code class=\"sig-name descname\">NLU</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/nlu.html#NLU\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.nlu.NLU\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.machine.base.Machine\" title=\"claf.machine.base.Machine\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.machine.base.Machine</span></code></a></p>\n<p>Natural Language Understanding Machine</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: machine_config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.machine.nlu.NLU.intent_classification\">\n<code class=\"sig-name descname\">intent_classification</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">utterance</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/nlu.html#NLU.intent_classification\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.nlu.NLU.intent_classification\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.nlu.NLU.load\">\n<code class=\"sig-name descname\">load</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/nlu.html#NLU.load\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.nlu.NLU.load\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.nlu.NLU.slot_filling\">\n<code class=\"sig-name descname\">slot_filling</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">utterance</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/nlu.html#NLU.slot_filling\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.nlu.NLU.slot_filling\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.machine.open_qa\"></span><dl class=\"class\">\n<dt id=\"claf.machine.open_qa.OpenQA\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.machine.open_qa.</code><code class=\"sig-name descname\">OpenQA</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/open_qa.html#OpenQA\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.open_qa.OpenQA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.machine.base.Machine\" title=\"claf.machine.base.Machine\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.machine.base.Machine</span></code></a></p>\n<p>Open-Domain Question Answer Machine (DrQA)</p>\n<p>DrQA is a system for reading comprehension applied to open-domain question answering.</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: machine_config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.machine.open_qa.OpenQA.load\">\n<code class=\"sig-name descname\">load</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/open_qa.html#OpenQA.load\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.open_qa.OpenQA.load\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.open_qa.OpenQA.machine_reading\">\n<code class=\"sig-name descname\">machine_reading</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">question</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/open_qa.html#OpenQA.machine_reading\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.open_qa.OpenQA.machine_reading\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.open_qa.OpenQA.search_documents\">\n<code class=\"sig-name descname\">search_documents</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/open_qa.html#OpenQA.search_documents\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.open_qa.OpenQA.search_documents\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.machine\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.machine\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.machine.OpenQA\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.machine.</code><code class=\"sig-name descname\">OpenQA</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/open_qa.html#OpenQA\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.OpenQA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.machine.base.Machine\" title=\"claf.machine.base.Machine\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.machine.base.Machine</span></code></a></p>\n<p>Open-Domain Question Answer Machine (DrQA)</p>\n<p>DrQA is a system for reading comprehension applied to open-domain question answering.</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: machine_config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.machine.OpenQA.load\">\n<code class=\"sig-name descname\">load</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/open_qa.html#OpenQA.load\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.OpenQA.load\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.OpenQA.machine_reading\">\n<code class=\"sig-name descname\">machine_reading</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">question</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/open_qa.html#OpenQA.machine_reading\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.OpenQA.machine_reading\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.OpenQA.search_documents\">\n<code class=\"sig-name descname\">search_documents</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/open_qa.html#OpenQA.search_documents\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.OpenQA.search_documents\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.machine.NLU\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.machine.</code><code class=\"sig-name descname\">NLU</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/nlu.html#NLU\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.NLU\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.machine.base.Machine\" title=\"claf.machine.base.Machine\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.machine.base.Machine</span></code></a></p>\n<p>Natural Language Understanding Machine</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>config: machine_config</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.machine.NLU.intent_classification\">\n<code class=\"sig-name descname\">intent_classification</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">utterance</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/nlu.html#NLU.intent_classification\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.NLU.intent_classification\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.NLU.load\">\n<code class=\"sig-name descname\">load</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/nlu.html#NLU.load\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.NLU.load\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.machine.NLU.slot_filling\">\n<code class=\"sig-name descname\">slot_filling</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">utterance</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/machine/nlu.html#NLU.slot_filling\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.machine.NLU.slot_filling\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.metric.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.metric package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.model package\" href=\"claf.model.html\" />\n    <link rel=\"prev\" title=\"claf.learn package\" href=\"claf.learn.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">metric</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.metric.classification\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.metric\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf.metric package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.metric.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-metric-package\">\n<h1>claf.metric package<a class=\"headerlink\" href=\"#claf-metric-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.metric.classification\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.metric.classification\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"function\">\n<dt id=\"claf.metric.classification.f1\">\n<code class=\"sig-prename descclassname\">claf.metric.classification.</code><code class=\"sig-name descname\">f1</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">pycm_obj</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/classification.html#f1\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.classification.f1\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.classification.macro_f1\">\n<code class=\"sig-prename descclassname\">claf.metric.classification.</code><code class=\"sig-name descname\">macro_f1</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">pycm_obj</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/classification.html#macro_f1\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.classification.macro_f1\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.classification.macro_precision\">\n<code class=\"sig-prename descclassname\">claf.metric.classification.</code><code class=\"sig-name descname\">macro_precision</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">pycm_obj</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/classification.html#macro_precision\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.classification.macro_precision\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.classification.macro_recall\">\n<code class=\"sig-prename descclassname\">claf.metric.classification.</code><code class=\"sig-name descname\">macro_recall</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">pycm_obj</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/classification.html#macro_recall\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.classification.macro_recall\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.classification.precision\">\n<code class=\"sig-prename descclassname\">claf.metric.classification.</code><code class=\"sig-name descname\">precision</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">pycm_obj</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/classification.html#precision\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.classification.precision\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.classification.recall\">\n<code class=\"sig-prename descclassname\">claf.metric.classification.</code><code class=\"sig-name descname\">recall</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">pycm_obj</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/classification.html#recall\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.classification.recall\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<span class=\"target\" id=\"module-claf.metric.squad_v1_official\"></span><p>Official evaluation script for v1.1 of the SQuAD dataset.</p>\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v1_official.evaluate\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v1_official.</code><code class=\"sig-name descname\">evaluate</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dataset</em>, <em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v1_official.html#evaluate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v1_official.evaluate\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v1_official.exact_match_score\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v1_official.</code><code class=\"sig-name descname\">exact_match_score</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">prediction</em>, <em class=\"sig-param\">ground_truth</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v1_official.html#exact_match_score\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v1_official.exact_match_score\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v1_official.f1_score\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v1_official.</code><code class=\"sig-name descname\">f1_score</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">prediction</em>, <em class=\"sig-param\">ground_truth</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v1_official.html#f1_score\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v1_official.f1_score\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v1_official.metric_max_over_ground_truths\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v1_official.</code><code class=\"sig-name descname\">metric_max_over_ground_truths</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">metric_fn</em>, <em class=\"sig-param\">prediction</em>, <em class=\"sig-param\">ground_truths</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v1_official.html#metric_max_over_ground_truths\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v1_official.metric_max_over_ground_truths\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v1_official.normalize_answer\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v1_official.</code><code class=\"sig-name descname\">normalize_answer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">s</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v1_official.html#normalize_answer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v1_official.normalize_answer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Lower text and remove punctuation, articles and extra whitespace.</p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.metric.squad_v2_official\"></span><p>Official evaluation script for SQuAD version 2.0.</p>\n<p>In addition to basic functionality, we also compute additional statistics and\nplot precision-recall curves if an additional na_prob.json file is provided.\nThis file is expected to map question ID’s to the model’s predicted probability\nthat a question is unanswerable.</p>\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.apply_no_ans_threshold\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">apply_no_ans_threshold</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">scores</em>, <em class=\"sig-param\">na_probs</em>, <em class=\"sig-param\">qid_to_has_ans</em>, <em class=\"sig-param\">na_prob_thresh</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#apply_no_ans_threshold\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.apply_no_ans_threshold\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.compute_exact\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">compute_exact</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">a_gold</em>, <em class=\"sig-param\">a_pred</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#compute_exact\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.compute_exact\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.compute_f1\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">compute_f1</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">a_gold</em>, <em class=\"sig-param\">a_pred</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#compute_f1\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.compute_f1\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.evaluate\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">evaluate</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dataset</em>, <em class=\"sig-param\">na_probs</em>, <em class=\"sig-param\">preds</em>, <em class=\"sig-param\">na_prob_thresh=1.0</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#evaluate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.evaluate\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.find_all_best_thresh\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">find_all_best_thresh</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">main_eval</em>, <em class=\"sig-param\">preds</em>, <em class=\"sig-param\">exact_raw</em>, <em class=\"sig-param\">f1_raw</em>, <em class=\"sig-param\">na_probs</em>, <em class=\"sig-param\">qid_to_has_ans</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#find_all_best_thresh\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.find_all_best_thresh\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.find_best_thresh\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">find_best_thresh</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">preds</em>, <em class=\"sig-param\">scores</em>, <em class=\"sig-param\">na_probs</em>, <em class=\"sig-param\">qid_to_has_ans</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#find_best_thresh\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.find_best_thresh\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.get_raw_scores\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">get_raw_scores</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dataset</em>, <em class=\"sig-param\">preds</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#get_raw_scores\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.get_raw_scores\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.get_tokens\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">get_tokens</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">s</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#get_tokens\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.get_tokens\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.histogram_na_prob\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">histogram_na_prob</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">na_probs</em>, <em class=\"sig-param\">qid_list</em>, <em class=\"sig-param\">image_dir</em>, <em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#histogram_na_prob\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.histogram_na_prob\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.main\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">main</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#main\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.main\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.make_eval_dict\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">make_eval_dict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">exact_scores</em>, <em class=\"sig-param\">f1_scores</em>, <em class=\"sig-param\">qid_list=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#make_eval_dict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.make_eval_dict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.make_precision_recall_eval\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">make_precision_recall_eval</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">scores</em>, <em class=\"sig-param\">na_probs</em>, <em class=\"sig-param\">num_true_pos</em>, <em class=\"sig-param\">qid_to_has_ans</em>, <em class=\"sig-param\">out_image=None</em>, <em class=\"sig-param\">title=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#make_precision_recall_eval\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.make_precision_recall_eval\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.make_qid_to_has_ans\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">make_qid_to_has_ans</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dataset</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#make_qid_to_has_ans\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.make_qid_to_has_ans\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.merge_eval\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">merge_eval</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">main_eval</em>, <em class=\"sig-param\">new_eval</em>, <em class=\"sig-param\">prefix</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#merge_eval\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.merge_eval\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.normalize_answer\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">normalize_answer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">s</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#normalize_answer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.normalize_answer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Lower text and remove punctuation, articles and extra whitespace.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.parse_args\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">parse_args</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#parse_args\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.parse_args\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.plot_pr_curve\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">plot_pr_curve</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">precisions</em>, <em class=\"sig-param\">recalls</em>, <em class=\"sig-param\">out_image</em>, <em class=\"sig-param\">title</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#plot_pr_curve\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.plot_pr_curve\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.squad_v2_official.run_precision_recall_analysis\">\n<code class=\"sig-prename descclassname\">claf.metric.squad_v2_official.</code><code class=\"sig-name descname\">run_precision_recall_analysis</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">main_eval</em>, <em class=\"sig-param\">exact_raw</em>, <em class=\"sig-param\">f1_raw</em>, <em class=\"sig-param\">na_probs</em>, <em class=\"sig-param\">qid_to_has_ans</em>, <em class=\"sig-param\">out_image_dir</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/squad_v2_official.html#run_precision_recall_analysis\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.squad_v2_official.run_precision_recall_analysis\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<span class=\"target\" id=\"module-claf.metric.wikisql_official\"></span><p>Official evaluation script for WikiSQL dataset.</p>\n<dl class=\"function\">\n<dt id=\"claf.metric.wikisql_official.count_lines\">\n<code class=\"sig-prename descclassname\">claf.metric.wikisql_official.</code><code class=\"sig-name descname\">count_lines</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">fname</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/wikisql_official.html#count_lines\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.wikisql_official.count_lines\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.metric.wikisql_official.evaluate\">\n<code class=\"sig-prename descclassname\">claf.metric.wikisql_official.</code><code class=\"sig-name descname\">evaluate</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">labels</em>, <em class=\"sig-param\">predictions</em>, <em class=\"sig-param\">db_path</em>, <em class=\"sig-param\">ordered=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/metric/wikisql_official.html#evaluate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.metric.wikisql_official.evaluate\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>labels and predictions: dictionary {data_uid: sql_data, …}</p>\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.metric\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.metric\" title=\"Permalink to this headline\">¶</a></h2>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.model.html\" class=\"btn btn-neutral float-right\" title=\"claf.model package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.learn.html\" class=\"btn btn-neutral\" title=\"claf.learn package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.model.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.model.reading_comprehension package\" href=\"claf.model.reading_comprehension.html\" />\n    <link rel=\"prev\" title=\"claf.metric package\" href=\"claf.metric.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">model</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.reading_comprehension.html\">claf.model.reading_comprehension package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.semantic_parsing.html\">claf.model.semantic_parsing package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.sequence_classification.html\">claf.model.sequence_classification package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.token_classification.html\">claf.model.token_classification package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.model.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.model\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf.model package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.model.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-model-package\">\n<h1>claf.model package<a class=\"headerlink\" href=\"#claf-model-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"subpackages\">\n<h2>Subpackages<a class=\"headerlink\" href=\"#subpackages\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.reading_comprehension.html\">claf.model.reading_comprehension package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.bidaf\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.semantic_parsing.html\">claf.model.semantic_parsing package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing.mixin\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.sequence_classification.html\">claf.model.sequence_classification package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.sequence_classification.html#module-claf.model.sequence_classification.mixin\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.sequence_classification.html#module-claf.model.sequence_classification\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.token_classification.html\">claf.model.token_classification package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.token_classification.html#module-claf.model.token_classification.mixin\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.token_classification.html#module-claf.model.token_classification\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"module-claf.model.base\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.model.base\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.model.base.ModelBase\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.base.</code><code class=\"sig-name descname\">ModelBase</code><a class=\"reference internal\" href=\"_modules/claf/model/base.html#ModelBase\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.base.ModelBase\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Model Base Class</p>\n<dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: (claf.tokens.token_embedder.base) TokenEmbedder</p>\n</dd>\n</dl>\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.config\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">config</code><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.config\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.dataset\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">dataset</code><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.dataset\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/base.html#ModelBase.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.is_ready\">\n<code class=\"sig-name descname\">is_ready</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/base.html#ModelBase.is_ready\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.is_ready\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.log_dir\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">log_dir</code><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.log_dir\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.make_metrics\">\n<code class=\"sig-name descname\">make_metrics</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/base.html#ModelBase.make_metrics\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.make_metrics\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.make_predictions\">\n<code class=\"sig-name descname\">make_predictions</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/base.html#ModelBase.make_predictions\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.make_predictions\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>for Metrics</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.metrics\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">metrics</code><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.metrics\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.predict\">\n<code class=\"sig-name descname\">predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/base.html#ModelBase.predict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Inference</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.print_examples\">\n<code class=\"sig-name descname\">print_examples</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">params</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/base.html#ModelBase.print_examples\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.print_examples\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Print evaluation examples</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.train_counter\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">train_counter</code><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.train_counter\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.vocabs\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">vocabs</code><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.vocabs\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.base.ModelBase.write_predictions\">\n<code class=\"sig-name descname\">write_predictions</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">predictions</em>, <em class=\"sig-param\">file_path=None</em>, <em class=\"sig-param\">is_dict=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/base.html#ModelBase.write_predictions\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.base.ModelBase.write_predictions\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.base.ModelWithTokenEmbedder\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.base.</code><code class=\"sig-name descname\">ModelWithTokenEmbedder</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/base.html#ModelWithTokenEmbedder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.base.ModelWithTokenEmbedder\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.base.ModelBase\" title=\"claf.model.base.ModelBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelBase</span></code></a></p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.base.ModelWithoutTokenEmbedder\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.base.</code><code class=\"sig-name descname\">ModelWithoutTokenEmbedder</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/base.html#ModelWithoutTokenEmbedder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.base.ModelWithoutTokenEmbedder\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.base.ModelBase\" title=\"claf.model.base.ModelBase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelBase</span></code></a></p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.model.cls_utils\"></span><dl class=\"function\">\n<dt id=\"claf.model.cls_utils.get_tag_dict\">\n<code class=\"sig-prename descclassname\">claf.model.cls_utils.</code><code class=\"sig-name descname\">get_tag_dict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">sequence</em>, <em class=\"sig-param\">tag_texts</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/cls_utils.html#get_tag_dict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.cls_utils.get_tag_dict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.model.cls_utils.write_confusion_matrix_to_csv\">\n<code class=\"sig-prename descclassname\">claf.model.cls_utils.</code><code class=\"sig-name descname\">write_confusion_matrix_to_csv</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_path</em>, <em class=\"sig-param\">pycm_obj</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/cls_utils.html#write_confusion_matrix_to_csv\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.cls_utils.write_confusion_matrix_to_csv\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.model\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.model\" title=\"Permalink to this headline\">¶</a></h2>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.model.reading_comprehension.html\" class=\"btn btn-neutral float-right\" title=\"claf.model.reading_comprehension package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.metric.html\" class=\"btn btn-neutral\" title=\"claf.metric package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.model.reading_comprehension.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.reading_comprehension package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.model.semantic_parsing package\" href=\"claf.model.semantic_parsing.html\" />\n    <link rel=\"prev\" title=\"claf.model package\" href=\"claf.model.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.model.html\">model</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.model.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.model.reading_comprehension package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.model.reading_comprehension.bidaf\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.model.reading_comprehension\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.semantic_parsing.html\">claf.model.semantic_parsing package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.sequence_classification.html\">claf.model.sequence_classification package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.token_classification.html\">claf.model.token_classification package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.model.html\">claf.model package</a> &raquo;</li>\n        \n      <li>claf.model.reading_comprehension package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.model.reading_comprehension.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-model-reading-comprehension-package\">\n<h1>claf.model.reading_comprehension package<a class=\"headerlink\" href=\"#claf-model-reading-comprehension-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.model.reading_comprehension.bidaf\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.model.reading_comprehension.bidaf\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.bidaf.BiDAF\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.bidaf.</code><code class=\"sig-name descname\">BiDAF</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=None</em>, <em class=\"sig-param\">model_dim=100</em>, <em class=\"sig-param\">contextual_rnn_num_layer=1</em>, <em class=\"sig-param\">modeling_rnn_num_layer=2</em>, <em class=\"sig-param\">predict_rnn_num_layer=1</em>, <em class=\"sig-param\">dropout=0.2</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/bidaf.html#BiDAF\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.bidaf.BiDAF\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1\" title=\"claf.model.reading_comprehension.mixin.SQuADv1\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv1</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Document Reader Model. <cite>Span Detector</cite></p>\n<p>Implementation of model presented in\nBiDAF: Bidirectional Attention Flow for Machine Comprehension\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1611.01603\">https://arxiv.org/abs/1611.01603</a>)</p>\n<ul class=\"simple\">\n<li><p>Embedding (Word + Char -&gt; Contextual)</p></li>\n<li><p>Attention Flow</p></li>\n<li><p>Modeling (RNN)</p></li>\n<li><p>Output</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nmodel_dim: the number of model dimension\ncontextual_rnn_num_layer: the number of recurrent layers (contextual)\nmodeling_rnn_num_layer: the number of recurrent layers (modeling)\npredict_rnn_num_layer: the number of recurrent layers (predict)\ndropout: the dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.bidaf.BiDAF.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/bidaf.html#BiDAF.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.bidaf.BiDAF.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.model.reading_comprehension.bidaf_no_answer\"></span><dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.bidaf_no_answer.BiDAF_No_Answer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.bidaf_no_answer.</code><code class=\"sig-name descname\">BiDAF_No_Answer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=None</em>, <em class=\"sig-param\">model_dim=100</em>, <em class=\"sig-param\">contextual_rnn_num_layer=1</em>, <em class=\"sig-param\">modeling_rnn_num_layer=2</em>, <em class=\"sig-param\">predict_rnn_num_layer=1</em>, <em class=\"sig-param\">dropout=0.2</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/bidaf_no_answer.html#BiDAF_No_Answer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.bidaf_no_answer.BiDAF_No_Answer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv2\" title=\"claf.model.reading_comprehension.mixin.SQuADv2\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv2</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Question Answering Model. <cite>Span Detector</cite>, <cite>No Answer</cite></p>\n<p>Bidirectional Attention Flow for Machine Comprehension + Bias (No_Answer)</p>\n<ul class=\"simple\">\n<li><p>Embedding (Word + Char -&gt; Contextual)</p></li>\n<li><p>Attention Flow</p></li>\n<li><p>Modeling (RNN)</p></li>\n<li><p>Output</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nmodel_dim: the number of model dimension\ndropout: the dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.bidaf_no_answer.BiDAF_No_Answer.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/bidaf_no_answer.html#BiDAF_No_Answer.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.bidaf_no_answer.BiDAF_No_Answer.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.model.reading_comprehension.docqa\"></span><dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.docqa.DocQA\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.docqa.</code><code class=\"sig-name descname\">DocQA</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=17</em>, <em class=\"sig-param\">rnn_dim=100</em>, <em class=\"sig-param\">linear_dim=200</em>, <em class=\"sig-param\">preprocess_rnn_num_layer=1</em>, <em class=\"sig-param\">modeling_rnn_num_layer=2</em>, <em class=\"sig-param\">predict_rnn_num_layer=1</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">weight_init=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa.html#DocQA\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.docqa.DocQA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1\" title=\"claf.model.reading_comprehension.mixin.SQuADv1\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv1</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Document Reader Model. <cite>Span Detector</cite></p>\n<p>Implementation of model presented in\nSimple and Effective Multi-Paragraph Reading Comprehension\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1710.10723\">https://arxiv.org/abs/1710.10723</a>)</p>\n<ul class=\"simple\">\n<li><p>Embedding (Word + Char -&gt; Contextual)</p></li>\n<li><p>Attention</p></li>\n<li><p>Residual self-attention</p></li>\n<li><p>Output</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nrnn_dim: the number of RNN cell dimension\nlinear_dim: the number of attention linear dimension\npreprocess_rnn_num_layer: the number of recurrent layers (preprocess)\nmodeling_rnn_num_layer: the number of recurrent layers (modeling)\npredict_rnn_num_layer: the number of recurrent layers (predict)\ndropout: the dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.docqa.DocQA.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa.html#DocQA.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.docqa.DocQA.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.docqa.SelfAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.docqa.</code><code class=\"sig-name descname\">SelfAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">rnn_dim</em>, <em class=\"sig-param\">linear_dim</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">weight_init=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa.html#SelfAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.docqa.SelfAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Same bi-attention mechanism, only now between the passage and itself.</p>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.docqa.SelfAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">context_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa.html#SelfAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.docqa.SelfAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.model.reading_comprehension.docqa_no_answer\"></span><dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.docqa_no_answer.DocQA_No_Answer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.docqa_no_answer.</code><code class=\"sig-name descname\">DocQA_No_Answer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=17</em>, <em class=\"sig-param\">rnn_dim=100</em>, <em class=\"sig-param\">linear_dim=200</em>, <em class=\"sig-param\">preprocess_rnn_num_layer=1</em>, <em class=\"sig-param\">modeling_rnn_num_layer=2</em>, <em class=\"sig-param\">predict_rnn_num_layer=1</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">weight_init=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa_no_answer.html#DocQA_No_Answer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.docqa_no_answer.DocQA_No_Answer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv2\" title=\"claf.model.reading_comprehension.mixin.SQuADv2\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv2</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Question Answering Model. <cite>Span Detector</cite>, <cite>No Answer</cite></p>\n<p>Implementation of model presented in\nSimple and Effective Multi-Paragraph Reading Comprehension + No_Asnwer\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1710.10723\">https://arxiv.org/abs/1710.10723</a>)</p>\n<ul class=\"simple\">\n<li><p>Embedding (Word + Char -&gt; Contextual)</p></li>\n<li><p>Attention</p></li>\n<li><p>Residual self-attention</p></li>\n<li><p>Output</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nrnn_dim: the number of RNN cell dimension\nlinear_dim: the number of attention linear dimension\npreprocess_rnn_num_layer: the number of recurrent layers (preprocess)\nmodeling_rnn_num_layer: the number of recurrent layers (modeling)\npredict_rnn_num_layer: the number of recurrent layers (predict)\ndropout: the dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.docqa_no_answer.DocQA_No_Answer.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa_no_answer.html#DocQA_No_Answer.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.docqa_no_answer.DocQA_No_Answer.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.docqa_no_answer.NoAnswer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.docqa_no_answer.</code><code class=\"sig-name descname\">NoAnswer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">bias_hidden_dim</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa_no_answer.html#NoAnswer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.docqa_no_answer.NoAnswer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>No-Answer Option</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>embed_dim: the number of passage embedding dimension\nbias_hidden_dim: bias use two layer mlp, the number of hidden_size</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.docqa_no_answer.NoAnswer.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">context_embed</em>, <em class=\"sig-param\">span_start_logits</em>, <em class=\"sig-param\">span_end_logits</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa_no_answer.html#NoAnswer.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.docqa_no_answer.NoAnswer.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.docqa_no_answer.SelfAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.docqa_no_answer.</code><code class=\"sig-name descname\">SelfAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">rnn_dim</em>, <em class=\"sig-param\">linear_dim</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">weight_init=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa_no_answer.html#SelfAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.docqa_no_answer.SelfAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Same bi-attention mechanism, only now between the passage and itself.</p>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.docqa_no_answer.SelfAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">context_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa_no_answer.html#SelfAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.docqa_no_answer.SelfAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.model.reading_comprehension.drqa\"></span><dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.drqa.DrQA\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.drqa.</code><code class=\"sig-name descname\">DrQA</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=None</em>, <em class=\"sig-param\">model_dim=128</em>, <em class=\"sig-param\">dropout=0.3</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/drqa.html#DrQA\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.drqa.DrQA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1\" title=\"claf.model.reading_comprehension.mixin.SQuADv1\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv1</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Document Reader Model. <cite>Span Detector</cite></p>\n<p>Implementation of model presented in\nReading Wikipedia to Answer Open-Domain Questions\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1704.00051\">https://arxiv.org/abs/1704.00051</a>)</p>\n<ul class=\"simple\">\n<li><p>Embedding + features</p></li>\n<li><p>Align question embedding</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nmodel_dim: the number of model dimension\ndropout: the dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.drqa.DrQA.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/drqa.html#DrQA.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.drqa.DrQA.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.model.reading_comprehension.mixin\"></span><dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.mixin.ReadingComprehension\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.mixin.</code><code class=\"sig-name descname\">ReadingComprehension</code><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#ReadingComprehension\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.ReadingComprehension\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Reading Comprehension Mixin Class</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘RCTokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.mixin.ReadingComprehension.get_best_span\">\n<code class=\"sig-name descname\">get_best_span</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">span_start_logits</em>, <em class=\"sig-param\">span_end_logits</em>, <em class=\"sig-param\">answer_maxlen=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#ReadingComprehension.get_best_span\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.ReadingComprehension.get_best_span\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Take argmax of constrained score_s * score_e.</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>span_start_logits: independent start logits\nspan_end_logits: independent end logits</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>answer_maxlen: max span length to consider (default is None -&gt; All)</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.mixin.ReadingComprehension.make_predictions\">\n<code class=\"sig-name descname\">make_predictions</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">output_dict</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#ReadingComprehension.make_predictions\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.ReadingComprehension.make_predictions\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Make predictions with model’s output_dict</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><dl class=\"simple\">\n<dt>output_dict: model’s output dictionary consisting of</dt><dd><ul>\n<li><p>data_idx: question id</p></li>\n<li><p>best_span: calculate the span_start_logits and span_end_logits to what is the best span</p></li>\n<li><p>start_logits: span start logits</p></li>\n<li><p>end_logits: span end logits</p></li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><dl class=\"simple\">\n<dt>predictions: prediction dictionary consisting of</dt><dd><ul>\n<li><p>key: ‘id’ (question id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: consisting of dictionary</dt><dd><p>predict_text, pred_span_start, pred_span_end, span_start_prob, span_end_prob</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.mixin.ReadingComprehension.predict\">\n<code class=\"sig-name descname\">predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">**kwargs</em><span class=\"sig-paren\">)</span><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.ReadingComprehension.predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.mixin.ReadingComprehension.print_examples\">\n<code class=\"sig-name descname\">print_examples</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">index</em>, <em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#ReadingComprehension.print_examples\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.ReadingComprehension.print_examples\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Print evaluation examples</p>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><p>index: data index\ninputs: mini-batch inputs\npredictions: prediction dictionary consisting of</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li><p>key: ‘id’ (question id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: consisting of dictionary</dt><dd><p>predict_text, pred_span_start, pred_span_end, span_start_prob, span_end_prob</p>\n</dd>\n</dl>\n</li>\n</ul>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><p>print(Context, Question, Answers and Predict)</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.mixin.ReadingComprehension.write_predictions\">\n<code class=\"sig-name descname\">write_predictions</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">predictions</em>, <em class=\"sig-param\">file_path=None</em>, <em class=\"sig-param\">is_dict=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#ReadingComprehension.write_predictions\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.ReadingComprehension.write_predictions\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.mixin.SQuADv1\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.mixin.</code><code class=\"sig-name descname\">SQuADv1</code><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#SQuADv1\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.ReadingComprehension\" title=\"claf.model.reading_comprehension.mixin.ReadingComprehension\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.ReadingComprehension</span></code></a></p>\n<dl class=\"simple\">\n<dt>Reading Comprehension Mixin Class</dt><dd><p>with SQuAD v1.1 evaluation</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.mixin.SQuADv1.make_metrics\">\n<code class=\"sig-name descname\">make_metrics</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#SQuADv1.make_metrics\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1.make_metrics\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Make metrics with prediction dictionary</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><dl class=\"simple\">\n<dt>predictions: prediction dictionary consisting of</dt><dd><ul>\n<li><p>key: ‘id’ (question id)</p></li>\n<li><p>value: (predict_text, pred_span_start, pred_span_end)</p></li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><dl class=\"simple\">\n<dt>metrics: metric dictionary consisting of</dt><dd><ul>\n<li><p>‘em’: exact_match (SQuAD v1.1 official evaluation)</p></li>\n<li><p>‘f1’: f1 (SQuAD v1.1 official evaluation)</p></li>\n<li><p>‘start_acc’: span_start accuracy</p></li>\n<li><p>‘end_acc’: span_end accuracy</p></li>\n<li><p>‘span_acc’: span accuracy (start and end)</p></li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.mixin.SQuADv1ForBert\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.mixin.</code><code class=\"sig-name descname\">SQuADv1ForBert</code><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#SQuADv1ForBert\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1ForBert\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1\" title=\"claf.model.reading_comprehension.mixin.SQuADv1\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv1</span></code></a></p>\n<dl class=\"simple\">\n<dt>Reading Comprehension Mixin Class</dt><dd><p>with SQuAD v1.1 evaluation</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.mixin.SQuADv1ForBert.make_metrics\">\n<code class=\"sig-name descname\">make_metrics</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#SQuADv1ForBert.make_metrics\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1ForBert.make_metrics\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>BERT predictions need to get nbest result</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.mixin.SQuADv1ForBert.predict\">\n<code class=\"sig-name descname\">predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">output_dict</em>, <em class=\"sig-param\">arguments</em>, <em class=\"sig-param\">helper</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#SQuADv1ForBert.predict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1ForBert.predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Inference by raw_feature</p>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><dl class=\"simple\">\n<dt>output_dict: model’s output dictionary consisting of</dt><dd><ul class=\"simple\">\n<li><p>data_idx: question id</p></li>\n<li><p>best_span: calculate the span_start_logits and span_end_logits to what is the best span</p></li>\n</ul>\n</dd>\n</dl>\n<p>arguments: arguments dictionary consisting of user_input\nhelper: dictionary for helping get answer</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><p>span: predict best_span</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.mixin.SQuADv2\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.mixin.</code><code class=\"sig-name descname\">SQuADv2</code><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#SQuADv2\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.SQuADv2\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.ReadingComprehension\" title=\"claf.model.reading_comprehension.mixin.ReadingComprehension\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.ReadingComprehension</span></code></a></p>\n<dl class=\"simple\">\n<dt>Reading Comprehension Mixin Class</dt><dd><p>with SQuAD v2.0 evaluation</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘RCTokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.mixin.SQuADv2.make_metrics\">\n<code class=\"sig-name descname\">make_metrics</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/mixin.html#SQuADv2.make_metrics\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.mixin.SQuADv2.make_metrics\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Make metrics with prediction dictionary</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><dl class=\"simple\">\n<dt>predictions: prediction dictionary consisting of</dt><dd><ul>\n<li><p>key: ‘id’ (question id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: consisting of dictionary</dt><dd><p>predict_text, pred_span_start, pred_span_end, span_start_prob, span_end_prob</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><dl class=\"simple\">\n<dt>metrics: metric dictionary consisting of</dt><dd><ul>\n<li><p>‘start_acc’: span_start accuracy</p></li>\n<li><p>‘end_acc’: span_end accuracy</p></li>\n<li><p>‘span_acc’: span accuracy (start and end)</p></li>\n<li><p>‘em’: exact_match (SQuAD v2.0 official evaluation)</p></li>\n<li><p>‘f1’: f1 (SQuAD v2.0 official evaluation)</p></li>\n<li><p>‘HasAns_exact’: has answer exact_match</p></li>\n<li><p>‘HasAns_f1’: has answer f1</p></li>\n<li><p>‘NoAns_exact’: no answer exact_match</p></li>\n<li><p>‘NoAns_f1’: no answer f1</p></li>\n<li><p>‘best_exact’: best exact_match score with best_exact_thresh</p></li>\n<li><p>‘best_exact_thresh’: best exact_match answerable threshold</p></li>\n<li><p>‘best_f1’: best f1 score with best_f1_thresh</p></li>\n<li><p>‘best_f1_thresh’: best f1 answerable threshold</p></li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.model.reading_comprehension.qanet\"></span><dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.qanet.EncoderBlock\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.qanet.</code><code class=\"sig-name descname\">EncoderBlock</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_dim=128</em>, <em class=\"sig-param\">num_head=8</em>, <em class=\"sig-param\">kernel_size=5</em>, <em class=\"sig-param\">num_conv_block=4</em>, <em class=\"sig-param\">dropout=0.1</em>, <em class=\"sig-param\">layer_dropout=0.9</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/qanet.html#EncoderBlock\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.qanet.EncoderBlock\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Encoder Block</p>\n<p>[]: residual\nposition_encoding -&gt; [convolution-layer] x # -&gt; [self-attention-layer] -&gt; [feed-forward-layer]</p>\n<ul class=\"simple\">\n<li><p>convolution-layer: depthwise separable convolutions</p></li>\n<li><p>self-attention-layer: multi-head attention</p></li>\n<li><p>feed-forward-layer: pointwise convolution</p></li>\n</ul>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><p>model_dim: the number of model dimension\nnum_heads: the number of head in multi-head attention\nkernel_size: convolution kernel size\nnum_conv_block: the number of convolution block\ndropout: the dropout probability\nlayer_dropout: the layer dropout probability</p>\n<blockquote>\n<div><p>(cf. Deep Networks with Stochastic Depth(<a class=\"reference external\" href=\"https://arxiv.org/abs/1603.09382\">https://arxiv.org/abs/1603.09382</a>) )</p>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.qanet.EncoderBlock.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">mask=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/qanet.html#EncoderBlock.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.qanet.EncoderBlock.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.qanet.QANet\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.qanet.</code><code class=\"sig-name descname\">QANet</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=None</em>, <em class=\"sig-param\">model_dim=128</em>, <em class=\"sig-param\">kernel_size_in_embedding=7</em>, <em class=\"sig-param\">num_head_in_embedding=8</em>, <em class=\"sig-param\">num_conv_block_in_embedding=4</em>, <em class=\"sig-param\">num_embedding_encoder_block=1</em>, <em class=\"sig-param\">kernel_size_in_modeling=5</em>, <em class=\"sig-param\">num_head_in_modeling=8</em>, <em class=\"sig-param\">num_conv_block_in_modeling=2</em>, <em class=\"sig-param\">num_modeling_encoder_block=7</em>, <em class=\"sig-param\">dropout=0.1</em>, <em class=\"sig-param\">layer_dropout=0.9</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/qanet.html#QANet\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.qanet.QANet\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1\" title=\"claf.model.reading_comprehension.mixin.SQuADv1\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv1</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Document Reader Model. <cite>Span Detector</cite></p>\n<p>Implementation of model presented in\nQANet:Combining Local Convolution with Global Self-Attention for Reading Comprehension\n(https://arxiv.org/abs/1804.09541)</p>\n<ul class=\"simple\">\n<li><p>Input Embedding Layer</p></li>\n<li><p>Embedding Encoder Layer</p></li>\n<li><p>Context-Query Attention Layer</p></li>\n<li><p>Model Encoder Layer</p></li>\n<li><p>Output Layer</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nmodel_dim: the number of model dimension</p>\n<ul>\n<li><p>Encoder Block Parameters (embedding, modeling)\nkernel_size: convolution kernel size in encoder block\nnum_head: the number of multi-head attention’s head\nnum_conv_block: the number of convolution block in encoder block</p>\n<blockquote>\n<div><p>[Layernorm -&gt; Conv (residual)]</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>num_encoder_block: the number of the encoder block</dt><dd><dl class=\"simple\">\n<dt>[position_encoding -&gt; [n repeat conv block] -&gt; Layernorm -&gt; Self-attention (residual)</dt><dd><p>-&gt; Layernorm -&gt; Feedforward (residual)]</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n<p>dropout: the dropout probability\nlayer_dropout: the layer dropout probability</p>\n<blockquote>\n<div><p>(cf. Deep Networks with Stochastic Depth(<a class=\"reference external\" href=\"https://arxiv.org/abs/1603.09382\">https://arxiv.org/abs/1603.09382</a>) )</p>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.qanet.QANet.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/qanet.html#QANet.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.qanet.QANet.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.model.reading_comprehension\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.model.reading_comprehension\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.BertForQA\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.</code><code class=\"sig-name descname\">BertForQA</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">pretrained_model_name=None</em>, <em class=\"sig-param\">answer_maxlen=30</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/bert.html#BertForQA\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.BertForQA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1ForBert\" title=\"claf.model.reading_comprehension.mixin.SQuADv1ForBert\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv1ForBert</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithoutTokenEmbedder\" title=\"claf.model.base.ModelWithoutTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithoutTokenEmbedder</span></code></a></p>\n<p>Document Reader Model. <cite>Span Detector</cite></p>\n<p>Implementation of model presented in\nBERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">https://arxiv.org/abs/1810.04805</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\npretrained_model_name: the name of a pre-trained model\nanswer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.BertForQA.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/bert.html#BertForQA.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.BertForQA.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.BiDAF\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.</code><code class=\"sig-name descname\">BiDAF</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=None</em>, <em class=\"sig-param\">model_dim=100</em>, <em class=\"sig-param\">contextual_rnn_num_layer=1</em>, <em class=\"sig-param\">modeling_rnn_num_layer=2</em>, <em class=\"sig-param\">predict_rnn_num_layer=1</em>, <em class=\"sig-param\">dropout=0.2</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/bidaf.html#BiDAF\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.BiDAF\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1\" title=\"claf.model.reading_comprehension.mixin.SQuADv1\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv1</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Document Reader Model. <cite>Span Detector</cite></p>\n<p>Implementation of model presented in\nBiDAF: Bidirectional Attention Flow for Machine Comprehension\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1611.01603\">https://arxiv.org/abs/1611.01603</a>)</p>\n<ul class=\"simple\">\n<li><p>Embedding (Word + Char -&gt; Contextual)</p></li>\n<li><p>Attention Flow</p></li>\n<li><p>Modeling (RNN)</p></li>\n<li><p>Output</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nmodel_dim: the number of model dimension\ncontextual_rnn_num_layer: the number of recurrent layers (contextual)\nmodeling_rnn_num_layer: the number of recurrent layers (modeling)\npredict_rnn_num_layer: the number of recurrent layers (predict)\ndropout: the dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.BiDAF.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/bidaf.html#BiDAF.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.BiDAF.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.QANet\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.</code><code class=\"sig-name descname\">QANet</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=None</em>, <em class=\"sig-param\">model_dim=128</em>, <em class=\"sig-param\">kernel_size_in_embedding=7</em>, <em class=\"sig-param\">num_head_in_embedding=8</em>, <em class=\"sig-param\">num_conv_block_in_embedding=4</em>, <em class=\"sig-param\">num_embedding_encoder_block=1</em>, <em class=\"sig-param\">kernel_size_in_modeling=5</em>, <em class=\"sig-param\">num_head_in_modeling=8</em>, <em class=\"sig-param\">num_conv_block_in_modeling=2</em>, <em class=\"sig-param\">num_modeling_encoder_block=7</em>, <em class=\"sig-param\">dropout=0.1</em>, <em class=\"sig-param\">layer_dropout=0.9</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/qanet.html#QANet\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.QANet\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1\" title=\"claf.model.reading_comprehension.mixin.SQuADv1\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv1</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Document Reader Model. <cite>Span Detector</cite></p>\n<p>Implementation of model presented in\nQANet:Combining Local Convolution with Global Self-Attention for Reading Comprehension\n(https://arxiv.org/abs/1804.09541)</p>\n<ul class=\"simple\">\n<li><p>Input Embedding Layer</p></li>\n<li><p>Embedding Encoder Layer</p></li>\n<li><p>Context-Query Attention Layer</p></li>\n<li><p>Model Encoder Layer</p></li>\n<li><p>Output Layer</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nmodel_dim: the number of model dimension</p>\n<ul>\n<li><p>Encoder Block Parameters (embedding, modeling)\nkernel_size: convolution kernel size in encoder block\nnum_head: the number of multi-head attention’s head\nnum_conv_block: the number of convolution block in encoder block</p>\n<blockquote>\n<div><p>[Layernorm -&gt; Conv (residual)]</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>num_encoder_block: the number of the encoder block</dt><dd><dl class=\"simple\">\n<dt>[position_encoding -&gt; [n repeat conv block] -&gt; Layernorm -&gt; Self-attention (residual)</dt><dd><p>-&gt; Layernorm -&gt; Feedforward (residual)]</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n<p>dropout: the dropout probability\nlayer_dropout: the layer dropout probability</p>\n<blockquote>\n<div><p>(cf. Deep Networks with Stochastic Depth(<a class=\"reference external\" href=\"https://arxiv.org/abs/1603.09382\">https://arxiv.org/abs/1603.09382</a>) )</p>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.QANet.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/qanet.html#QANet.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.QANet.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.DocQA\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.</code><code class=\"sig-name descname\">DocQA</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=17</em>, <em class=\"sig-param\">rnn_dim=100</em>, <em class=\"sig-param\">linear_dim=200</em>, <em class=\"sig-param\">preprocess_rnn_num_layer=1</em>, <em class=\"sig-param\">modeling_rnn_num_layer=2</em>, <em class=\"sig-param\">predict_rnn_num_layer=1</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">weight_init=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa.html#DocQA\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.DocQA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1\" title=\"claf.model.reading_comprehension.mixin.SQuADv1\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv1</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Document Reader Model. <cite>Span Detector</cite></p>\n<p>Implementation of model presented in\nSimple and Effective Multi-Paragraph Reading Comprehension\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1710.10723\">https://arxiv.org/abs/1710.10723</a>)</p>\n<ul class=\"simple\">\n<li><p>Embedding (Word + Char -&gt; Contextual)</p></li>\n<li><p>Attention</p></li>\n<li><p>Residual self-attention</p></li>\n<li><p>Output</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nrnn_dim: the number of RNN cell dimension\nlinear_dim: the number of attention linear dimension\npreprocess_rnn_num_layer: the number of recurrent layers (preprocess)\nmodeling_rnn_num_layer: the number of recurrent layers (modeling)\npredict_rnn_num_layer: the number of recurrent layers (predict)\ndropout: the dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.DocQA.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa.html#DocQA.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.DocQA.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.DrQA\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.</code><code class=\"sig-name descname\">DrQA</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=None</em>, <em class=\"sig-param\">model_dim=128</em>, <em class=\"sig-param\">dropout=0.3</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/drqa.html#DrQA\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.DrQA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1\" title=\"claf.model.reading_comprehension.mixin.SQuADv1\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv1</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Document Reader Model. <cite>Span Detector</cite></p>\n<p>Implementation of model presented in\nReading Wikipedia to Answer Open-Domain Questions\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1704.00051\">https://arxiv.org/abs/1704.00051</a>)</p>\n<ul class=\"simple\">\n<li><p>Embedding + features</p></li>\n<li><p>Align question embedding</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nmodel_dim: the number of model dimension\ndropout: the dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.DrQA.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/drqa.html#DrQA.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.DrQA.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.RoBertaForQA\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.</code><code class=\"sig-name descname\">RoBertaForQA</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">pretrained_model_name=None</em>, <em class=\"sig-param\">answer_maxlen=30</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/roberta.html#RoBertaForQA\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.RoBertaForQA\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv1ForBert\" title=\"claf.model.reading_comprehension.mixin.SQuADv1ForBert\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv1ForBert</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithoutTokenEmbedder\" title=\"claf.model.base.ModelWithoutTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithoutTokenEmbedder</span></code></a></p>\n<p>Document Reader Model. <cite>Span Detector</cite></p>\n<p>Implementation of model presented in\nBERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">https://arxiv.org/abs/1810.04805</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\npretrained_model_name: the name of a pre-trained model\nanswer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.RoBertaForQA.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/roberta.html#RoBertaForQA.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.RoBertaForQA.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.BiDAF_No_Answer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.</code><code class=\"sig-name descname\">BiDAF_No_Answer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=None</em>, <em class=\"sig-param\">model_dim=100</em>, <em class=\"sig-param\">contextual_rnn_num_layer=1</em>, <em class=\"sig-param\">modeling_rnn_num_layer=2</em>, <em class=\"sig-param\">predict_rnn_num_layer=1</em>, <em class=\"sig-param\">dropout=0.2</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/bidaf_no_answer.html#BiDAF_No_Answer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.BiDAF_No_Answer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv2\" title=\"claf.model.reading_comprehension.mixin.SQuADv2\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv2</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Question Answering Model. <cite>Span Detector</cite>, <cite>No Answer</cite></p>\n<p>Bidirectional Attention Flow for Machine Comprehension + Bias (No_Answer)</p>\n<ul class=\"simple\">\n<li><p>Embedding (Word + Char -&gt; Contextual)</p></li>\n<li><p>Attention Flow</p></li>\n<li><p>Modeling (RNN)</p></li>\n<li><p>Output</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nmodel_dim: the number of model dimension\ndropout: the dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.BiDAF_No_Answer.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/bidaf_no_answer.html#BiDAF_No_Answer.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.BiDAF_No_Answer.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.reading_comprehension.DocQA_No_Answer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.reading_comprehension.</code><code class=\"sig-name descname\">DocQA_No_Answer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">lang_code='en'</em>, <em class=\"sig-param\">aligned_query_embedding=False</em>, <em class=\"sig-param\">answer_maxlen=17</em>, <em class=\"sig-param\">rnn_dim=100</em>, <em class=\"sig-param\">linear_dim=200</em>, <em class=\"sig-param\">preprocess_rnn_num_layer=1</em>, <em class=\"sig-param\">modeling_rnn_num_layer=2</em>, <em class=\"sig-param\">predict_rnn_num_layer=1</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">weight_init=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa_no_answer.html#DocQA_No_Answer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.DocQA_No_Answer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.reading_comprehension.mixin.SQuADv2\" title=\"claf.model.reading_comprehension.mixin.SQuADv2\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.reading_comprehension.mixin.SQuADv2</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Question Answering Model. <cite>Span Detector</cite>, <cite>No Answer</cite></p>\n<p>Implementation of model presented in\nSimple and Effective Multi-Paragraph Reading Comprehension + No_Asnwer\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1710.10723\">https://arxiv.org/abs/1710.10723</a>)</p>\n<ul class=\"simple\">\n<li><p>Embedding (Word + Char -&gt; Contextual)</p></li>\n<li><p>Attention</p></li>\n<li><p>Residual self-attention</p></li>\n<li><p>Output</p></li>\n</ul>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘QATokenEmbedder’, Used to embed the ‘context’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>lang_code: Dataset language code [en|ko]\naligned_query_embedding: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n<p>answer_maxlen: the most probable answer span of length less than or equal to {answer_maxlen}\nrnn_dim: the number of RNN cell dimension\nlinear_dim: the number of attention linear dimension\npreprocess_rnn_num_layer: the number of recurrent layers (preprocess)\nmodeling_rnn_num_layer: the number of recurrent layers (modeling)\npredict_rnn_num_layer: the number of recurrent layers (predict)\ndropout: the dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.reading_comprehension.DocQA_No_Answer.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/reading_comprehension/docqa_no_answer.html#DocQA_No_Answer.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.reading_comprehension.DocQA_No_Answer.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><dl>\n<dt>features: feature dictionary like below.</dt><dd><dl>\n<dt>{“feature_name1”: {</dt><dd><blockquote>\n<div><p>“token_name1”: tensor,\n“toekn_name2”: tensor},</p>\n</div></blockquote>\n<p>“feature_name2”: …}</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>label: label dictionary like below.</dt><dd><dl class=\"simple\">\n<dt>{“label_name1”: tensor,</dt><dd><p>“label_name2”: tensor}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>start_logits: representing unnormalized log probabilities of the span start position.</p></li>\n<li><p>end_logits: representing unnormalized log probabilities of the span end position.</p></li>\n<li><p>best_span: the string from the original passage that the model thinks is the best answer to the question.</p></li>\n<li><p>data_idx: the question id, mapping with answer</p></li>\n<li><p>loss: A scalar loss to be optimised.</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.model.semantic_parsing.html\" class=\"btn btn-neutral float-right\" title=\"claf.model.semantic_parsing package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.model.html\" class=\"btn btn-neutral\" title=\"claf.model package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.model.semantic_parsing.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.semantic_parsing package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.model.sequence_classification package\" href=\"claf.model.sequence_classification.html\" />\n    <link rel=\"prev\" title=\"claf.model.reading_comprehension package\" href=\"claf.model.reading_comprehension.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.model.html\">model</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.model.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.reading_comprehension.html\">claf.model.reading_comprehension package</a></li>\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.model.semantic_parsing package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.model.semantic_parsing.mixin\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.model.semantic_parsing\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.sequence_classification.html\">claf.model.sequence_classification package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.token_classification.html\">claf.model.token_classification package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.model.html\">claf.model package</a> &raquo;</li>\n        \n      <li>claf.model.semantic_parsing package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.model.semantic_parsing.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-model-semantic-parsing-package\">\n<h1>claf.model.semantic_parsing package<a class=\"headerlink\" href=\"#claf-model-semantic-parsing-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.model.semantic_parsing.mixin\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.model.semantic_parsing.mixin\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.model.semantic_parsing.mixin.WikiSQL\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.semantic_parsing.mixin.</code><code class=\"sig-name descname\">WikiSQL</code><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/mixin.html#WikiSQL\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<dl class=\"simple\">\n<dt>WikiSQL Mixin Class</dt><dd><p>with official evaluation</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘TokenEmbedder’</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.model.semantic_parsing.mixin.WikiSQL.AGG_OPS\">\n<code class=\"sig-name descname\">AGG_OPS</code><em class=\"property\"> = ['None', 'MAX', 'MIN', 'COUNT', 'SUM', 'AVG']</em><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL.AGG_OPS\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.model.semantic_parsing.mixin.WikiSQL.COND_OPS\">\n<code class=\"sig-name descname\">COND_OPS</code><em class=\"property\"> = ['EQL', 'GT', 'LT']</em><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL.COND_OPS\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.mixin.WikiSQL.decode_pointer\">\n<code class=\"sig-name descname\">decode_pointer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenized_question</em>, <em class=\"sig-param\">cond_value_logits</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/mixin.html#WikiSQL.decode_pointer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL.decode_pointer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.mixin.WikiSQL.generate_queries\">\n<code class=\"sig-name descname\">generate_queries</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">output_dict</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/mixin.html#WikiSQL.generate_queries\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL.generate_queries\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.mixin.WikiSQL.make_metrics\">\n<code class=\"sig-name descname\">make_metrics</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/mixin.html#WikiSQL.make_metrics\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL.make_metrics\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>aggregator, select_column, conditions accuracy</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.mixin.WikiSQL.make_predictions\">\n<code class=\"sig-name descname\">make_predictions</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">output_dict</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/mixin.html#WikiSQL.make_predictions\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL.make_predictions\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.mixin.WikiSQL.merge_tokens\">\n<code class=\"sig-name descname\">merge_tokens</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tok_list</em>, <em class=\"sig-param\">raw_tok_str</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/mixin.html#WikiSQL.merge_tokens\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL.merge_tokens\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.mixin.WikiSQL.predict\">\n<code class=\"sig-name descname\">predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">**kwargs</em><span class=\"sig-paren\">)</span><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL.predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.mixin.WikiSQL.print_examples\">\n<code class=\"sig-name descname\">print_examples</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">index</em>, <em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/mixin.html#WikiSQL.print_examples\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL.print_examples\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Print evaluation examples</p>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><p>index: data index\ninputs: mini-batch inputs\npredictions: prediction dictionary consisting of</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li><p>key: ‘id’ (question id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: consisting of dictionary</dt><dd><p>table_id, query (agg, sel, conds)</p>\n</dd>\n</dl>\n</li>\n</ul>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><p>print(Context, Question, Answers and Predict)</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.model.semantic_parsing.sqlnet\"></span><dl class=\"class\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.AggPredictor\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.semantic_parsing.sqlnet.</code><code class=\"sig-name descname\">AggPredictor</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">model_dim</em>, <em class=\"sig-param\">rnn_num_layer</em>, <em class=\"sig-param\">dropout</em>, <em class=\"sig-param\">agg_count</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#AggPredictor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.AggPredictor\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.AggPredictor.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question_embed</em>, <em class=\"sig-param\">question_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#AggPredictor.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.AggPredictor.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsColPredictor\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.semantic_parsing.sqlnet.</code><code class=\"sig-name descname\">CondsColPredictor</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">model_dim</em>, <em class=\"sig-param\">rnn_num_layer</em>, <em class=\"sig-param\">dropout</em>, <em class=\"sig-param\">column_attention=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsColPredictor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsColPredictor\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsColPredictor.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question_embed</em>, <em class=\"sig-param\">question_mask</em>, <em class=\"sig-param\">column_embed</em>, <em class=\"sig-param\">column_name_mask</em>, <em class=\"sig-param\">column_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsColPredictor.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsColPredictor.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsNumPredictor\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.semantic_parsing.sqlnet.</code><code class=\"sig-name descname\">CondsNumPredictor</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">model_dim</em>, <em class=\"sig-param\">rnn_num_layer</em>, <em class=\"sig-param\">dropout</em>, <em class=\"sig-param\">column_maxlen</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsNumPredictor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsNumPredictor\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsNumPredictor.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question_embed</em>, <em class=\"sig-param\">question_mask</em>, <em class=\"sig-param\">column_embed</em>, <em class=\"sig-param\">column_name_mask</em>, <em class=\"sig-param\">column_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsNumPredictor.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsNumPredictor.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsOpPredictor\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.semantic_parsing.sqlnet.</code><code class=\"sig-name descname\">CondsOpPredictor</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">model_dim</em>, <em class=\"sig-param\">rnn_num_layer</em>, <em class=\"sig-param\">dropout</em>, <em class=\"sig-param\">op_count</em>, <em class=\"sig-param\">column_maxlen</em>, <em class=\"sig-param\">column_attention=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsOpPredictor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsOpPredictor\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsOpPredictor.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question_embed</em>, <em class=\"sig-param\">question_mask</em>, <em class=\"sig-param\">column_embed</em>, <em class=\"sig-param\">column_name_mask</em>, <em class=\"sig-param\">col_idx</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsOpPredictor.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsOpPredictor.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsPredictor\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.semantic_parsing.sqlnet.</code><code class=\"sig-name descname\">CondsPredictor</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">model_dim</em>, <em class=\"sig-param\">rnn_num_layer</em>, <em class=\"sig-param\">dropout</em>, <em class=\"sig-param\">conds_op_count</em>, <em class=\"sig-param\">column_maxlen</em>, <em class=\"sig-param\">token_maxlen</em>, <em class=\"sig-param\">column_attention=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsPredictor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsPredictor\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsPredictor.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question_embed</em>, <em class=\"sig-param\">question_mask</em>, <em class=\"sig-param\">column_embed</em>, <em class=\"sig-param\">column_name_mask</em>, <em class=\"sig-param\">column_mask</em>, <em class=\"sig-param\">col_idx</em>, <em class=\"sig-param\">conds_val_pos</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsPredictor.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsPredictor.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsValuePointer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.semantic_parsing.sqlnet.</code><code class=\"sig-name descname\">CondsValuePointer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">model_dim</em>, <em class=\"sig-param\">rnn_num_layer</em>, <em class=\"sig-param\">dropout</em>, <em class=\"sig-param\">column_maxlen</em>, <em class=\"sig-param\">token_maxlen</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsValuePointer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsValuePointer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsValuePointer.concat_start_and_end_zero_padding\">\n<code class=\"sig-name descname\">concat_start_and_end_zero_padding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question_embed</em>, <em class=\"sig-param\">mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsValuePointer.concat_start_and_end_zero_padding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsValuePointer.concat_start_and_end_zero_padding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsValuePointer.decode_then_output\">\n<code class=\"sig-name descname\">decode_then_output</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">encoded_used_column</em>, <em class=\"sig-param\">encoded_question</em>, <em class=\"sig-param\">question_mask</em>, <em class=\"sig-param\">decoder_input</em>, <em class=\"sig-param\">decoder_hidden=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsValuePointer.decode_then_output\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsValuePointer.decode_then_output\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.CondsValuePointer.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question_embed</em>, <em class=\"sig-param\">question_mask</em>, <em class=\"sig-param\">column_embed</em>, <em class=\"sig-param\">column_name_mask</em>, <em class=\"sig-param\">col_idx</em>, <em class=\"sig-param\">conds_val_pos</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#CondsValuePointer.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.CondsValuePointer.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.SQLNet\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.semantic_parsing.sqlnet.</code><code class=\"sig-name descname\">SQLNet</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">column_attention=None</em>, <em class=\"sig-param\">model_dim=100</em>, <em class=\"sig-param\">rnn_num_layer=2</em>, <em class=\"sig-param\">dropout=0.3</em>, <em class=\"sig-param\">column_maxlen=4</em>, <em class=\"sig-param\">token_maxlen=200</em>, <em class=\"sig-param\">conds_column_loss_alpha=3</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#SQLNet\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.SQLNet\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL\" title=\"claf.model.semantic_parsing.mixin.WikiSQL\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.semantic_parsing.mixin.WikiSQL</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Nature Language to SQL Query Model. <cite>Semantic Parsing</cite>, <cite>NL2SQL</cite></p>\n<p>Implementation of model presented in\nSQLNet: Generating Structured Queries From Natural Language</p>\n<blockquote>\n<div><p>Without Reinforcement Learning</p>\n</div></blockquote>\n<p>(<a class=\"reference external\" href=\"https://arxiv.org/abs/1711.04436\">https://arxiv.org/abs/1711.04436</a>)</p>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘WikiSQLTokenEmbedder’, Used to embed the ‘column’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>column_attention: highlight that column attention is a special instance of</dt><dd><p>the generic attention mechanism to compute the attention map on a question\nconditioned on the column names.</p>\n</dd>\n</dl>\n<p>model_dim: the number of model dimension\nrnn_num_layer: the number of recurrent layers (all of rnn)\ncolumn_maxlen: an upper-bound N on the number of columns to choose\ntoken_maxlen: conds value slot - pointer network an upper-bound N on the number of token\nconds_column_loss_alpha: balance the positive data versus negative data</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.SQLNet.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#SQLNet.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.SQLNet.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.SelPredictor\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.semantic_parsing.sqlnet.</code><code class=\"sig-name descname\">SelPredictor</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">model_dim</em>, <em class=\"sig-param\">rnn_num_layer</em>, <em class=\"sig-param\">dropout</em>, <em class=\"sig-param\">column_attention=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#SelPredictor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.SelPredictor\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.sqlnet.SelPredictor.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">question_embed</em>, <em class=\"sig-param\">question_mask</em>, <em class=\"sig-param\">column_embed</em>, <em class=\"sig-param\">column_name_mask</em>, <em class=\"sig-param\">column_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#SelPredictor.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.sqlnet.SelPredictor.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.model.semantic_parsing.utils\"></span><dl class=\"function\">\n<dt id=\"claf.model.semantic_parsing.utils.convert_position_to_decoder_input\">\n<code class=\"sig-prename descclassname\">claf.model.semantic_parsing.utils.</code><code class=\"sig-name descname\">convert_position_to_decoder_input</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">conds_val_pos</em>, <em class=\"sig-param\">token_maxlen=200</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/utils.html#convert_position_to_decoder_input\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.utils.convert_position_to_decoder_input\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.model.semantic_parsing.utils.encode_column\">\n<code class=\"sig-prename descclassname\">claf.model.semantic_parsing.utils.</code><code class=\"sig-name descname\">encode_column</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">column_embed</em>, <em class=\"sig-param\">column_name_mask</em>, <em class=\"sig-param\">rnn_module</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/utils.html#encode_column\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.utils.encode_column\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.model.semantic_parsing.utils.filter_used_column\">\n<code class=\"sig-prename descclassname\">claf.model.semantic_parsing.utils.</code><code class=\"sig-name descname\">filter_used_column</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">encoded_columns</em>, <em class=\"sig-param\">col_idx</em>, <em class=\"sig-param\">padding_count=4</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/utils.html#filter_used_column\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.utils.filter_used_column\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.model.semantic_parsing.utils.get_column_lengths\">\n<code class=\"sig-prename descclassname\">claf.model.semantic_parsing.utils.</code><code class=\"sig-name descname\">get_column_lengths</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">column_embed</em>, <em class=\"sig-param\">column_name_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/utils.html#get_column_lengths\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.utils.get_column_lengths\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.model.semantic_parsing\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.model.semantic_parsing\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.model.semantic_parsing.SQLNet\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.semantic_parsing.</code><code class=\"sig-name descname\">SQLNet</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">column_attention=None</em>, <em class=\"sig-param\">model_dim=100</em>, <em class=\"sig-param\">rnn_num_layer=2</em>, <em class=\"sig-param\">dropout=0.3</em>, <em class=\"sig-param\">column_maxlen=4</em>, <em class=\"sig-param\">token_maxlen=200</em>, <em class=\"sig-param\">conds_column_loss_alpha=3</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#SQLNet\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.SQLNet\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.semantic_parsing.mixin.WikiSQL\" title=\"claf.model.semantic_parsing.mixin.WikiSQL\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.semantic_parsing.mixin.WikiSQL</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Nature Language to SQL Query Model. <cite>Semantic Parsing</cite>, <cite>NL2SQL</cite></p>\n<p>Implementation of model presented in\nSQLNet: Generating Structured Queries From Natural Language</p>\n<blockquote>\n<div><p>Without Reinforcement Learning</p>\n</div></blockquote>\n<p>(<a class=\"reference external\" href=\"https://arxiv.org/abs/1711.04436\">https://arxiv.org/abs/1711.04436</a>)</p>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: ‘WikiSQLTokenEmbedder’, Used to embed the ‘column’ and ‘question’.</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>column_attention: highlight that column attention is a special instance of</dt><dd><p>the generic attention mechanism to compute the attention map on a question\nconditioned on the column names.</p>\n</dd>\n</dl>\n<p>model_dim: the number of model dimension\nrnn_num_layer: the number of recurrent layers (all of rnn)\ncolumn_maxlen: an upper-bound N on the number of columns to choose\ntoken_maxlen: conds value slot - pointer network an upper-bound N on the number of token\nconds_column_loss_alpha: balance the positive data versus negative data</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.semantic_parsing.SQLNet.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/semantic_parsing/sqlnet.html#SQLNet.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.semantic_parsing.SQLNet.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.model.sequence_classification.html\" class=\"btn btn-neutral float-right\" title=\"claf.model.sequence_classification package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.model.reading_comprehension.html\" class=\"btn btn-neutral\" title=\"claf.model.reading_comprehension package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.model.sequence_classification.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.sequence_classification package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.model.token_classification package\" href=\"claf.model.token_classification.html\" />\n    <link rel=\"prev\" title=\"claf.model.semantic_parsing package\" href=\"claf.model.semantic_parsing.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.model.html\">model</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.model.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.reading_comprehension.html\">claf.model.reading_comprehension package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.semantic_parsing.html\">claf.model.semantic_parsing package</a></li>\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.model.sequence_classification package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.model.sequence_classification.mixin\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.model.sequence_classification\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.token_classification.html\">claf.model.token_classification package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.model.html\">claf.model package</a> &raquo;</li>\n        \n      <li>claf.model.sequence_classification package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.model.sequence_classification.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-model-sequence-classification-package\">\n<h1>claf.model.sequence_classification package<a class=\"headerlink\" href=\"#claf-model-sequence-classification-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.model.sequence_classification.mixin\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.model.sequence_classification.mixin\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.model.sequence_classification.mixin.SequenceClassification\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.sequence_classification.mixin.</code><code class=\"sig-name descname\">SequenceClassification</code><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/mixin.html#SequenceClassification\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.mixin.SequenceClassification\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Sequence Classification Mixin Class</p>\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.mixin.SequenceClassification.make_metrics\">\n<code class=\"sig-name descname\">make_metrics</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/mixin.html#SequenceClassification.make_metrics\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.mixin.SequenceClassification.make_metrics\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Make metrics with prediction dictionary</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><dl class=\"simple\">\n<dt>predictions: prediction dictionary consisting of</dt><dd><ul>\n<li><p>key: ‘id’ (sequence id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: dictionary consisting of</dt><dd><ul>\n<li><p>class_idx</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><dl class=\"simple\">\n<dt>metrics: metric dictionary consisting of</dt><dd><ul>\n<li><p>‘macro_f1’: class prediction macro(unweighted mean) f1</p></li>\n<li><p>‘macro_precision’: class prediction macro(unweighted mean) precision</p></li>\n<li><p>‘macro_recall’: class prediction macro(unweighted mean) recall</p></li>\n<li><p>‘accuracy’: class prediction accuracy</p></li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.mixin.SequenceClassification.make_predictions\">\n<code class=\"sig-name descname\">make_predictions</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">output_dict</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/mixin.html#SequenceClassification.make_predictions\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.mixin.SequenceClassification.make_predictions\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Make predictions with model’s output_dict</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><dl class=\"simple\">\n<dt>output_dict: model’s output dictionary consisting of</dt><dd><ul>\n<li><p>sequence_embed: embedding vector of the sequence</p></li>\n<li><p>logits: representing unnormalized log probabilities of the class</p></li>\n<li><p>class_idx: target class idx</p></li>\n<li><p>data_idx: data idx</p></li>\n<li><p>loss: a scalar loss to be optimized</p></li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><dl class=\"simple\">\n<dt>predictions: prediction dictionary consisting of</dt><dd><ul>\n<li><p>key: ‘id’ (sequence id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: dictionary consisting of</dt><dd><ul>\n<li><p>class_idx</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.mixin.SequenceClassification.predict\">\n<code class=\"sig-name descname\">predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">output_dict</em>, <em class=\"sig-param\">arguments</em>, <em class=\"sig-param\">helper</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/mixin.html#SequenceClassification.predict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.mixin.SequenceClassification.predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Inference by raw_feature</p>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><dl class=\"simple\">\n<dt>output_dict: model’s output dictionary consisting of</dt><dd><ul class=\"simple\">\n<li><p>sequence_embed: embedding vector of the sequence</p></li>\n<li><p>logits: representing unnormalized log probabilities of the class.</p></li>\n</ul>\n</dd>\n</dl>\n<p>arguments: arguments dictionary consisting of user_input\nhelper: dictionary to get the classification result, consisting of</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li><p>class_idx2text: dictionary converting class_idx to class_text</p></li>\n</ul>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>logits: representing unnormalized log probabilities of the class</p></li>\n<li><p>class_idx: predicted class idx</p></li>\n<li><p>class_text: predicted class text</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.mixin.SequenceClassification.print_examples\">\n<code class=\"sig-name descname\">print_examples</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">index</em>, <em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/mixin.html#SequenceClassification.print_examples\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.mixin.SequenceClassification.print_examples\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Print evaluation examples</p>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><p>index: data index\ninputs: mini-batch inputs\npredictions: prediction dictionary consisting of</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li><p>key: ‘id’ (sequence id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: dictionary consisting of</dt><dd><ul>\n<li><p>class_idx</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><p>print(Sequence, Target Class, Predicted Class)</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.mixin.SequenceClassification.write_predictions\">\n<code class=\"sig-name descname\">write_predictions</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">predictions</em>, <em class=\"sig-param\">file_path=None</em>, <em class=\"sig-param\">is_dict=True</em>, <em class=\"sig-param\">pycm_obj=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/mixin.html#SequenceClassification.write_predictions\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.mixin.SequenceClassification.write_predictions\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Override write_predictions() in ModelBase to log confusion matrix</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.model.sequence_classification.structured_self_attention\"></span><dl class=\"class\">\n<dt id=\"claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.sequence_classification.structured_self_attention.</code><code class=\"sig-name descname\">StructuredSelfAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">num_classes</em>, <em class=\"sig-param\">encoding_rnn_hidden_dim=300</em>, <em class=\"sig-param\">encoding_rnn_num_layer=2</em>, <em class=\"sig-param\">encoding_rnn_dropout=0.0</em>, <em class=\"sig-param\">attention_dim=350</em>, <em class=\"sig-param\">num_attention_heads=30</em>, <em class=\"sig-param\">sequence_embed_dim=2000</em>, <em class=\"sig-param\">dropout=0.5</em>, <em class=\"sig-param\">penalization_coefficient=1.0</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/structured_self_attention.html#StructuredSelfAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.sequence_classification.mixin.SequenceClassification\" title=\"claf.model.sequence_classification.mixin.SequenceClassification\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.sequence_classification.mixin.SequenceClassification</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Implementation of model presented in\nA Structured Self-attentive Sentence Embedding\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1703.03130\">https://arxiv.org/abs/1703.03130</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: used to embed the sequence\nnum_classes: number of classified classes</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>encoding_rnn_hidden_dim: hidden dimension of rnn (unidirectional)\nencoding_rnn_num_layer: the number of rnn layers\nencoding_rnn_dropout: rnn dropout probability\nattention_dim: attention dimension  # d_a in the paper\nnum_attention_heads: number of attention heads  # r in the paper\nsequence_embed_dim: dimension of sequence embedding\ndropout: classification layer dropout\npenalization_coefficient: penalty coefficient for frobenius norm</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/structured_self_attention.html#StructuredSelfAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>features: feature dictionary like below.\n{“sequence”: [0, 3, 4, 1]}</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>label: label dictionary like below.\n{“class_idx”: 2, “data_idx”: 0}</p>\n<blockquote>\n<div><p>Do not calculate loss when there is no label. (inference/predict mode)</p>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>sequence_embed: embedding vector of the sequence</p></li>\n<li><p>logits: representing unnormalized log probabilities of the class.</p></li>\n<li><p>class_idx: target class idx</p></li>\n<li><p>data_idx: data idx</p></li>\n<li><p>loss: a scalar loss to be optimized</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention.penalty\">\n<code class=\"sig-name descname\">penalty</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">attention</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/structured_self_attention.html#StructuredSelfAttention.penalty\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention.penalty\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.model.sequence_classification\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.model.sequence_classification\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.model.sequence_classification.BertForSeqCls\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.sequence_classification.</code><code class=\"sig-name descname\">BertForSeqCls</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em>, <em class=\"sig-param\">num_classes</em>, <em class=\"sig-param\">pretrained_model_name=None</em>, <em class=\"sig-param\">dropout=0.2</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/bert.html#BertForSeqCls\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.BertForSeqCls\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.sequence_classification.mixin.SequenceClassification\" title=\"claf.model.sequence_classification.mixin.SequenceClassification\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.sequence_classification.mixin.SequenceClassification</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithoutTokenEmbedder\" title=\"claf.model.base.ModelWithoutTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithoutTokenEmbedder</span></code></a></p>\n<p>Implementation of Sentence Classification model presented in\nBERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">https://arxiv.org/abs/1810.04805</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: used to embed the sequence\nnum_classes: number of classified classes</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>pretrained_model_name: the name of a pre-trained model\ndropout: classification layer dropout</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.BertForSeqCls.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/bert.html#BertForSeqCls.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.BertForSeqCls.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><p>features: feature dictionary like below.\n{</p>\n<blockquote>\n<div><dl>\n<dt>“bert_input”: {</dt><dd><dl class=\"simple\">\n<dt>“feature”: [</dt><dd><p>[3, 4, 1, 0, 0, 0, …],\n…,</p>\n</dd>\n</dl>\n<p>]</p>\n</dd>\n</dl>\n<p>},\n“token_type”: {</p>\n<blockquote>\n<div><dl class=\"simple\">\n<dt>“feature”: [</dt><dd><p>[0, 0, 0, 0, 0, 0, …],\n…,</p>\n</dd>\n</dl>\n<p>],</p>\n</div></blockquote>\n<p>}</p>\n</div></blockquote>\n<p>}</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>label: label dictionary like below.\n{</p>\n<blockquote>\n<div><p>“class_idx”: [2, 1, 0, 4, 5, …]\n“data_idx”: [2, 4, 5, 7, 2, 1, …]</p>\n</div></blockquote>\n<p>}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>sequence_embed: embedding vector of the sequence</p></li>\n<li><p>logits: representing unnormalized log probabilities of the class.</p></li>\n<li><p>class_idx: target class idx</p></li>\n<li><p>data_idx: data idx</p></li>\n<li><p>loss: a scalar loss to be optimized</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.BertForSeqCls.print_examples\">\n<code class=\"sig-name descname\">print_examples</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">index</em>, <em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/bert.html#BertForSeqCls.print_examples\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.BertForSeqCls.print_examples\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Print evaluation examples</p>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><p>index: data index\ninputs: mini-batch inputs\npredictions: prediction dictionary consisting of</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li><p>key: ‘id’ (sequence id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: dictionary consisting of</dt><dd><ul>\n<li><p>class_idx</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><p>print(Sequence, Sequence Tokens, Target Class, Predicted Class)</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.sequence_classification.RobertaForSeqCls\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.sequence_classification.</code><code class=\"sig-name descname\">RobertaForSeqCls</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em>, <em class=\"sig-param\">num_classes</em>, <em class=\"sig-param\">pretrained_model_name=None</em>, <em class=\"sig-param\">dropout=0.2</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/roberta.html#RobertaForSeqCls\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.RobertaForSeqCls\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.sequence_classification.mixin.SequenceClassification\" title=\"claf.model.sequence_classification.mixin.SequenceClassification\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.sequence_classification.mixin.SequenceClassification</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithoutTokenEmbedder\" title=\"claf.model.base.ModelWithoutTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithoutTokenEmbedder</span></code></a></p>\n<p>Implementation of Sentence Classification model presented in\nBERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">https://arxiv.org/abs/1810.04805</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: used to embed the sequence\nnum_classes: number of classified classes</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>pretrained_model_name: the name of a pre-trained model\ndropout: classification layer dropout</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.RobertaForSeqCls.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/roberta.html#RobertaForSeqCls.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.RobertaForSeqCls.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><p>features: feature dictionary like below.\n{</p>\n<blockquote>\n<div><dl>\n<dt>“bert_input”: {</dt><dd><dl class=\"simple\">\n<dt>“feature”: [</dt><dd><p>[3, 4, 1, 0, 0, 0, …],\n…,</p>\n</dd>\n</dl>\n<p>]</p>\n</dd>\n</dl>\n<p>},</p>\n</div></blockquote>\n<p>}</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>label: label dictionary like below.\n{</p>\n<blockquote>\n<div><p>“class_idx”: [2, 1, 0, 4, 5, …]\n“data_idx”: [2, 4, 5, 7, 2, 1, …]</p>\n</div></blockquote>\n<p>}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>sequence_embed: embedding vector of the sequence</p></li>\n<li><p>logits: representing unnormalized log probabilities of the class.</p></li>\n<li><p>class_idx: target class idx</p></li>\n<li><p>data_idx: data idx</p></li>\n<li><p>loss: a scalar loss to be optimized</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.RobertaForSeqCls.print_examples\">\n<code class=\"sig-name descname\">print_examples</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">index</em>, <em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/roberta.html#RobertaForSeqCls.print_examples\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.RobertaForSeqCls.print_examples\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Print evaluation examples</p>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><p>index: data index\ninputs: mini-batch inputs\npredictions: prediction dictionary consisting of</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li><p>key: ‘id’ (sequence id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: dictionary consisting of</dt><dd><ul>\n<li><p>class_idx</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><p>print(Sequence, Sequence Tokens, Target Class, Predicted Class)</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.model.sequence_classification.StructuredSelfAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.sequence_classification.</code><code class=\"sig-name descname\">StructuredSelfAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_embedder</em>, <em class=\"sig-param\">num_classes</em>, <em class=\"sig-param\">encoding_rnn_hidden_dim=300</em>, <em class=\"sig-param\">encoding_rnn_num_layer=2</em>, <em class=\"sig-param\">encoding_rnn_dropout=0.0</em>, <em class=\"sig-param\">attention_dim=350</em>, <em class=\"sig-param\">num_attention_heads=30</em>, <em class=\"sig-param\">sequence_embed_dim=2000</em>, <em class=\"sig-param\">dropout=0.5</em>, <em class=\"sig-param\">penalization_coefficient=1.0</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/structured_self_attention.html#StructuredSelfAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.StructuredSelfAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.sequence_classification.mixin.SequenceClassification\" title=\"claf.model.sequence_classification.mixin.SequenceClassification\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.sequence_classification.mixin.SequenceClassification</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\" title=\"claf.model.base.ModelWithTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithTokenEmbedder</span></code></a></p>\n<p>Implementation of model presented in\nA Structured Self-attentive Sentence Embedding\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1703.03130\">https://arxiv.org/abs/1703.03130</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: used to embed the sequence\nnum_classes: number of classified classes</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>encoding_rnn_hidden_dim: hidden dimension of rnn (unidirectional)\nencoding_rnn_num_layer: the number of rnn layers\nencoding_rnn_dropout: rnn dropout probability\nattention_dim: attention dimension  # d_a in the paper\nnum_attention_heads: number of attention heads  # r in the paper\nsequence_embed_dim: dimension of sequence embedding\ndropout: classification layer dropout\npenalization_coefficient: penalty coefficient for frobenius norm</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.StructuredSelfAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/structured_self_attention.html#StructuredSelfAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.StructuredSelfAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>features: feature dictionary like below.\n{“sequence”: [0, 3, 4, 1]}</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>label: label dictionary like below.\n{“class_idx”: 2, “data_idx”: 0}</p>\n<blockquote>\n<div><p>Do not calculate loss when there is no label. (inference/predict mode)</p>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>sequence_embed: embedding vector of the sequence</p></li>\n<li><p>logits: representing unnormalized log probabilities of the class.</p></li>\n<li><p>class_idx: target class idx</p></li>\n<li><p>data_idx: data idx</p></li>\n<li><p>loss: a scalar loss to be optimized</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.sequence_classification.StructuredSelfAttention.penalty\">\n<code class=\"sig-name descname\">penalty</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">attention</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/sequence_classification/structured_self_attention.html#StructuredSelfAttention.penalty\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.sequence_classification.StructuredSelfAttention.penalty\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.model.token_classification.html\" class=\"btn btn-neutral float-right\" title=\"claf.model.token_classification package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.model.semantic_parsing.html\" class=\"btn btn-neutral\" title=\"claf.model.semantic_parsing package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.model.token_classification.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.model.token_classification package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.modules package\" href=\"claf.modules.html\" />\n    <link rel=\"prev\" title=\"claf.model.sequence_classification package\" href=\"claf.model.sequence_classification.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.model.html\">model</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.model.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.reading_comprehension.html\">claf.model.reading_comprehension package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.semantic_parsing.html\">claf.model.semantic_parsing package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.sequence_classification.html\">claf.model.sequence_classification package</a></li>\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.model.token_classification package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.model.token_classification.mixin\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.model.token_classification\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.model.html\">claf.model package</a> &raquo;</li>\n        \n      <li>claf.model.token_classification package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.model.token_classification.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-model-token-classification-package\">\n<h1>claf.model.token_classification package<a class=\"headerlink\" href=\"#claf-model-token-classification-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.model.token_classification.mixin\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.model.token_classification.mixin\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.model.token_classification.mixin.TokenClassification\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.token_classification.mixin.</code><code class=\"sig-name descname\">TokenClassification</code><a class=\"reference internal\" href=\"_modules/claf/model/token_classification/mixin.html#TokenClassification\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.token_classification.mixin.TokenClassification\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Token Classification Mixin Class</p>\n<dl class=\"method\">\n<dt id=\"claf.model.token_classification.mixin.TokenClassification.make_metrics\">\n<code class=\"sig-name descname\">make_metrics</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/token_classification/mixin.html#TokenClassification.make_metrics\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.token_classification.mixin.TokenClassification.make_metrics\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Make metrics with prediction dictionary</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><dl class=\"simple\">\n<dt>predictions: prediction dictionary consisting of</dt><dd><ul>\n<li><p>key: ‘id’ (sequence id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: dictionary consisting of</dt><dd><ul>\n<li><p>tag_idxs</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><dl class=\"simple\">\n<dt>metrics: metric dictionary consisting of</dt><dd><ul>\n<li><p>‘accuracy’: sequence level accuracy</p></li>\n<li><p>‘tag_accuracy’: tag level accuracy</p></li>\n<li><p>‘macro_f1’: tag prediction macro(unweighted mean) f1</p></li>\n<li><p>‘macro_precision’: tag prediction macro(unweighted mean) precision</p></li>\n<li><p>‘macro_recall’: tag prediction macro(unweighted mean) recall</p></li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.token_classification.mixin.TokenClassification.make_predictions\">\n<code class=\"sig-name descname\">make_predictions</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">output_dict</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/token_classification/mixin.html#TokenClassification.make_predictions\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.token_classification.mixin.TokenClassification.make_predictions\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Make predictions with model’s output_dict</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><dl class=\"simple\">\n<dt>output_dict: model’s output dictionary consisting of</dt><dd><ul>\n<li><p>sequence_embed: embedding vector of the sequence</p></li>\n<li><p>tag_logits: representing unnormalized log probabilities of the tag</p></li>\n<li><p>tag_idxs: target tag idxs</p></li>\n<li><p>data_idx: data idx</p></li>\n<li><p>loss: a scalar loss to be optimized</p></li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><dl class=\"simple\">\n<dt>predictions: prediction dictionary consisting of</dt><dd><ul>\n<li><p>key: ‘id’ (sequence id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: dictionary consisting of</dt><dd><ul>\n<li><p>tag_idxs</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.token_classification.mixin.TokenClassification.predict\">\n<code class=\"sig-name descname\">predict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">**kwargs</em><span class=\"sig-paren\">)</span><a class=\"headerlink\" href=\"#claf.model.token_classification.mixin.TokenClassification.predict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.token_classification.mixin.TokenClassification.print_examples\">\n<code class=\"sig-name descname\">print_examples</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">index</em>, <em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/token_classification/mixin.html#TokenClassification.print_examples\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.token_classification.mixin.TokenClassification.print_examples\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Print evaluation examples</p>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><p>index: data index\ninputs: mini-batch inputs\npredictions: prediction dictionary consisting of</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li><p>key: ‘id’ (sequence id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: dictionary consisting of</dt><dd><ul>\n<li><p>class_idx</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><p>print(Sequence, Target Tags, Target Slots, Predicted Tags, Predicted Slots)</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.token_classification.mixin.TokenClassification.write_predictions\">\n<code class=\"sig-name descname\">write_predictions</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">predictions</em>, <em class=\"sig-param\">file_path=None</em>, <em class=\"sig-param\">is_dict=True</em>, <em class=\"sig-param\">pycm_obj=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/token_classification/mixin.html#TokenClassification.write_predictions\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.token_classification.mixin.TokenClassification.write_predictions\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Override write_predictions() in ModelBase to log confusion matrix</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.model.token_classification\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.model.token_classification\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.model.token_classification.BertForTokCls\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.model.token_classification.</code><code class=\"sig-name descname\">BertForTokCls</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em>, <em class=\"sig-param\">num_tags</em>, <em class=\"sig-param\">ignore_tag_idx</em>, <em class=\"sig-param\">pretrained_model_name=None</em>, <em class=\"sig-param\">dropout=0.2</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/token_classification/bert.html#BertForTokCls\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.token_classification.BertForTokCls\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.model.token_classification.mixin.TokenClassification\" title=\"claf.model.token_classification.mixin.TokenClassification\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.token_classification.mixin.TokenClassification</span></code></a>, <a class=\"reference internal\" href=\"claf.model.html#claf.model.base.ModelWithoutTokenEmbedder\" title=\"claf.model.base.ModelWithoutTokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.model.base.ModelWithoutTokenEmbedder</span></code></a></p>\n<p>Implementation of Single Sentence Tagging model presented in\nBERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">https://arxiv.org/abs/1810.04805</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_embedder: used to embed the sequence\nnum_tags: number of classified tags\nignore_tag_idx: index of the tag to ignore when calculating loss (tag pad value)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>pretrained_model_name: the name of a pre-trained model\ndropout: classification layer dropout</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.model.token_classification.BertForTokCls.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">labels=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/token_classification/bert.html#BertForTokCls.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.token_classification.BertForTokCls.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl>\n<dt>Args:</dt><dd><p>features: feature dictionary like below.\n{</p>\n<blockquote>\n<div><dl>\n<dt>“bert_input”: {</dt><dd><dl class=\"simple\">\n<dt>“feature”: [</dt><dd><p>[100, 576, 21, 45, 7, 91, 101, 0, 0, …],\n…,</p>\n</dd>\n</dl>\n<p>]</p>\n</dd>\n</dl>\n<p>}\n“token_type”: {</p>\n<blockquote>\n<div><dl class=\"simple\">\n<dt>“feature”: [</dt><dd><p>[0, 0, 0, 0, 0, 0, 0, 0, 0, …],\n…,</p>\n</dd>\n</dl>\n<p>]</p>\n</div></blockquote>\n<p>},\n“tagged_sub_token_idxs”: {</p>\n<blockquote>\n<div><dl class=\"simple\">\n<dt>[</dt><dd><p>[1, 3, 4, 0, 0, 0, 0, 0, 0, …],\n…,</p>\n</dd>\n</dl>\n<p>]</p>\n</div></blockquote>\n<p>}</p>\n</div></blockquote>\n<p>}</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>label: label dictionary like below.\n{</p>\n<blockquote>\n<div><p>“class_idx”: [2, 1, 0, 4, 5, …]\n“data_idx”: [2, 4, 5, 7, 2, 1, …]</p>\n</div></blockquote>\n<p>}\nDo not calculate loss when there is no label. (inference/predict mode)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns: output_dict (dict) consisting of</dt><dd><ul class=\"simple\">\n<li><p>sequence_embed: embedding vector of the sequence</p></li>\n<li><p>tag_logits: representing unnormalized log probabilities of the tags.</p></li>\n<li><p>tag_idxs: target class idx</p></li>\n<li><p>data_idx: data idx</p></li>\n<li><p>loss: a scalar loss to be optimized</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.model.token_classification.BertForTokCls.print_examples\">\n<code class=\"sig-name descname\">print_examples</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">index</em>, <em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">predictions</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/model/token_classification/bert.html#BertForTokCls.print_examples\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.model.token_classification.BertForTokCls.print_examples\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Print evaluation examples</p>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><p>index: data index\ninputs: mini-batch inputs\npredictions: prediction dictionary consisting of</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li><p>key: ‘id’ (sequence id)</p></li>\n<li><dl class=\"simple\">\n<dt>value: dictionary consisting of</dt><dd><ul>\n<li><p>class_idx</p></li>\n</ul>\n</dd>\n</dl>\n</li>\n</ul>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Returns:</dt><dd><p>print(Sequence, Sequence Tokens, Target Tags, Target Slots, Predicted Tags, Predicted Slots)</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.modules.html\" class=\"btn btn-neutral float-right\" title=\"claf.modules package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.model.sequence_classification.html\" class=\"btn btn-neutral\" title=\"claf.model.sequence_classification package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.modules.attention.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.attention package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.modules.conv package\" href=\"claf.modules.conv.html\" />\n    <link rel=\"prev\" title=\"claf.modules package\" href=\"claf.modules.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.modules.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.modules.attention package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.modules.attention.bi_attention\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.modules.attention\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.conv.html\">claf.modules.conv package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.encoder.html\">claf.modules.encoder package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.layer.html\">claf.modules.layer package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules.activation\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.modules.html\">claf.modules package</a> &raquo;</li>\n        \n      <li>claf.modules.attention package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.modules.attention.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-modules-attention-package\">\n<h1>claf.modules.attention package<a class=\"headerlink\" href=\"#claf-modules-attention-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.modules.attention.bi_attention\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.modules.attention.bi_attention\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.modules.attention.bi_attention.BiAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.bi_attention.</code><code class=\"sig-name descname\">BiAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_dim</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/bi_attention.html#BiAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.bi_attention.BiAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>Attention Flow Layer</dt><dd><p>in BiDAF (<a class=\"reference external\" href=\"https://arxiv.org/pdf/1611.01603.pdf\">https://arxiv.org/pdf/1611.01603.pdf</a>)</p>\n</dd>\n</dl>\n<p>The Similarity matrix\nContext-to-query Attention (C2Q)\nQuery-to-context Attention (Q2C)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>model_dim: The number of module dimension</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.bi_attention.BiAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">context_mask</em>, <em class=\"sig-param\">query</em>, <em class=\"sig-param\">query_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/bi_attention.html#BiAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.bi_attention.BiAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.attention.co_attention\"></span><dl class=\"class\">\n<dt id=\"claf.modules.attention.co_attention.CoAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.co_attention.</code><code class=\"sig-name descname\">CoAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/co_attention.html#CoAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.co_attention.CoAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>CoAttention encoder</dt><dd><p>in Dynamic Coattention Networks For Question Answering (<a class=\"reference external\" href=\"https://arxiv.org/abs/1611.01604\">https://arxiv.org/abs/1611.01604</a>)</p>\n</dd>\n</dl>\n<p>check the Figure 2 in paper</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>embed_dim: the number of input embedding dimension</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.co_attention.CoAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">context_embed</em>, <em class=\"sig-param\">question_embed</em>, <em class=\"sig-param\">context_mask=None</em>, <em class=\"sig-param\">question_mask=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/co_attention.html#CoAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.co_attention.CoAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.attention.docqa_attention\"></span><dl class=\"class\">\n<dt id=\"claf.modules.attention.docqa_attention.DocQAAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.docqa_attention.</code><code class=\"sig-name descname\">DocQAAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">rnn_dim</em>, <em class=\"sig-param\">linear_dim</em>, <em class=\"sig-param\">self_attn=False</em>, <em class=\"sig-param\">weight_init=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/docqa_attention.html#DocQAAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.docqa_attention.DocQAAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>Bi-Attention Layer + (Self-Attention)</dt><dd><p>in DocumentQA (<a class=\"reference external\" href=\"https://arxiv.org/abs/1710.10723\">https://arxiv.org/abs/1710.10723</a>)</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>rnn_dim: the number of GRU cell hidden size\nlinear_dim: the number of linear hidden size</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>self_attn: (bool) self-attention\nweight_init: (bool) weight initialization</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.docqa_attention.DocQAAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">x_mask</em>, <em class=\"sig-param\">key</em>, <em class=\"sig-param\">key_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/docqa_attention.html#DocQAAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.docqa_attention.DocQAAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.attention.multi_head_attention\"></span><dl class=\"class\">\n<dt id=\"claf.modules.attention.multi_head_attention.MultiHeadAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.multi_head_attention.</code><code class=\"sig-name descname\">MultiHeadAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">num_head=8</em>, <em class=\"sig-param\">model_dim=100</em>, <em class=\"sig-param\">dropout=0.1</em>, <em class=\"sig-param\">linear_key_dim=None</em>, <em class=\"sig-param\">linear_value_dim=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/multi_head_attention.html#MultiHeadAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.multi_head_attention.MultiHeadAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>Transformer’s Multi-Head Attention</dt><dd><p>in “Attention is All You Need” (<a class=\"reference external\" href=\"https://arxiv.org/abs/1706.03762\">https://arxiv.org/abs/1706.03762</a>)</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>num_head: the number of Head\nmodel_dim: the number of model dimension\nlinear_key_dim: the number of linear key dimemsion\nlinear_value_dim: the number of linear value dimension</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.multi_head_attention.MultiHeadAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">q</em>, <em class=\"sig-param\">k</em>, <em class=\"sig-param\">v</em>, <em class=\"sig-param\">mask=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/multi_head_attention.html#MultiHeadAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.multi_head_attention.MultiHeadAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.attention.seq_attention\"></span><p>original code from: <a class=\"reference external\" href=\"https://github.com/facebookresearch/DrQA/blob/master/drqa/reader/layers.py\">https://github.com/facebookresearch/DrQA/blob/master/drqa/reader/layers.py</a></p>\n<dl class=\"class\">\n<dt id=\"claf.modules.attention.seq_attention.BilinearSeqAttn\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.seq_attention.</code><code class=\"sig-name descname\">BilinearSeqAttn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x_size</em>, <em class=\"sig-param\">y_size</em>, <em class=\"sig-param\">identity=False</em>, <em class=\"sig-param\">normalize=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#BilinearSeqAttn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.seq_attention.BilinearSeqAttn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>A bilinear attention layer over a sequence X w.r.t y:\n* o_i = softmax(x_i’Wy) for x_i in X.\nOptionally don’t normalize output weights.</p>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.seq_attention.BilinearSeqAttn.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">y</em>, <em class=\"sig-param\">x_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#BilinearSeqAttn.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.seq_attention.BilinearSeqAttn.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.attention.seq_attention.LinearSeqAttn\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.seq_attention.</code><code class=\"sig-name descname\">LinearSeqAttn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#LinearSeqAttn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.seq_attention.LinearSeqAttn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Self attention over a sequence:\n* o_i = softmax(Wx_i) for x_i in X.</p>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.seq_attention.LinearSeqAttn.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">x_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#LinearSeqAttn.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.seq_attention.LinearSeqAttn.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.attention.seq_attention.SeqAttnMatch\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.seq_attention.</code><code class=\"sig-name descname\">SeqAttnMatch</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">identity=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#SeqAttnMatch\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.seq_attention.SeqAttnMatch\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Given sequences X and Y, match sequence Y to each element in X.\n* o_i = sum(alpha_j * y_j) for i in X\n* alpha_j = softmax(y_j * x_i)</p>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.seq_attention.SeqAttnMatch.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">y</em>, <em class=\"sig-param\">y_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#SeqAttnMatch.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.seq_attention.SeqAttnMatch.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.modules.attention\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.modules.attention\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.modules.attention.BiAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.</code><code class=\"sig-name descname\">BiAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_dim</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/bi_attention.html#BiAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.BiAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>Attention Flow Layer</dt><dd><p>in BiDAF (<a class=\"reference external\" href=\"https://arxiv.org/pdf/1611.01603.pdf\">https://arxiv.org/pdf/1611.01603.pdf</a>)</p>\n</dd>\n</dl>\n<p>The Similarity matrix\nContext-to-query Attention (C2Q)\nQuery-to-context Attention (Q2C)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>model_dim: The number of module dimension</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.BiAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">context_mask</em>, <em class=\"sig-param\">query</em>, <em class=\"sig-param\">query_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/bi_attention.html#BiAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.BiAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.attention.CoAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.</code><code class=\"sig-name descname\">CoAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/co_attention.html#CoAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.CoAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>CoAttention encoder</dt><dd><p>in Dynamic Coattention Networks For Question Answering (<a class=\"reference external\" href=\"https://arxiv.org/abs/1611.01604\">https://arxiv.org/abs/1611.01604</a>)</p>\n</dd>\n</dl>\n<p>check the Figure 2 in paper</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>embed_dim: the number of input embedding dimension</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.CoAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">context_embed</em>, <em class=\"sig-param\">question_embed</em>, <em class=\"sig-param\">context_mask=None</em>, <em class=\"sig-param\">question_mask=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/co_attention.html#CoAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.CoAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.attention.MultiHeadAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.</code><code class=\"sig-name descname\">MultiHeadAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">num_head=8</em>, <em class=\"sig-param\">model_dim=100</em>, <em class=\"sig-param\">dropout=0.1</em>, <em class=\"sig-param\">linear_key_dim=None</em>, <em class=\"sig-param\">linear_value_dim=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/multi_head_attention.html#MultiHeadAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.MultiHeadAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>Transformer’s Multi-Head Attention</dt><dd><p>in “Attention is All You Need” (<a class=\"reference external\" href=\"https://arxiv.org/abs/1706.03762\">https://arxiv.org/abs/1706.03762</a>)</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>num_head: the number of Head\nmodel_dim: the number of model dimension\nlinear_key_dim: the number of linear key dimemsion\nlinear_value_dim: the number of linear value dimension</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.MultiHeadAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">q</em>, <em class=\"sig-param\">k</em>, <em class=\"sig-param\">v</em>, <em class=\"sig-param\">mask=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/multi_head_attention.html#MultiHeadAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.MultiHeadAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.attention.DocQAAttention\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.</code><code class=\"sig-name descname\">DocQAAttention</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">rnn_dim</em>, <em class=\"sig-param\">linear_dim</em>, <em class=\"sig-param\">self_attn=False</em>, <em class=\"sig-param\">weight_init=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/docqa_attention.html#DocQAAttention\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.DocQAAttention\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>Bi-Attention Layer + (Self-Attention)</dt><dd><p>in DocumentQA (<a class=\"reference external\" href=\"https://arxiv.org/abs/1710.10723\">https://arxiv.org/abs/1710.10723</a>)</p>\n</dd>\n</dl>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>rnn_dim: the number of GRU cell hidden size\nlinear_dim: the number of linear hidden size</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>self_attn: (bool) self-attention\nweight_init: (bool) weight initialization</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.DocQAAttention.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">x_mask</em>, <em class=\"sig-param\">key</em>, <em class=\"sig-param\">key_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/docqa_attention.html#DocQAAttention.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.DocQAAttention.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.attention.SeqAttnMatch\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.</code><code class=\"sig-name descname\">SeqAttnMatch</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">identity=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#SeqAttnMatch\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.SeqAttnMatch\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Given sequences X and Y, match sequence Y to each element in X.\n* o_i = sum(alpha_j * y_j) for i in X\n* alpha_j = softmax(y_j * x_i)</p>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.SeqAttnMatch.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">y</em>, <em class=\"sig-param\">y_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#SeqAttnMatch.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.SeqAttnMatch.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.attention.LinearSeqAttn\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.</code><code class=\"sig-name descname\">LinearSeqAttn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#LinearSeqAttn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.LinearSeqAttn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Self attention over a sequence:\n* o_i = softmax(Wx_i) for x_i in X.</p>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.LinearSeqAttn.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">x_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#LinearSeqAttn.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.LinearSeqAttn.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.attention.BilinearSeqAttn\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.attention.</code><code class=\"sig-name descname\">BilinearSeqAttn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x_size</em>, <em class=\"sig-param\">y_size</em>, <em class=\"sig-param\">identity=False</em>, <em class=\"sig-param\">normalize=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#BilinearSeqAttn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.BilinearSeqAttn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>A bilinear attention layer over a sequence X w.r.t y:\n* o_i = softmax(x_i’Wy) for x_i in X.\nOptionally don’t normalize output weights.</p>\n<dl class=\"method\">\n<dt id=\"claf.modules.attention.BilinearSeqAttn.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">y</em>, <em class=\"sig-param\">x_mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/attention/seq_attention.html#BilinearSeqAttn.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.attention.BilinearSeqAttn.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.modules.conv.html\" class=\"btn btn-neutral float-right\" title=\"claf.modules.conv package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.modules.html\" class=\"btn btn-neutral\" title=\"claf.modules package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.modules.conv.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.conv package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.modules.encoder package\" href=\"claf.modules.encoder.html\" />\n    <link rel=\"prev\" title=\"claf.modules.attention package\" href=\"claf.modules.attention.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.modules.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.attention.html\">claf.modules.attention package</a></li>\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.modules.conv package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.modules.conv.depthwise_separable_conv\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.modules.conv\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.encoder.html\">claf.modules.encoder package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.layer.html\">claf.modules.layer package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules.activation\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.modules.html\">claf.modules package</a> &raquo;</li>\n        \n      <li>claf.modules.conv package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.modules.conv.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-modules-conv-package\">\n<h1>claf.modules.conv package<a class=\"headerlink\" href=\"#claf-modules-conv-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.modules.conv.depthwise_separable_conv\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.modules.conv.depthwise_separable_conv\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.modules.conv.depthwise_separable_conv.DepSepConv\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.conv.depthwise_separable_conv.</code><code class=\"sig-name descname\">DepSepConv</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size=None</em>, <em class=\"sig-param\">num_filters=None</em>, <em class=\"sig-param\">kernel_size=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/conv/depthwise_separable_conv.html#DepSepConv\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.conv.depthwise_separable_conv.DepSepConv\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>Depthwise Separable Convolutions</dt><dd><p>in Xception: Deep Learning with Depthwise Separable Convolutions (<a class=\"reference external\" href=\"https://arxiv.org/abs/1610.02357\">https://arxiv.org/abs/1610.02357</a>)</p>\n</dd>\n</dl>\n<p>depthwise -&gt; pointwise (1x1 conv)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>input_size: the number of input tensor’s dimension\nnum_filters: the number of convolution filter\nkernel_size: the number of convolution kernel size</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.conv.depthwise_separable_conv.DepSepConv.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/conv/depthwise_separable_conv.html#DepSepConv.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.conv.depthwise_separable_conv.DepSepConv.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.conv.pointwise_conv\"></span><dl class=\"class\">\n<dt id=\"claf.modules.conv.pointwise_conv.PointwiseConv\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.conv.pointwise_conv.</code><code class=\"sig-name descname\">PointwiseConv</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size</em>, <em class=\"sig-param\">num_filters</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/conv/pointwise_conv.html#PointwiseConv\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.conv.pointwise_conv.PointwiseConv\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Pointwise Convolution (1x1 Conv)</p>\n<p>Convolution 1 Dimension (Faster version)\n(cf. <a class=\"reference external\" href=\"https://github.com/huggingface/pytorch-openai-transformer-lm/blob/\">https://github.com/huggingface/pytorch-openai-transformer-lm/blob/</a>        eafc28abdfadfa0732f03a0fc65805c5bfb2ffe7/model_pytorch.py#L45)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>input_size: the number of input tensor’s dimension\nnum_filters: the number of convolution filter</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.conv.pointwise_conv.PointwiseConv.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/conv/pointwise_conv.html#PointwiseConv.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.conv.pointwise_conv.PointwiseConv.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.modules.conv\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.modules.conv\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.modules.conv.DepSepConv\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.conv.</code><code class=\"sig-name descname\">DepSepConv</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size=None</em>, <em class=\"sig-param\">num_filters=None</em>, <em class=\"sig-param\">kernel_size=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/conv/depthwise_separable_conv.html#DepSepConv\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.conv.DepSepConv\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>Depthwise Separable Convolutions</dt><dd><p>in Xception: Deep Learning with Depthwise Separable Convolutions (<a class=\"reference external\" href=\"https://arxiv.org/abs/1610.02357\">https://arxiv.org/abs/1610.02357</a>)</p>\n</dd>\n</dl>\n<p>depthwise -&gt; pointwise (1x1 conv)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>input_size: the number of input tensor’s dimension\nnum_filters: the number of convolution filter\nkernel_size: the number of convolution kernel size</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.conv.DepSepConv.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/conv/depthwise_separable_conv.html#DepSepConv.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.conv.DepSepConv.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.conv.PointwiseConv\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.conv.</code><code class=\"sig-name descname\">PointwiseConv</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size</em>, <em class=\"sig-param\">num_filters</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/conv/pointwise_conv.html#PointwiseConv\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.conv.PointwiseConv\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Pointwise Convolution (1x1 Conv)</p>\n<p>Convolution 1 Dimension (Faster version)\n(cf. <a class=\"reference external\" href=\"https://github.com/huggingface/pytorch-openai-transformer-lm/blob/\">https://github.com/huggingface/pytorch-openai-transformer-lm/blob/</a>        eafc28abdfadfa0732f03a0fc65805c5bfb2ffe7/model_pytorch.py#L45)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>input_size: the number of input tensor’s dimension\nnum_filters: the number of convolution filter</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.conv.PointwiseConv.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/conv/pointwise_conv.html#PointwiseConv.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.conv.PointwiseConv.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.modules.encoder.html\" class=\"btn btn-neutral float-right\" title=\"claf.modules.encoder package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.modules.attention.html\" class=\"btn btn-neutral\" title=\"claf.modules.attention package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.modules.encoder.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.encoder package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.modules.layer package\" href=\"claf.modules.layer.html\" />\n    <link rel=\"prev\" title=\"claf.modules.conv package\" href=\"claf.modules.conv.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.modules.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.attention.html\">claf.modules.attention package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.conv.html\">claf.modules.conv package</a></li>\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.modules.encoder package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.modules.encoder.lstm_cell_with_projection\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.modules.encoder\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.layer.html\">claf.modules.layer package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules.activation\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.modules.html\">claf.modules package</a> &raquo;</li>\n        \n      <li>claf.modules.encoder package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.modules.encoder.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-modules-encoder-package\">\n<h1>claf.modules.encoder package<a class=\"headerlink\" href=\"#claf-modules-encoder-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.modules.encoder.lstm_cell_with_projection\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.modules.encoder.lstm_cell_with_projection\" title=\"Permalink to this headline\">¶</a></h2>\n<p>This code is from allenai/allennlp\n(<a class=\"reference external\" href=\"https://github.com/allenai/allennlp/blob/master/allennlp/modules/lstm_cell_with_projection.py\">https://github.com/allenai/allennlp/blob/master/allennlp/modules/lstm_cell_with_projection.py</a>)</p>\n<dl class=\"class\">\n<dt id=\"claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.encoder.lstm_cell_with_projection.</code><code class=\"sig-name descname\">LstmCellWithProjection</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size: int</em>, <em class=\"sig-param\">hidden_size: int</em>, <em class=\"sig-param\">cell_size: int</em>, <em class=\"sig-param\">go_forward: bool = True</em>, <em class=\"sig-param\">recurrent_dropout_probability: float = 0.0</em>, <em class=\"sig-param\">memory_cell_clip_value: Optional[float] = None</em>, <em class=\"sig-param\">state_projection_clip_value: Optional[float] = None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/lstm_cell_with_projection.html#LstmCellWithProjection\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>An LSTM with Recurrent Dropout and a projected and clipped hidden state and\nmemory. Note: this implementation is slower than the native Pytorch LSTM because\nit cannot make use of CUDNN optimizations for stacked RNNs due to and\nvariational dropout and the custom nature of the cell state.\nParameters\n———-\ninput_size : <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, required.</p>\n<blockquote>\n<div><p>The dimension of the inputs to the LSTM.</p>\n</div></blockquote>\n<dl>\n<dt>hidden_size<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, required.</span></dt><dd><p>The dimension of the outputs of the LSTM.</p>\n</dd>\n<dt>cell_size<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, required.</span></dt><dd><p>The dimension of the memory cell used for the LSTM.</p>\n</dd>\n<dt>go_forward: <code class=\"docutils literal notranslate\"><span class=\"pre\">bool</span></code>, optional (default = True)</dt><dd><p>The direction in which the LSTM is applied to the sequence.\nForwards by default, or backwards if False.</p>\n</dd>\n<dt>recurrent_dropout_probability: <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>, optional (default = 0.0)</dt><dd><p>The dropout probability to be used in a dropout scheme as stated in\n<a class=\"reference external\" href=\"https://arxiv.org/abs/1512.05287\">A Theoretically Grounded Application of Dropout in Recurrent Neural Networks</a> . Implementation wise, this simply\napplies a fixed dropout mask per sequence to the recurrent connection of the\nLSTM.</p>\n</dd>\n<dt>state_projection_clip_value: <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>, optional, (default = None)</dt><dd><p>The magnitude with which to clip the hidden_state after projecting it.</p>\n</dd>\n<dt>memory_cell_clip_value: <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>, optional, (default = None)</dt><dd><p>The magnitude with which to clip the memory cell.</p>\n</dd>\n</dl>\n<dl>\n<dt>output_accumulator<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.FloatTensor</span></code></span></dt><dd><p>The outputs of the LSTM for each timestep. A tensor of shape\n(batch_size, max_timesteps, hidden_size) where for a given batch\nelement, all outputs past the sequence length for that batch are\nzero tensors.</p>\n</dd>\n<dt>final_state: <code class=\"docutils literal notranslate\"><span class=\"pre\">Tuple[torch.FloatTensor,</span> <span class=\"pre\">torch.FloatTensor]</span></code></dt><dd><p>The final (state, memory) states of the LSTM, with shape\n(1, batch_size, hidden_size) and  (1, batch_size, cell_size)\nrespectively. The first dimension is 1 in order to match the Pytorch\nAPI for returning stacked LSTM states.</p>\n</dd>\n</dl>\n<dl class=\"method\">\n<dt id=\"claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs: torch.FloatTensor, batch_lengths: List[int], initial_state: Optional[Tuple[torch.Tensor, torch.Tensor]] = None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/lstm_cell_with_projection.html#LstmCellWithProjection.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><dl>\n<dt>inputs<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.FloatTensor</span></code>, required.</span></dt><dd><p>A tensor of shape (batch_size, num_timesteps, input_size)\nto apply the LSTM over.</p>\n</dd>\n<dt>batch_lengths<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">List[int]</span></code>, required.</span></dt><dd><p>A list of length batch_size containing the lengths of the sequences in batch.</p>\n</dd>\n<dt>initial_state<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Tuple[torch.Tensor,</span> <span class=\"pre\">torch.Tensor]</span></code>, optional, (default = None)</span></dt><dd><p>A tuple (state, memory) representing the initial hidden state and memory\nof the LSTM. The <code class=\"docutils literal notranslate\"><span class=\"pre\">state</span></code> has shape (1, batch_size, hidden_size) and the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">memory</span></code> has shape (1, batch_size, cell_size).</p>\n</dd>\n</dl>\n<dl>\n<dt>output_accumulator<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.FloatTensor</span></code></span></dt><dd><p>The outputs of the LSTM for each timestep. A tensor of shape\n(batch_size, max_timesteps, hidden_size) where for a given batch\nelement, all outputs past the sequence length for that batch are\nzero tensors.</p>\n</dd>\n<dt>final_state<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Tuple[``torch.FloatTensor,</span> <span class=\"pre\">torch.FloatTensor]</span></code></span></dt><dd><p>A tuple (state, memory) representing the initial hidden state and memory\nof the LSTM. The <code class=\"docutils literal notranslate\"><span class=\"pre\">state</span></code> has shape (1, batch_size, hidden_size) and the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">memory</span></code> has shape (1, batch_size, cell_size).</p>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection.reset_parameters\">\n<code class=\"sig-name descname\">reset_parameters</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/lstm_cell_with_projection.html#LstmCellWithProjection.reset_parameters\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection.reset_parameters\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.modules.encoder.lstm_cell_with_projection.block_orthogonal\">\n<code class=\"sig-prename descclassname\">claf.modules.encoder.lstm_cell_with_projection.</code><code class=\"sig-name descname\">block_orthogonal</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tensor: torch.Tensor, split_sizes: List[int], gain: float = 1.0</em><span class=\"sig-paren\">)</span> &#x2192; None<a class=\"reference internal\" href=\"_modules/claf/modules/encoder/lstm_cell_with_projection.html#block_orthogonal\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.lstm_cell_with_projection.block_orthogonal\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>An initializer which allows initializing model parameters in “blocks”. This is helpful\nin the case of recurrent models which use multiple gates applied to linear projections,\nwhich can be computed efficiently if they are concatenated together. However, they are\nseparate parameters which should be initialized independently.\nParameters\n———-\ntensor : <code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code>, required.</p>\n<blockquote>\n<div><p>A tensor to initialize.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>split_sizes<span class=\"classifier\">List[int], required.</span></dt><dd><p>A list of length <code class=\"docutils literal notranslate\"><span class=\"pre\">tensor.ndim()</span></code> specifying the size of the\nblocks along that particular dimension. E.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">[10,</span> <span class=\"pre\">20]</span></code> would\nresult in the tensor being split into chunks of size 10 along the\nfirst dimension and 20 along the second.</p>\n</dd>\n<dt>gain<span class=\"classifier\">float, optional (default = 1.0)</span></dt><dd><p>The gain (scaling) applied to the orthogonal initialization.</p>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.modules.encoder.lstm_cell_with_projection.get_dropout_mask\">\n<code class=\"sig-prename descclassname\">claf.modules.encoder.lstm_cell_with_projection.</code><code class=\"sig-name descname\">get_dropout_mask</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dropout_probability: float</em>, <em class=\"sig-param\">tensor_for_masking: torch.Tensor</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/lstm_cell_with_projection.html#get_dropout_mask\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.lstm_cell_with_projection.get_dropout_mask\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Computes and returns an element-wise dropout mask for a given tensor, where\neach element in the mask is dropped out with probability dropout_probability.\nNote that the mask is NOT applied to the tensor - the tensor is passed to retain\nthe correct CUDA tensor type for the mask.\nParameters\n———-\ndropout_probability : float, required.</p>\n<blockquote>\n<div><p>Probability of dropping a dimension of the input.</p>\n</div></blockquote>\n<p>tensor_for_masking : torch.Tensor, required.\nReturns\n——-\nA torch.FloatTensor consisting of the binary mask scaled by 1/ (1 - dropout_probability).\nThis scaling ensures expected values and variances of the output of applying this mask</p>\n<blockquote>\n<div><p>and the original tensor are the same.</p>\n</div></blockquote>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.modules.encoder.lstm_cell_with_projection.sort_batch_by_length\">\n<code class=\"sig-prename descclassname\">claf.modules.encoder.lstm_cell_with_projection.</code><code class=\"sig-name descname\">sort_batch_by_length</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tensor: torch.Tensor</em>, <em class=\"sig-param\">sequence_lengths: torch.Tensor</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/lstm_cell_with_projection.html#sort_batch_by_length\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.lstm_cell_with_projection.sort_batch_by_length\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Sort a batch first tensor by some specified lengths.\nParameters\n———-\ntensor : torch.FloatTensor, required.</p>\n<blockquote>\n<div><p>A batch first Pytorch tensor.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>sequence_lengths<span class=\"classifier\">torch.LongTensor, required.</span></dt><dd><p>A tensor representing the lengths of some dimension of the tensor which\nwe want to sort by.</p>\n</dd>\n</dl>\n<dl class=\"simple\">\n<dt>sorted_tensor<span class=\"classifier\">torch.FloatTensor</span></dt><dd><p>The original tensor sorted along the batch dimension with respect to sequence_lengths.</p>\n</dd>\n<dt>sorted_sequence_lengths<span class=\"classifier\">torch.LongTensor</span></dt><dd><p>The original sequence_lengths sorted by decreasing size.</p>\n</dd>\n<dt>restoration_indices<span class=\"classifier\">torch.LongTensor</span></dt><dd><p>Indices into the sorted_tensor such that\n<code class=\"docutils literal notranslate\"><span class=\"pre\">sorted_tensor.index_select(0,</span> <span class=\"pre\">restoration_indices)</span> <span class=\"pre\">==</span> <span class=\"pre\">original_tensor</span></code></p>\n</dd>\n<dt>permuation_index<span class=\"classifier\">torch.LongTensor</span></dt><dd><p>The indices used to sort the tensor. This is useful if you want to sort many\ntensors using the same ordering.</p>\n</dd>\n</dl>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.encoder.positional\"></span><dl class=\"class\">\n<dt id=\"claf.modules.encoder.positional.PositionalEncoding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.encoder.positional.</code><code class=\"sig-name descname\">PositionalEncoding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">max_length=2000</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/positional.html#PositionalEncoding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.positional.PositionalEncoding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>Positional Encoding</dt><dd><p>in “Attention is All You Need” (<a class=\"reference external\" href=\"https://arxiv.org/abs/1706.03762\">https://arxiv.org/abs/1706.03762</a>)</p>\n</dd>\n</dl>\n<p>The use of relative position is possible because sin(x+y) and cos(x+y) can be\nexpressed in terms of y, sin(x) and cos(x).</p>\n<p>(cf. <a class=\"reference external\" href=\"https://github.com/tensorflow/tensor2tensor/blob/42c3f377f441e5a0f431127d63e71414ead291c4/\">https://github.com/tensorflow/tensor2tensor/blob/42c3f377f441e5a0f431127d63e71414ead291c4/</a>        tensor2tensor/layers/common_attention.py#L388)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>embed_dim: the number of embedding dimension</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>max_len: the number of maximum sequence length</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.encoder.positional.PositionalEncoding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/positional.html#PositionalEncoding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.positional.PositionalEncoding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.modules.encoder\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.modules.encoder\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.modules.encoder.PositionalEncoding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.encoder.</code><code class=\"sig-name descname\">PositionalEncoding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embed_dim</em>, <em class=\"sig-param\">max_length=2000</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/positional.html#PositionalEncoding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.PositionalEncoding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"simple\">\n<dt>Positional Encoding</dt><dd><p>in “Attention is All You Need” (<a class=\"reference external\" href=\"https://arxiv.org/abs/1706.03762\">https://arxiv.org/abs/1706.03762</a>)</p>\n</dd>\n</dl>\n<p>The use of relative position is possible because sin(x+y) and cos(x+y) can be\nexpressed in terms of y, sin(x) and cos(x).</p>\n<p>(cf. <a class=\"reference external\" href=\"https://github.com/tensorflow/tensor2tensor/blob/42c3f377f441e5a0f431127d63e71414ead291c4/\">https://github.com/tensorflow/tensor2tensor/blob/42c3f377f441e5a0f431127d63e71414ead291c4/</a>        tensor2tensor/layers/common_attention.py#L388)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>embed_dim: the number of embedding dimension</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>max_len: the number of maximum sequence length</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.encoder.PositionalEncoding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/positional.html#PositionalEncoding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.PositionalEncoding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.encoder.LstmCellWithProjection\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.encoder.</code><code class=\"sig-name descname\">LstmCellWithProjection</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size: int</em>, <em class=\"sig-param\">hidden_size: int</em>, <em class=\"sig-param\">cell_size: int</em>, <em class=\"sig-param\">go_forward: bool = True</em>, <em class=\"sig-param\">recurrent_dropout_probability: float = 0.0</em>, <em class=\"sig-param\">memory_cell_clip_value: Optional[float] = None</em>, <em class=\"sig-param\">state_projection_clip_value: Optional[float] = None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/lstm_cell_with_projection.html#LstmCellWithProjection\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.LstmCellWithProjection\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>An LSTM with Recurrent Dropout and a projected and clipped hidden state and\nmemory. Note: this implementation is slower than the native Pytorch LSTM because\nit cannot make use of CUDNN optimizations for stacked RNNs due to and\nvariational dropout and the custom nature of the cell state.\nParameters\n———-\ninput_size : <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, required.</p>\n<blockquote>\n<div><p>The dimension of the inputs to the LSTM.</p>\n</div></blockquote>\n<dl>\n<dt>hidden_size<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, required.</span></dt><dd><p>The dimension of the outputs of the LSTM.</p>\n</dd>\n<dt>cell_size<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, required.</span></dt><dd><p>The dimension of the memory cell used for the LSTM.</p>\n</dd>\n<dt>go_forward: <code class=\"docutils literal notranslate\"><span class=\"pre\">bool</span></code>, optional (default = True)</dt><dd><p>The direction in which the LSTM is applied to the sequence.\nForwards by default, or backwards if False.</p>\n</dd>\n<dt>recurrent_dropout_probability: <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>, optional (default = 0.0)</dt><dd><p>The dropout probability to be used in a dropout scheme as stated in\n<a class=\"reference external\" href=\"https://arxiv.org/abs/1512.05287\">A Theoretically Grounded Application of Dropout in Recurrent Neural Networks</a> . Implementation wise, this simply\napplies a fixed dropout mask per sequence to the recurrent connection of the\nLSTM.</p>\n</dd>\n<dt>state_projection_clip_value: <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>, optional, (default = None)</dt><dd><p>The magnitude with which to clip the hidden_state after projecting it.</p>\n</dd>\n<dt>memory_cell_clip_value: <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>, optional, (default = None)</dt><dd><p>The magnitude with which to clip the memory cell.</p>\n</dd>\n</dl>\n<dl>\n<dt>output_accumulator<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.FloatTensor</span></code></span></dt><dd><p>The outputs of the LSTM for each timestep. A tensor of shape\n(batch_size, max_timesteps, hidden_size) where for a given batch\nelement, all outputs past the sequence length for that batch are\nzero tensors.</p>\n</dd>\n<dt>final_state: <code class=\"docutils literal notranslate\"><span class=\"pre\">Tuple[torch.FloatTensor,</span> <span class=\"pre\">torch.FloatTensor]</span></code></dt><dd><p>The final (state, memory) states of the LSTM, with shape\n(1, batch_size, hidden_size) and  (1, batch_size, cell_size)\nrespectively. The first dimension is 1 in order to match the Pytorch\nAPI for returning stacked LSTM states.</p>\n</dd>\n</dl>\n<dl class=\"method\">\n<dt id=\"claf.modules.encoder.LstmCellWithProjection.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs: torch.FloatTensor, batch_lengths: List[int], initial_state: Optional[Tuple[torch.Tensor, torch.Tensor]] = None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/lstm_cell_with_projection.html#LstmCellWithProjection.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.LstmCellWithProjection.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><dl>\n<dt>inputs<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.FloatTensor</span></code>, required.</span></dt><dd><p>A tensor of shape (batch_size, num_timesteps, input_size)\nto apply the LSTM over.</p>\n</dd>\n<dt>batch_lengths<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">List[int]</span></code>, required.</span></dt><dd><p>A list of length batch_size containing the lengths of the sequences in batch.</p>\n</dd>\n<dt>initial_state<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Tuple[torch.Tensor,</span> <span class=\"pre\">torch.Tensor]</span></code>, optional, (default = None)</span></dt><dd><p>A tuple (state, memory) representing the initial hidden state and memory\nof the LSTM. The <code class=\"docutils literal notranslate\"><span class=\"pre\">state</span></code> has shape (1, batch_size, hidden_size) and the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">memory</span></code> has shape (1, batch_size, cell_size).</p>\n</dd>\n</dl>\n<dl>\n<dt>output_accumulator<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.FloatTensor</span></code></span></dt><dd><p>The outputs of the LSTM for each timestep. A tensor of shape\n(batch_size, max_timesteps, hidden_size) where for a given batch\nelement, all outputs past the sequence length for that batch are\nzero tensors.</p>\n</dd>\n<dt>final_state<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Tuple[``torch.FloatTensor,</span> <span class=\"pre\">torch.FloatTensor]</span></code></span></dt><dd><p>A tuple (state, memory) representing the initial hidden state and memory\nof the LSTM. The <code class=\"docutils literal notranslate\"><span class=\"pre\">state</span></code> has shape (1, batch_size, hidden_size) and the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">memory</span></code> has shape (1, batch_size, cell_size).</p>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.modules.encoder.LstmCellWithProjection.reset_parameters\">\n<code class=\"sig-name descname\">reset_parameters</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/encoder/lstm_cell_with_projection.html#LstmCellWithProjection.reset_parameters\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.encoder.LstmCellWithProjection.reset_parameters\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.modules.layer.html\" class=\"btn btn-neutral float-right\" title=\"claf.modules.layer package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.modules.conv.html\" class=\"btn btn-neutral\" title=\"claf.modules.conv package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.modules.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.modules.attention package\" href=\"claf.modules.attention.html\" />\n    <link rel=\"prev\" title=\"claf.model.token_classification package\" href=\"claf.model.token_classification.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">modules</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.attention.html\">claf.modules.attention package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.conv.html\">claf.modules.conv package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.encoder.html\">claf.modules.encoder package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.layer.html\">claf.modules.layer package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.modules.activation\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.modules\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf.modules package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.modules.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-modules-package\">\n<h1>claf.modules package<a class=\"headerlink\" href=\"#claf-modules-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"subpackages\">\n<h2>Subpackages<a class=\"headerlink\" href=\"#subpackages\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.attention.html\">claf.modules.attention package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.attention.html#module-claf.modules.attention.bi_attention\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.attention.html#module-claf.modules.attention\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.conv.html\">claf.modules.conv package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.conv.html#module-claf.modules.conv.depthwise_separable_conv\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.conv.html#module-claf.modules.conv\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.encoder.html\">claf.modules.encoder package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.encoder.html#module-claf.modules.encoder.lstm_cell_with_projection\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.encoder.html#module-claf.modules.encoder\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.layer.html\">claf.modules.layer package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.layer.html#module-claf.modules.layer.highway\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.layer.html#module-claf.modules.layer\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"module-claf.modules.activation\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.modules.activation\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"function\">\n<dt id=\"claf.modules.activation.get_activation_fn\">\n<code class=\"sig-prename descclassname\">claf.modules.activation.</code><code class=\"sig-name descname\">get_activation_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/activation.html#get_activation_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.activation.get_activation_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>PyTorch built-in activation functions</p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.functional\"></span><p>some functional codes from allennlp: <a class=\"reference external\" href=\"https://github.com/allenai/allennlp\">https://github.com/allenai/allennlp</a></p>\n<ul class=\"simple\">\n<li><p>add_masked_value : replace_masked_values (allennlp)</p></li>\n<li><p>get_mask_from_tokens : get_mask_from_tokens (allennlp)</p></li>\n<li><p>last_dim_masked_softmax : last_dim_masked_softmax (allennlp)</p></li>\n<li><p>masked_softmax : masked_softmax (allennlp)</p></li>\n<li><p>weighted_sum : weighted_sum (allennlp)</p></li>\n</ul>\n<dl class=\"function\">\n<dt id=\"claf.modules.functional.add_masked_value\">\n<code class=\"sig-prename descclassname\">claf.modules.functional.</code><code class=\"sig-name descname\">add_masked_value</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tensor</em>, <em class=\"sig-param\">mask</em>, <em class=\"sig-param\">value=-10000000.0</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/functional.html#add_masked_value\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.functional.add_masked_value\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.modules.functional.forward_rnn_with_pack\">\n<code class=\"sig-prename descclassname\">claf.modules.functional.</code><code class=\"sig-name descname\">forward_rnn_with_pack</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">rnn_module</em>, <em class=\"sig-param\">tensor</em>, <em class=\"sig-param\">seq_config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/functional.html#forward_rnn_with_pack\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.functional.forward_rnn_with_pack\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.modules.functional.get_mask_from_tokens\">\n<code class=\"sig-prename descclassname\">claf.modules.functional.</code><code class=\"sig-name descname\">get_mask_from_tokens</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokens</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/functional.html#get_mask_from_tokens\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.functional.get_mask_from_tokens\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.modules.functional.get_sorted_seq_config\">\n<code class=\"sig-prename descclassname\">claf.modules.functional.</code><code class=\"sig-name descname\">get_sorted_seq_config</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">features</em>, <em class=\"sig-param\">pad_index=0</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/functional.html#get_sorted_seq_config\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.functional.get_sorted_seq_config\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.modules.functional.last_dim_masked_softmax\">\n<code class=\"sig-prename descclassname\">claf.modules.functional.</code><code class=\"sig-name descname\">last_dim_masked_softmax</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/functional.html#last_dim_masked_softmax\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.functional.last_dim_masked_softmax\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.modules.functional.masked_log_softmax\">\n<code class=\"sig-prename descclassname\">claf.modules.functional.</code><code class=\"sig-name descname\">masked_log_softmax</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vector</em>, <em class=\"sig-param\">mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/functional.html#masked_log_softmax\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.functional.masked_log_softmax\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.modules.functional.masked_softmax\">\n<code class=\"sig-prename descclassname\">claf.modules.functional.</code><code class=\"sig-name descname\">masked_softmax</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/functional.html#masked_softmax\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.functional.masked_softmax\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.modules.functional.masked_zero\">\n<code class=\"sig-prename descclassname\">claf.modules.functional.</code><code class=\"sig-name descname\">masked_zero</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tensor</em>, <em class=\"sig-param\">mask</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/functional.html#masked_zero\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.functional.masked_zero\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Tensor masking operation</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.modules.functional.weighted_sum\">\n<code class=\"sig-prename descclassname\">claf.modules.functional.</code><code class=\"sig-name descname\">weighted_sum</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">attention</em>, <em class=\"sig-param\">matrix</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/functional.html#weighted_sum\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.functional.weighted_sum\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.initializer\"></span><dl class=\"function\">\n<dt id=\"claf.modules.initializer.weight\">\n<code class=\"sig-prename descclassname\">claf.modules.initializer.</code><code class=\"sig-name descname\">weight</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">module</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/initializer.html#weight\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.initializer.weight\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>weight initialization (according to module type)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>module: torch.nn.Module</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.modules\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.modules\" title=\"Permalink to this headline\">¶</a></h2>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.modules.attention.html\" class=\"btn btn-neutral float-right\" title=\"claf.modules.attention package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.model.token_classification.html\" class=\"btn btn-neutral\" title=\"claf.model.token_classification package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.modules.layer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.modules.layer package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.tokens package\" href=\"claf.tokens.html\" />\n    <link rel=\"prev\" title=\"claf.modules.encoder package\" href=\"claf.modules.encoder.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.modules.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.attention.html\">claf.modules.attention package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.conv.html\">claf.modules.conv package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.encoder.html\">claf.modules.encoder package</a></li>\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.modules.layer package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.modules.layer.highway\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.modules.layer\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules.activation\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.modules.html\">claf.modules package</a> &raquo;</li>\n        \n      <li>claf.modules.layer package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.modules.layer.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-modules-layer-package\">\n<h1>claf.modules.layer package<a class=\"headerlink\" href=\"#claf-modules-layer-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.modules.layer.highway\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.modules.layer.highway\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.modules.layer.highway.Highway\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.layer.highway.</code><code class=\"sig-name descname\">Highway</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size</em>, <em class=\"sig-param\">num_layers=2</em>, <em class=\"sig-param\">activation='relu'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/highway.html#Highway\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.highway.Highway\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Highway Networks (<a class=\"reference external\" href=\"https://arxiv.org/abs/1505.00387\">https://arxiv.org/abs/1505.00387</a>)\n<a class=\"reference external\" href=\"https://github.com/allenai/allennlp/blob/master/allennlp/modules/highway.py\">https://github.com/allenai/allennlp/blob/master/allennlp/modules/highway.py</a></p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>input_size: The number of expected features in the input <cite>x</cite>\nnum_layers: The number of Highway layers.\nactivation: Activation Function (ReLU is default)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.layer.highway.Highway.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/highway.html#Highway.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.highway.Highway.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.layer.normalization\"></span><dl class=\"class\">\n<dt id=\"claf.modules.layer.normalization.LayerNorm\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.layer.normalization.</code><code class=\"sig-name descname\">LayerNorm</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">normalized_shape</em>, <em class=\"sig-param\">eps=1e-05</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/normalization.html#LayerNorm\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.normalization.LayerNorm\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Layer Normalization\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1607.06450\">https://arxiv.org/abs/1607.06450</a>)</p>\n<dl class=\"method\">\n<dt id=\"claf.modules.layer.normalization.LayerNorm.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/normalization.html#LayerNorm.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.normalization.LayerNorm.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.layer.positionwise\"></span><dl class=\"class\">\n<dt id=\"claf.modules.layer.positionwise.PositionwiseFeedForward\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.layer.positionwise.</code><code class=\"sig-name descname\">PositionwiseFeedForward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size</em>, <em class=\"sig-param\">hidden_size</em>, <em class=\"sig-param\">dropout=0.1</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/positionwise.html#PositionwiseFeedForward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.positionwise.PositionwiseFeedForward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Pointwise Feed-Forward Layer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>input_size: the number of input size\nhidden_size: the number of hidden size</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>dropout: the probability of dropout</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.layer.positionwise.PositionwiseFeedForward.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/positionwise.html#PositionwiseFeedForward.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.positionwise.PositionwiseFeedForward.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.layer.residual\"></span><dl class=\"class\">\n<dt id=\"claf.modules.layer.residual.ResidualConnection\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.layer.residual.</code><code class=\"sig-name descname\">ResidualConnection</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dim</em>, <em class=\"sig-param\">layer_dropout=None</em>, <em class=\"sig-param\">layernorm=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/residual.html#ResidualConnection\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.residual.ResidualConnection\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>in Deep Residual Learning for Image Recognition (<a class=\"reference external\" href=\"https://arxiv.org/abs/1512.03385\">https://arxiv.org/abs/1512.03385</a>)</p>\n<p>=&gt; f(x) + x</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>dim: the number of dimension</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>layer_dropout: layer dropout probability (stochastic depth)\ndropout: dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.layer.residual.ResidualConnection.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">sub_layer_fn</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/residual.html#ResidualConnection.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.residual.ResidualConnection.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.modules.layer.scalar_mix\"></span><p>This code is from allenai/allennlp\n(<a class=\"reference external\" href=\"https://github.com/allenai/allennlp/blob/master/allennlp/modules/scalar_mix.py\">https://github.com/allenai/allennlp/blob/master/allennlp/modules/scalar_mix.py</a>)</p>\n<dl class=\"class\">\n<dt id=\"claf.modules.layer.scalar_mix.ScalarMix\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.layer.scalar_mix.</code><code class=\"sig-name descname\">ScalarMix</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">mixture_size: int</em>, <em class=\"sig-param\">do_layer_norm: bool = False</em>, <em class=\"sig-param\">initial_scalar_parameters: List[float] = None</em>, <em class=\"sig-param\">trainable: bool = True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/scalar_mix.html#ScalarMix\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.scalar_mix.ScalarMix\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Computes a parameterised scalar mixture of N tensors, <code class=\"docutils literal notranslate\"><span class=\"pre\">mixture</span> <span class=\"pre\">=</span> <span class=\"pre\">gamma</span> <span class=\"pre\">*</span> <span class=\"pre\">sum(s_k</span> <span class=\"pre\">*</span> <span class=\"pre\">tensor_k)</span></code>\nwhere <code class=\"docutils literal notranslate\"><span class=\"pre\">s</span> <span class=\"pre\">=</span> <span class=\"pre\">softmax(w)</span></code>, with <code class=\"docutils literal notranslate\"><span class=\"pre\">w</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">gamma</span></code> scalar parameters.\nIn addition, if <code class=\"docutils literal notranslate\"><span class=\"pre\">do_layer_norm=True</span></code> then apply layer normalization to each tensor\nbefore weighting.</p>\n<dl class=\"method\">\n<dt id=\"claf.modules.layer.scalar_mix.ScalarMix.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tensors: List[torch.Tensor], mask: torch.Tensor = None</em><span class=\"sig-paren\">)</span> &#x2192; torch.Tensor<a class=\"reference internal\" href=\"_modules/claf/modules/layer/scalar_mix.html#ScalarMix.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.scalar_mix.ScalarMix.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Compute a weighted average of the <code class=\"docutils literal notranslate\"><span class=\"pre\">tensors</span></code>.  The input tensors an be any shape\nwith at least two dimensions, but must all be the same shape.\nWhen <code class=\"docutils literal notranslate\"><span class=\"pre\">do_layer_norm=True</span></code>, the <code class=\"docutils literal notranslate\"><span class=\"pre\">mask</span></code> is required input.  If the <code class=\"docutils literal notranslate\"><span class=\"pre\">tensors</span></code> are\ndimensioned  <code class=\"docutils literal notranslate\"><span class=\"pre\">(dim_0,</span> <span class=\"pre\">...,</span> <span class=\"pre\">dim_{n-1},</span> <span class=\"pre\">dim_n)</span></code>, then the <code class=\"docutils literal notranslate\"><span class=\"pre\">mask</span></code> is dimensioned\n<code class=\"docutils literal notranslate\"><span class=\"pre\">(dim_0,</span> <span class=\"pre\">...,</span> <span class=\"pre\">dim_{n-1})</span></code>, as in the typical case with <code class=\"docutils literal notranslate\"><span class=\"pre\">tensors</span></code> of shape\n<code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps,</span> <span class=\"pre\">dim)</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">mask</span></code> of shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps)</span></code>.\nWhen <code class=\"docutils literal notranslate\"><span class=\"pre\">do_layer_norm=False</span></code> the <code class=\"docutils literal notranslate\"><span class=\"pre\">mask</span></code> is ignored.</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.modules.layer\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.modules.layer\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.modules.layer.Highway\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.layer.</code><code class=\"sig-name descname\">Highway</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size</em>, <em class=\"sig-param\">num_layers=2</em>, <em class=\"sig-param\">activation='relu'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/highway.html#Highway\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.Highway\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Highway Networks (<a class=\"reference external\" href=\"https://arxiv.org/abs/1505.00387\">https://arxiv.org/abs/1505.00387</a>)\n<a class=\"reference external\" href=\"https://github.com/allenai/allennlp/blob/master/allennlp/modules/highway.py\">https://github.com/allenai/allennlp/blob/master/allennlp/modules/highway.py</a></p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>input_size: The number of expected features in the input <cite>x</cite>\nnum_layers: The number of Highway layers.\nactivation: Activation Function (ReLU is default)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.layer.Highway.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/highway.html#Highway.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.Highway.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.layer.PositionwiseFeedForward\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.layer.</code><code class=\"sig-name descname\">PositionwiseFeedForward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size</em>, <em class=\"sig-param\">hidden_size</em>, <em class=\"sig-param\">dropout=0.1</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/positionwise.html#PositionwiseFeedForward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.PositionwiseFeedForward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Pointwise Feed-Forward Layer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>input_size: the number of input size\nhidden_size: the number of hidden size</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>dropout: the probability of dropout</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.layer.PositionwiseFeedForward.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/positionwise.html#PositionwiseFeedForward.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.PositionwiseFeedForward.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.layer.ResidualConnection\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.layer.</code><code class=\"sig-name descname\">ResidualConnection</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">dim</em>, <em class=\"sig-param\">layer_dropout=None</em>, <em class=\"sig-param\">layernorm=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/residual.html#ResidualConnection\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.ResidualConnection\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>in Deep Residual Learning for Image Recognition (<a class=\"reference external\" href=\"https://arxiv.org/abs/1512.03385\">https://arxiv.org/abs/1512.03385</a>)</p>\n<p>=&gt; f(x) + x</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>dim: the number of dimension</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>layer_dropout: layer dropout probability (stochastic depth)\ndropout: dropout probability</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.modules.layer.ResidualConnection.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">x</em>, <em class=\"sig-param\">sub_layer_fn</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/residual.html#ResidualConnection.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.ResidualConnection.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.modules.layer.ScalarMix\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.modules.layer.</code><code class=\"sig-name descname\">ScalarMix</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">mixture_size: int</em>, <em class=\"sig-param\">do_layer_norm: bool = False</em>, <em class=\"sig-param\">initial_scalar_parameters: List[float] = None</em>, <em class=\"sig-param\">trainable: bool = True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/modules/layer/scalar_mix.html#ScalarMix\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.ScalarMix\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Computes a parameterised scalar mixture of N tensors, <code class=\"docutils literal notranslate\"><span class=\"pre\">mixture</span> <span class=\"pre\">=</span> <span class=\"pre\">gamma</span> <span class=\"pre\">*</span> <span class=\"pre\">sum(s_k</span> <span class=\"pre\">*</span> <span class=\"pre\">tensor_k)</span></code>\nwhere <code class=\"docutils literal notranslate\"><span class=\"pre\">s</span> <span class=\"pre\">=</span> <span class=\"pre\">softmax(w)</span></code>, with <code class=\"docutils literal notranslate\"><span class=\"pre\">w</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">gamma</span></code> scalar parameters.\nIn addition, if <code class=\"docutils literal notranslate\"><span class=\"pre\">do_layer_norm=True</span></code> then apply layer normalization to each tensor\nbefore weighting.</p>\n<dl class=\"method\">\n<dt id=\"claf.modules.layer.ScalarMix.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tensors: List[torch.Tensor], mask: torch.Tensor = None</em><span class=\"sig-paren\">)</span> &#x2192; torch.Tensor<a class=\"reference internal\" href=\"_modules/claf/modules/layer/scalar_mix.html#ScalarMix.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.modules.layer.ScalarMix.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Compute a weighted average of the <code class=\"docutils literal notranslate\"><span class=\"pre\">tensors</span></code>.  The input tensors an be any shape\nwith at least two dimensions, but must all be the same shape.\nWhen <code class=\"docutils literal notranslate\"><span class=\"pre\">do_layer_norm=True</span></code>, the <code class=\"docutils literal notranslate\"><span class=\"pre\">mask</span></code> is required input.  If the <code class=\"docutils literal notranslate\"><span class=\"pre\">tensors</span></code> are\ndimensioned  <code class=\"docutils literal notranslate\"><span class=\"pre\">(dim_0,</span> <span class=\"pre\">...,</span> <span class=\"pre\">dim_{n-1},</span> <span class=\"pre\">dim_n)</span></code>, then the <code class=\"docutils literal notranslate\"><span class=\"pre\">mask</span></code> is dimensioned\n<code class=\"docutils literal notranslate\"><span class=\"pre\">(dim_0,</span> <span class=\"pre\">...,</span> <span class=\"pre\">dim_{n-1})</span></code>, as in the typical case with <code class=\"docutils literal notranslate\"><span class=\"pre\">tensors</span></code> of shape\n<code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps,</span> <span class=\"pre\">dim)</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">mask</span></code> of shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps)</span></code>.\nWhen <code class=\"docutils literal notranslate\"><span class=\"pre\">do_layer_norm=False</span></code> the <code class=\"docutils literal notranslate\"><span class=\"pre\">mask</span></code> is ignored.</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.tokens.html\" class=\"btn btn-neutral float-right\" title=\"claf.tokens package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.modules.encoder.html\" class=\"btn btn-neutral\" title=\"claf.modules.encoder package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.tokens.embedding.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.embedding package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.tokens.indexer package\" href=\"claf.tokens.indexer.html\" />\n    <link rel=\"prev\" title=\"claf.tokens package\" href=\"claf.tokens.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.tokens.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.tokens.embedding package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.tokens.embedding.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.tokens.embedding\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.indexer.html\">claf.tokens.indexer package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.token_embedder.html\">claf.tokens.token_embedder package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.tokenizer.html\">claf.tokens.tokenizer package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens.cove\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.tokens.html\">claf.tokens package</a> &raquo;</li>\n        \n      <li>claf.tokens.embedding package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.tokens.embedding.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-tokens-embedding-package\">\n<h1>claf.tokens.embedding package<a class=\"headerlink\" href=\"#claf-tokens-embedding-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.tokens.embedding.base\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.tokens.embedding.base\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.tokens.embedding.base.TokenEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.base.</code><code class=\"sig-name descname\">TokenEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/base.html#TokenEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Token Embedding</p>\n<p>It can be embedding matrix, language model (ELMo), neural machine translation model (CoVe) and features.</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (rqa.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.base.TokenEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokens</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/base.html#TokenEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.base.TokenEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.base.TokenEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/base.html#TokenEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.base.TokenEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.base.TokenEmbedding.get_vocab_size\">\n<code class=\"sig-name descname\">get_vocab_size</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/base.html#TokenEmbedding.get_vocab_size\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.base.TokenEmbedding.get_vocab_size\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.embedding.bert_embedding\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.embedding.bert_embedding.BertEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.bert_embedding.</code><code class=\"sig-name descname\">BertEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">pretrained_model_name=None</em>, <em class=\"sig-param\">trainable=False</em>, <em class=\"sig-param\">unit='subword'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/bert_embedding.html#BertEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.bert_embedding.BertEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>BERT Embedding(Encoder)</p>\n<p>BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">https://arxiv.org/abs/1810.04805</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>pretrained_model_name: …\nuse_as_embedding: …\ntrainable: Finetune or fixed</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.bert_embedding.BertEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/bert_embedding.html#BertEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.bert_embedding.BertEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.bert_embedding.BertEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/bert_embedding.html#BertEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.bert_embedding.BertEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.bert_embedding.BertEmbedding.remove_cls_sep_token\">\n<code class=\"sig-name descname\">remove_cls_sep_token</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">outputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/bert_embedding.html#BertEmbedding.remove_cls_sep_token\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.bert_embedding.BertEmbedding.remove_cls_sep_token\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.embedding.char_embedding\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.embedding.char_embedding.CharEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.char_embedding.</code><code class=\"sig-name descname\">CharEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab, dropout=0.2, embed_dim=16, kernel_sizes=[5], num_filter=100, activation='relu'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/char_embedding.html#CharEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.char_embedding.CharEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>Character Embedding (CharCNN)\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1509.01626\">https://arxiv.org/abs/1509.01626</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>dropout: The number of dropout probability\nembed_dim: The number of embedding dimension\nkernel_sizes: The list of kernel size (n-gram)\nnum_filter: The number of cnn filter\nactivation: Activation Function (eg. ReLU)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.char_embedding.CharEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">chars</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/char_embedding.html#CharEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.char_embedding.CharEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.char_embedding.CharEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/char_embedding.html#CharEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.char_embedding.CharEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.embedding.cove_embedding\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.embedding.cove_embedding.CoveEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.cove_embedding.</code><code class=\"sig-name descname\">CoveEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">glove_pretrained_path=None</em>, <em class=\"sig-param\">model_pretrained_path=None</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">trainable=False</em>, <em class=\"sig-param\">project_dim=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/cove_embedding.html#CoveEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.cove_embedding.CoveEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>Cove Embedding</p>\n<p>Learned in Translation: Contextualized Word Vectors\n(<a class=\"reference external\" href=\"http://papers.nips.cc/paper/7209-learned-in-translation-contextualized-word-vectors.pdf\">http://papers.nips.cc/paper/7209-learned-in-translation-contextualized-word-vectors.pdf</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>dropout: The number of dropout probability\npretrained_path: pretrained vector path (eg. GloVe)\ntrainable: finetune or fixed\nproject_dim: The number of project (linear) dimension</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.cove_embedding.CoveEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">words</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/cove_embedding.html#CoveEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.cove_embedding.CoveEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.cove_embedding.CoveEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/cove_embedding.html#CoveEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.cove_embedding.CoveEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.embedding.elmo_embedding\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.embedding.elmo_embedding.ELMoEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.elmo_embedding.</code><code class=\"sig-name descname\">ELMoEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">options_file='elmo_2x4096_512_2048cnn_2xhighway_options.json'</em>, <em class=\"sig-param\">weight_file='elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5'</em>, <em class=\"sig-param\">do_layer_norm=False</em>, <em class=\"sig-param\">dropout=0.5</em>, <em class=\"sig-param\">trainable=False</em>, <em class=\"sig-param\">project_dim=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/elmo_embedding.html#ELMoEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.elmo_embedding.ELMoEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>ELMo Embedding\nEmbedding From Language Model</p>\n<p>Deep contextualized word representations\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1802.0536\">https://arxiv.org/abs/1802.0536</a>)</p>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>options_file: ELMo model config file path\nweight_file: ELMo model weight file path\ndo_layer_norm: Should we apply layer normalization (passed to <code class=\"docutils literal notranslate\"><span class=\"pre\">ScalarMix</span></code>)?</p>\n<blockquote>\n<div><p>default is False</p>\n</div></blockquote>\n<p>dropout: The number of dropout probability\ntrainable: Finetune or fixed\nproject_dim: The number of project (linear) dimension</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.elmo_embedding.ELMoEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">chars</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/elmo_embedding.html#ELMoEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.elmo_embedding.ELMoEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.elmo_embedding.ELMoEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/elmo_embedding.html#ELMoEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.elmo_embedding.ELMoEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.embedding.frequent_word_embedding\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.frequent_word_embedding.</code><code class=\"sig-name descname\">FrequentTuningWordEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">embed_dim=100</em>, <em class=\"sig-param\">padding_idx=None</em>, <em class=\"sig-param\">max_norm=None</em>, <em class=\"sig-param\">norm_type=2</em>, <em class=\"sig-param\">scale_grad_by_freq=False</em>, <em class=\"sig-param\">sparse=False</em>, <em class=\"sig-param\">pretrained_path=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/frequent_word_embedding.html#FrequentTuningWordEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>Frequent Word Finetuning Embedding\nFinetuning embedding matrix, according to ‘threshold_index’</p>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>dropout: The number of dropout probability\nembed_dim: The number of embedding dimension\npadding_idx: If given, pads the output with the embedding vector at padding_idx</p>\n<blockquote>\n<div><p>(initialized to zeros) whenever it encounters the index.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>max_norm: If given, will renormalize the embedding vectors to have a norm lesser</dt><dd><p>than this before extracting. Note: this will modify weight in-place.</p>\n</dd>\n</dl>\n<p>norm_type: The p of the p-norm to compute for the max_norm option. Default 2.\nscale_grad_by_freq: if given, this will scale gradients by the inverse of</p>\n<blockquote>\n<div><p>frequency of the words in the mini-batch. Default False.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>sparse: if True, gradient w.r.t. weight will be a sparse tensor.</dt><dd><p>See Notes under torch.nn.Embedding for more details regarding sparse gradients.</p>\n</dd>\n</dl>\n<p>pretrained_path: pretrained vector path (eg. GloVe)\ntrainable: finetune or fixed</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">words</em>, <em class=\"sig-param\">frequent_tuning=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/frequent_word_embedding.html#FrequentTuningWordEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/frequent_word_embedding.html#FrequentTuningWordEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.embedding.sparse_feature\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.embedding.sparse_feature.OneHotEncoding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.sparse_feature.</code><code class=\"sig-name descname\">OneHotEncoding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">index</em>, <em class=\"sig-param\">token_name</em>, <em class=\"sig-param\">classes</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#OneHotEncoding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.sparse_feature.OneHotEncoding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Sparse to one-hot encoding</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.sparse_feature.OneHotEncoding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#OneHotEncoding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.sparse_feature.OneHotEncoding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.sparse_feature.OneHotEncoding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#OneHotEncoding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.sparse_feature.OneHotEncoding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.embedding.sparse_feature.SparseFeature\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.sparse_feature.</code><code class=\"sig-name descname\">SparseFeature</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">embed_type</em>, <em class=\"sig-param\">feature_count</em>, <em class=\"sig-param\">params={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#SparseFeature\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.sparse_feature.SparseFeature\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>Sparse Feature</p>\n<ol class=\"arabic simple\">\n<li><p>Sparse to Embedding</p></li>\n<li><p>One Hot Encoding</p></li>\n</ol>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)\nembed_type: The type of embedding [one_hot|embedding]\nfeature_count: The number of feature count</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>params: additional parameters for embedding module</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.sparse_feature.SparseFeature.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#SparseFeature.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.sparse_feature.SparseFeature.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.sparse_feature.SparseFeature.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#SparseFeature.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.sparse_feature.SparseFeature.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.embedding.sparse_feature.SparseToEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.sparse_feature.</code><code class=\"sig-name descname\">SparseToEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">index</em>, <em class=\"sig-param\">token_name</em>, <em class=\"sig-param\">classes</em>, <em class=\"sig-param\">dropout=0</em>, <em class=\"sig-param\">embed_dim=15</em>, <em class=\"sig-param\">trainable=True</em>, <em class=\"sig-param\">padding_idx=None</em>, <em class=\"sig-param\">max_norm=None</em>, <em class=\"sig-param\">norm_type=2</em>, <em class=\"sig-param\">scale_grad_by_freq=False</em>, <em class=\"sig-param\">sparse=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#SparseToEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.sparse_feature.SparseToEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Sparse to Embedding</p>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_name: token_name</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>dropout: The number of dropout probability\nembed_dim: The number of embedding dimension\npadding_idx: If given, pads the output with the embedding vector at padding_idx</p>\n<blockquote>\n<div><p>(initialized to zeros) whenever it encounters the index.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>max_norm: If given, will renormalize the embedding vectors to have a norm lesser</dt><dd><p>than this before extracting. Note: this will modify weight in-place.</p>\n</dd>\n</dl>\n<p>norm_type: The p of the p-norm to compute for the max_norm option. Default 2.\nscale_grad_by_freq: if given, this will scale gradients by the inverse of</p>\n<blockquote>\n<div><p>frequency of the words in the mini-batch. Default False.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>sparse: if True, gradient w.r.t. weight will be a sparse tensor.</dt><dd><p>See Notes under torch.nn.Embedding for more details regarding sparse gradients.</p>\n</dd>\n</dl>\n<p>pretrained_path: pretrained vector path (eg. GloVe)\ntrainable: finetune or fixed</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.sparse_feature.SparseToEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#SparseToEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.sparse_feature.SparseToEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.sparse_feature.SparseToEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#SparseToEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.sparse_feature.SparseToEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.embedding.word_embedding\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.embedding.word_embedding.WordEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.word_embedding.</code><code class=\"sig-name descname\">WordEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">embed_dim=100</em>, <em class=\"sig-param\">padding_idx=None</em>, <em class=\"sig-param\">max_norm=None</em>, <em class=\"sig-param\">norm_type=2</em>, <em class=\"sig-param\">scale_grad_by_freq=False</em>, <em class=\"sig-param\">sparse=False</em>, <em class=\"sig-param\">pretrained_path=None</em>, <em class=\"sig-param\">trainable=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/word_embedding.html#WordEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.word_embedding.WordEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>Word Embedding\nDefault Token Embedding</p>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>dropout: The number of dropout probability\nembed_dim: The number of embedding dimension\npadding_idx: If given, pads the output with the embedding vector at padding_idx</p>\n<blockquote>\n<div><p>(initialized to zeros) whenever it encounters the index.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>max_norm: If given, will renormalize the embedding vectors to have a norm lesser</dt><dd><p>than this before extracting. Note: this will modify weight in-place.</p>\n</dd>\n</dl>\n<p>norm_type: The p of the p-norm to compute for the max_norm option. Default 2.\nscale_grad_by_freq: if given, this will scale gradients by the inverse of</p>\n<blockquote>\n<div><p>frequency of the words in the mini-batch. Default False.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>sparse: if True, gradient w.r.t. weight will be a sparse tensor.</dt><dd><p>See Notes under torch.nn.Embedding for more details regarding sparse gradients.</p>\n</dd>\n</dl>\n<p>pretrained_path: pretrained vector path (eg. GloVe)\ntrainable: finetune or fixed</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.word_embedding.WordEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">words</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/word_embedding.html#WordEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.word_embedding.WordEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.word_embedding.WordEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/word_embedding.html#WordEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.word_embedding.WordEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.tokens.embedding\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.tokens.embedding\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.tokens.embedding.BertEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.</code><code class=\"sig-name descname\">BertEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">pretrained_model_name=None</em>, <em class=\"sig-param\">trainable=False</em>, <em class=\"sig-param\">unit='subword'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/bert_embedding.html#BertEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.BertEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>BERT Embedding(Encoder)</p>\n<p>BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">https://arxiv.org/abs/1810.04805</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>pretrained_model_name: …\nuse_as_embedding: …\ntrainable: Finetune or fixed</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.BertEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/bert_embedding.html#BertEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.BertEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.BertEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/bert_embedding.html#BertEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.BertEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.BertEmbedding.remove_cls_sep_token\">\n<code class=\"sig-name descname\">remove_cls_sep_token</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">outputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/bert_embedding.html#BertEmbedding.remove_cls_sep_token\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.BertEmbedding.remove_cls_sep_token\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.embedding.CharEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.</code><code class=\"sig-name descname\">CharEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab, dropout=0.2, embed_dim=16, kernel_sizes=[5], num_filter=100, activation='relu'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/char_embedding.html#CharEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.CharEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>Character Embedding (CharCNN)\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1509.01626\">https://arxiv.org/abs/1509.01626</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>dropout: The number of dropout probability\nembed_dim: The number of embedding dimension\nkernel_sizes: The list of kernel size (n-gram)\nnum_filter: The number of cnn filter\nactivation: Activation Function (eg. ReLU)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.CharEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">chars</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/char_embedding.html#CharEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.CharEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.CharEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/char_embedding.html#CharEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.CharEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.embedding.CoveEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.</code><code class=\"sig-name descname\">CoveEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">glove_pretrained_path=None</em>, <em class=\"sig-param\">model_pretrained_path=None</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">trainable=False</em>, <em class=\"sig-param\">project_dim=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/cove_embedding.html#CoveEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.CoveEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>Cove Embedding</p>\n<p>Learned in Translation: Contextualized Word Vectors\n(<a class=\"reference external\" href=\"http://papers.nips.cc/paper/7209-learned-in-translation-contextualized-word-vectors.pdf\">http://papers.nips.cc/paper/7209-learned-in-translation-contextualized-word-vectors.pdf</a>)</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>dropout: The number of dropout probability\npretrained_path: pretrained vector path (eg. GloVe)\ntrainable: finetune or fixed\nproject_dim: The number of project (linear) dimension</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.CoveEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">words</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/cove_embedding.html#CoveEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.CoveEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.CoveEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/cove_embedding.html#CoveEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.CoveEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.embedding.ELMoEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.</code><code class=\"sig-name descname\">ELMoEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">options_file='elmo_2x4096_512_2048cnn_2xhighway_options.json'</em>, <em class=\"sig-param\">weight_file='elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5'</em>, <em class=\"sig-param\">do_layer_norm=False</em>, <em class=\"sig-param\">dropout=0.5</em>, <em class=\"sig-param\">trainable=False</em>, <em class=\"sig-param\">project_dim=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/elmo_embedding.html#ELMoEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.ELMoEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>ELMo Embedding\nEmbedding From Language Model</p>\n<p>Deep contextualized word representations\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1802.0536\">https://arxiv.org/abs/1802.0536</a>)</p>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>options_file: ELMo model config file path\nweight_file: ELMo model weight file path\ndo_layer_norm: Should we apply layer normalization (passed to <code class=\"docutils literal notranslate\"><span class=\"pre\">ScalarMix</span></code>)?</p>\n<blockquote>\n<div><p>default is False</p>\n</div></blockquote>\n<p>dropout: The number of dropout probability\ntrainable: Finetune or fixed\nproject_dim: The number of project (linear) dimension</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.ELMoEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">chars</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/elmo_embedding.html#ELMoEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.ELMoEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.ELMoEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/elmo_embedding.html#ELMoEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.ELMoEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.embedding.FrequentTuningWordEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.</code><code class=\"sig-name descname\">FrequentTuningWordEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">embed_dim=100</em>, <em class=\"sig-param\">padding_idx=None</em>, <em class=\"sig-param\">max_norm=None</em>, <em class=\"sig-param\">norm_type=2</em>, <em class=\"sig-param\">scale_grad_by_freq=False</em>, <em class=\"sig-param\">sparse=False</em>, <em class=\"sig-param\">pretrained_path=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/frequent_word_embedding.html#FrequentTuningWordEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.FrequentTuningWordEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>Frequent Word Finetuning Embedding\nFinetuning embedding matrix, according to ‘threshold_index’</p>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>dropout: The number of dropout probability\nembed_dim: The number of embedding dimension\npadding_idx: If given, pads the output with the embedding vector at padding_idx</p>\n<blockquote>\n<div><p>(initialized to zeros) whenever it encounters the index.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>max_norm: If given, will renormalize the embedding vectors to have a norm lesser</dt><dd><p>than this before extracting. Note: this will modify weight in-place.</p>\n</dd>\n</dl>\n<p>norm_type: The p of the p-norm to compute for the max_norm option. Default 2.\nscale_grad_by_freq: if given, this will scale gradients by the inverse of</p>\n<blockquote>\n<div><p>frequency of the words in the mini-batch. Default False.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>sparse: if True, gradient w.r.t. weight will be a sparse tensor.</dt><dd><p>See Notes under torch.nn.Embedding for more details regarding sparse gradients.</p>\n</dd>\n</dl>\n<p>pretrained_path: pretrained vector path (eg. GloVe)\ntrainable: finetune or fixed</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.FrequentTuningWordEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">words</em>, <em class=\"sig-param\">frequent_tuning=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/frequent_word_embedding.html#FrequentTuningWordEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.FrequentTuningWordEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.FrequentTuningWordEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/frequent_word_embedding.html#FrequentTuningWordEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.FrequentTuningWordEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.embedding.SparseFeature\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.</code><code class=\"sig-name descname\">SparseFeature</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">embed_type</em>, <em class=\"sig-param\">feature_count</em>, <em class=\"sig-param\">params={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#SparseFeature\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.SparseFeature\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>Sparse Feature</p>\n<ol class=\"arabic simple\">\n<li><p>Sparse to Embedding</p></li>\n<li><p>One Hot Encoding</p></li>\n</ol>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)\nembed_type: The type of embedding [one_hot|embedding]\nfeature_count: The number of feature count</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>params: additional parameters for embedding module</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.SparseFeature.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#SparseFeature.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.SparseFeature.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.SparseFeature.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/sparse_feature.html#SparseFeature.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.SparseFeature.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.embedding.WordEmbedding\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.embedding.</code><code class=\"sig-name descname\">WordEmbedding</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em>, <em class=\"sig-param\">dropout=0.2</em>, <em class=\"sig-param\">embed_dim=100</em>, <em class=\"sig-param\">padding_idx=None</em>, <em class=\"sig-param\">max_norm=None</em>, <em class=\"sig-param\">norm_type=2</em>, <em class=\"sig-param\">scale_grad_by_freq=False</em>, <em class=\"sig-param\">sparse=False</em>, <em class=\"sig-param\">pretrained_path=None</em>, <em class=\"sig-param\">trainable=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/word_embedding.html#WordEmbedding\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.WordEmbedding\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.embedding.base.TokenEmbedding\" title=\"claf.tokens.embedding.base.TokenEmbedding\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.embedding.base.TokenEmbedding</span></code></a></p>\n<p>Word Embedding\nDefault Token Embedding</p>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>vocab: Vocab (claf.tokens.vocab)</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>dropout: The number of dropout probability\nembed_dim: The number of embedding dimension\npadding_idx: If given, pads the output with the embedding vector at padding_idx</p>\n<blockquote>\n<div><p>(initialized to zeros) whenever it encounters the index.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>max_norm: If given, will renormalize the embedding vectors to have a norm lesser</dt><dd><p>than this before extracting. Note: this will modify weight in-place.</p>\n</dd>\n</dl>\n<p>norm_type: The p of the p-norm to compute for the max_norm option. Default 2.\nscale_grad_by_freq: if given, this will scale gradients by the inverse of</p>\n<blockquote>\n<div><p>frequency of the words in the mini-batch. Default False.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>sparse: if True, gradient w.r.t. weight will be a sparse tensor.</dt><dd><p>See Notes under torch.nn.Embedding for more details regarding sparse gradients.</p>\n</dd>\n</dl>\n<p>pretrained_path: pretrained vector path (eg. GloVe)\ntrainable: finetune or fixed</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.WordEmbedding.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">words</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/word_embedding.html#WordEmbedding.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.WordEmbedding.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>embedding look-up</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.embedding.WordEmbedding.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/embedding/word_embedding.html#WordEmbedding.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.embedding.WordEmbedding.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>get embedding dimension</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.tokens.indexer.html\" class=\"btn btn-neutral float-right\" title=\"claf.tokens.indexer package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.tokens.html\" class=\"btn btn-neutral\" title=\"claf.tokens package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.tokens.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.tokens.embedding package\" href=\"claf.tokens.embedding.html\" />\n    <link rel=\"prev\" title=\"claf.modules.layer package\" href=\"claf.modules.layer.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">tokens</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.embedding.html\">claf.tokens.embedding package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.indexer.html\">claf.tokens.indexer package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.token_embedder.html\">claf.tokens.token_embedder package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.tokenizer.html\">claf.tokens.tokenizer package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.tokens.cove\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#module-claf.tokens\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf.tokens package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.tokens.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-tokens-package\">\n<h1>claf.tokens package<a class=\"headerlink\" href=\"#claf-tokens-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"subpackages\">\n<h2>Subpackages<a class=\"headerlink\" href=\"#subpackages\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.embedding.html\">claf.tokens.embedding package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.embedding.html#module-claf.tokens.embedding\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.indexer.html\">claf.tokens.indexer package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.indexer.html#module-claf.tokens.indexer\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.token_embedder.html\">claf.tokens.token_embedder package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.tokenizer.html\">claf.tokens.tokenizer package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.base\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"module-claf.tokens.cove\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.tokens.cove\" title=\"Permalink to this headline\">¶</a></h2>\n<p>This code is from salesforce/cove\n(<a class=\"reference external\" href=\"https://github.com/salesforce/cove/blob/master/cove/encoder.py\">https://github.com/salesforce/cove/blob/master/cove/encoder.py</a>)</p>\n<dl class=\"class\">\n<dt id=\"claf.tokens.cove.MTLSTM\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.cove.</code><code class=\"sig-name descname\">MTLSTM</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">word_embedding</em>, <em class=\"sig-param\">pretrained_path=None</em>, <em class=\"sig-param\">requires_grad=False</em>, <em class=\"sig-param\">residual_embeddings=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/cove.html#MTLSTM\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.cove.MTLSTM\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<dl class=\"method\">\n<dt id=\"claf.tokens.cove.MTLSTM.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/cove.html#MTLSTM.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.cove.MTLSTM.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>A pretrained MT-LSTM (McCann et. al. 2017).\nThis LSTM was trained with 300d 840B GloVe on the WMT 2017 machine translation dataset.</p>\n<dl>\n<dt>Arguments:</dt><dd><dl class=\"simple\">\n<dt>inputs (Tensor): If MTLSTM handles embedding, a Long Tensor of size (batch_size, timesteps).</dt><dd><p>Otherwise, a Float Tensor of size (batch_size, timesteps, features).</p>\n</dd>\n</dl>\n<p>lengths (Long Tensor): (batch_size, lengths) lenghts of each sequence for handling padding\nhidden (Float Tensor): initial hidden state of the LSTM</p>\n</dd>\n</dl>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.elmo\"></span><p>This code is from allenai/allennlp\n(<a class=\"reference external\" href=\"https://github.com/allenai/allennlp/blob/master/allennlp/modules/elmo.py\">https://github.com/allenai/allennlp/blob/master/allennlp/modules/elmo.py</a>)</p>\n<dl class=\"class\">\n<dt id=\"claf.tokens.elmo.Elmo\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.elmo.</code><code class=\"sig-name descname\">Elmo</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">options_file: str</em>, <em class=\"sig-param\">weight_file: str</em>, <em class=\"sig-param\">num_output_representations: int</em>, <em class=\"sig-param\">requires_grad: bool = False</em>, <em class=\"sig-param\">do_layer_norm: bool = False</em>, <em class=\"sig-param\">dropout: float = 0.5</em>, <em class=\"sig-param\">vocab_to_cache: List[str] = None</em>, <em class=\"sig-param\">module: torch.nn.modules.module.Module = None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/elmo.html#Elmo\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.elmo.Elmo\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Compute ELMo representations using a pre-trained bidirectional language model.\nSee “Deep contextualized word representations”, Peters et al. for details.\nThis module takes character id input and computes <code class=\"docutils literal notranslate\"><span class=\"pre\">num_output_representations</span></code> different layers\nof ELMo representations.  Typically <code class=\"docutils literal notranslate\"><span class=\"pre\">num_output_representations</span></code> is 1 or 2.  For example, in\nthe case of the SRL model in the above paper, <code class=\"docutils literal notranslate\"><span class=\"pre\">num_output_representations=1</span></code> where ELMo was included at\nthe input token representation layer.  In the case of the SQuAD model, <code class=\"docutils literal notranslate\"><span class=\"pre\">num_output_representations=2</span></code>\nas ELMo was also included at the GRU output layer.\nIn the implementation below, we learn separate scalar weights for each output layer,\nbut only run the biLM once on each input sequence for efficiency.\nParameters\n———-\noptions_file : <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code>, required.</p>\n<blockquote>\n<div><p>ELMo JSON options file</p>\n</div></blockquote>\n<dl>\n<dt>weight_file<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code>, required.</span></dt><dd><p>ELMo hdf5 weight file</p>\n</dd>\n<dt>num_output_representations: <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, required.</dt><dd><p>The number of ELMo representation layers to output.</p>\n</dd>\n<dt>requires_grad: <code class=\"docutils literal notranslate\"><span class=\"pre\">bool</span></code>, optional</dt><dd><p>If True, compute gradient of ELMo parameters for fine tuning.</p>\n</dd>\n<dt>do_layer_norm<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">bool</span></code>, optional, (default=False).</span></dt><dd><p>Should we apply layer normalization (passed to <code class=\"docutils literal notranslate\"><span class=\"pre\">ScalarMix</span></code>)?</p>\n</dd>\n<dt>dropout<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>, optional, (default = 0.5).</span></dt><dd><p>The dropout to be applied to the ELMo representations.</p>\n</dd>\n<dt>vocab_to_cache<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">List[str]</span></code>, optional, (default = 0.5).</span></dt><dd><p>A list of words to pre-compute and cache character convolutions\nfor. If you use this option, Elmo expects that you pass word\nindices of shape (batch_size, timesteps) to forward, instead\nof character indices. If you use this option and pass a word which\nwasn’t pre-cached, this will break.</p>\n</dd>\n<dt>module<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.nn.Module</span></code>, optional, (default = None).</span></dt><dd><p>If provided, then use this module instead of the pre-trained ELMo biLM.\nIf using this option, then pass <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> for both <code class=\"docutils literal notranslate\"><span class=\"pre\">options_file</span></code>\nand <code class=\"docutils literal notranslate\"><span class=\"pre\">weight_file</span></code>.  The module must provide a public attribute\n<code class=\"docutils literal notranslate\"><span class=\"pre\">num_layers</span></code> with the number of internal layers and its <code class=\"docutils literal notranslate\"><span class=\"pre\">forward</span></code>\nmethod must return a <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code> with <code class=\"docutils literal notranslate\"><span class=\"pre\">activations</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">mask</span></code> keys\n(see <cite>_ElmoBilm`</cite> for an example).  Note that <code class=\"docutils literal notranslate\"><span class=\"pre\">requires_grad</span></code> is also\nignored with this option.</p>\n</dd>\n</dl>\n<dl class=\"method\">\n<dt id=\"claf.tokens.elmo.Elmo.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs: torch.Tensor</em>, <em class=\"sig-param\">word_inputs: torch.Tensor = None</em><span class=\"sig-paren\">)</span> &#x2192; Dict[str, Union[torch.Tensor, List[torch.Tensor]]]<a class=\"reference internal\" href=\"_modules/claf/tokens/elmo.html#Elmo.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.elmo.Elmo.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>inputs: <code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code>, required.\nShape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps,</span> <span class=\"pre\">50)</span></code> of character ids representing the current batch.\nword_inputs : <code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code>, required.</p>\n<blockquote>\n<div><p>If you passed a cached vocab, you can in addition pass a tensor of shape\n<code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps)</span></code>, which represent word ids which have been pre-cached.</p>\n</div></blockquote>\n<p>Dict with keys:\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'elmo_representations'</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">List[torch.Tensor]</span></code></p>\n<blockquote>\n<div><p>A <code class=\"docutils literal notranslate\"><span class=\"pre\">num_output_representations</span></code> list of ELMo representations for the input sequence.\nEach representation is shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps,</span> <span class=\"pre\">embedding_dim)</span></code></p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">'mask'</span></code>:  <code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code></dt><dd><p>Shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps)</span></code> long tensor with sequence mask.</p>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.elmo.Elmo.from_params\">\n<em class=\"property\">classmethod </em><code class=\"sig-name descname\">from_params</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">params</em><span class=\"sig-paren\">)</span> &#x2192; claf.tokens.elmo.Elmo<a class=\"reference internal\" href=\"_modules/claf/tokens/elmo.html#Elmo.from_params\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.elmo.Elmo.from_params\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.elmo.Elmo.get_output_dim\">\n<code class=\"sig-name descname\">get_output_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/elmo.html#Elmo.get_output_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.elmo.Elmo.get_output_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.elmo.ElmoLstm\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.elmo.</code><code class=\"sig-name descname\">ElmoLstm</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_size: int</em>, <em class=\"sig-param\">hidden_size: int</em>, <em class=\"sig-param\">cell_size: int</em>, <em class=\"sig-param\">num_layers: int</em>, <em class=\"sig-param\">requires_grad: bool = False</em>, <em class=\"sig-param\">recurrent_dropout_probability: float = 0.0</em>, <em class=\"sig-param\">memory_cell_clip_value: Optional[float] = None</em>, <em class=\"sig-param\">state_projection_clip_value: Optional[float] = None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/elmo.html#ElmoLstm\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.elmo.ElmoLstm\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.modules.encoder.lstm_cell_with_projection._EncoderBase</span></code></p>\n<p>A stacked, bidirectional LSTM which uses\n<code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LstmCellWithProjection</span></code>’s\nwith highway layers between the inputs to layers.\nThe inputs to the forward and backward directions are independent - forward and backward\nstates are not concatenated between layers.\nAdditionally, this LSTM maintains its <cite>own</cite> state, which is updated every time\n<code class=\"docutils literal notranslate\"><span class=\"pre\">forward</span></code> is called. It is dynamically resized for different batch sizes and is\ndesigned for use with non-continuous inputs (i.e inputs which aren’t formatted as a stream,\nsuch as text used for a language modelling task, which is how stateful RNNs are typically used).\nThis is non-standard, but can be thought of as having an “end of sentence” state, which is\ncarried across different sentences.\nParameters\n———-\ninput_size : <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, required</p>\n<blockquote>\n<div><p>The dimension of the inputs to the LSTM.</p>\n</div></blockquote>\n<dl>\n<dt>hidden_size<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, required</span></dt><dd><p>The dimension of the outputs of the LSTM.</p>\n</dd>\n<dt>cell_size<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, required.</span></dt><dd><p>The dimension of the memory cell of the\n<code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LstmCellWithProjection</span></code>.</p>\n</dd>\n<dt>num_layers<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, required</span></dt><dd><p>The number of bidirectional LSTMs to use.</p>\n</dd>\n<dt>requires_grad: <code class=\"docutils literal notranslate\"><span class=\"pre\">bool</span></code>, optional</dt><dd><p>If True, compute gradient of ELMo parameters for fine tuning.</p>\n</dd>\n<dt>recurrent_dropout_probability: <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>, optional (default = 0.0)</dt><dd><p>The dropout probability to be used in a dropout scheme as stated in\n<a class=\"reference external\" href=\"https://arxiv.org/abs/1512.05287\">A Theoretically Grounded Application of Dropout in Recurrent Neural Networks</a> .</p>\n</dd>\n<dt>state_projection_clip_value: <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>, optional, (default = None)</dt><dd><p>The magnitude with which to clip the hidden_state after projecting it.</p>\n</dd>\n<dt>memory_cell_clip_value: <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>, optional, (default = None)</dt><dd><p>The magnitude with which to clip the memory cell.</p>\n</dd>\n</dl>\n<dl class=\"method\">\n<dt id=\"claf.tokens.elmo.ElmoLstm.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs: torch.Tensor</em>, <em class=\"sig-param\">mask: torch.LongTensor</em><span class=\"sig-paren\">)</span> &#x2192; torch.Tensor<a class=\"reference internal\" href=\"_modules/claf/tokens/elmo.html#ElmoLstm.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.elmo.ElmoLstm.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><dl>\n<dt>inputs<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code>, required.</span></dt><dd><p>A Tensor of shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">sequence_length,</span> <span class=\"pre\">hidden_size)</span></code>.</p>\n</dd>\n<dt>mask<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.LongTensor</span></code>, required.</span></dt><dd><p>A binary mask of shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">sequence_length)</span></code> representing the\nnon-padded elements in each sequence in the batch.</p>\n</dd>\n</dl>\n<p>A <code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code> of shape (num_layers, batch_size, sequence_length, hidden_size),\nwhere the num_layers dimension represents the LSTM output from that layer.</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.elmo.ElmoLstm.load_weights\">\n<code class=\"sig-name descname\">load_weights</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">weight_file: str</em><span class=\"sig-paren\">)</span> &#x2192; None<a class=\"reference internal\" href=\"_modules/claf/tokens/elmo.html#ElmoLstm.load_weights\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.elmo.ElmoLstm.load_weights\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Load the pre-trained weights from the file.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.elmo.add_sentence_boundary_token_ids\">\n<code class=\"sig-prename descclassname\">claf.tokens.elmo.</code><code class=\"sig-name descname\">add_sentence_boundary_token_ids</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tensor: torch.Tensor</em>, <em class=\"sig-param\">mask: torch.Tensor</em>, <em class=\"sig-param\">sentence_begin_token: Any</em>, <em class=\"sig-param\">sentence_end_token: Any</em><span class=\"sig-paren\">)</span> &#x2192; Tuple[torch.Tensor, torch.Tensor]<a class=\"reference internal\" href=\"_modules/claf/tokens/elmo.html#add_sentence_boundary_token_ids\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.elmo.add_sentence_boundary_token_ids\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Add begin/end of sentence tokens to the batch of sentences.\nGiven a batch of sentences with size <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps)</span></code> or\n<code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps,</span> <span class=\"pre\">dim)</span></code> this returns a tensor of shape\n<code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps</span> <span class=\"pre\">+</span> <span class=\"pre\">2)</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps</span> <span class=\"pre\">+</span> <span class=\"pre\">2,</span> <span class=\"pre\">dim)</span></code> respectively.\nReturns both the new tensor and updated mask.\nParameters\n———-\ntensor : <code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code></p>\n<blockquote>\n<div><p>A tensor of shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps)</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps,</span> <span class=\"pre\">dim)</span></code></p>\n</div></blockquote>\n<dl>\n<dt>mask<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code></span></dt><dd><p>A tensor of shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps)</span></code></p>\n</dd>\n<dt>sentence_begin_token: Any (anything that can be broadcast in torch for assignment)</dt><dd><p>For 2D input, a scalar with the &lt;S&gt; id. For 3D input, a tensor with length dim.</p>\n</dd>\n<dt>sentence_end_token: Any (anything that can be broadcast in torch for assignment)</dt><dd><p>For 2D input, a scalar with the &lt;/S&gt; id. For 3D input, a tensor with length dim.</p>\n</dd>\n</dl>\n<dl>\n<dt>tensor_with_boundary_tokens<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code></span></dt><dd><p>The tensor with the appended and prepended boundary tokens. If the input was 2D,\nit has shape (batch_size, timesteps + 2) and if the input was 3D, it has shape\n(batch_size, timesteps + 2, dim).</p>\n</dd>\n<dt>new_mask<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code></span></dt><dd><p>The new mask for the tensor, taking into account the appended tokens\nmarking the beginning and end of the sentence.</p>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.elmo.remove_sentence_boundaries\">\n<code class=\"sig-prename descclassname\">claf.tokens.elmo.</code><code class=\"sig-name descname\">remove_sentence_boundaries</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tensor: torch.Tensor</em>, <em class=\"sig-param\">mask: torch.Tensor</em><span class=\"sig-paren\">)</span> &#x2192; Tuple[torch.Tensor, torch.Tensor]<a class=\"reference internal\" href=\"_modules/claf/tokens/elmo.html#remove_sentence_boundaries\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.elmo.remove_sentence_boundaries\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Remove begin/end of sentence embeddings from the batch of sentences.\nGiven a batch of sentences with size <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps,</span> <span class=\"pre\">dim)</span></code>\nthis returns a tensor of shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps</span> <span class=\"pre\">-</span> <span class=\"pre\">2,</span> <span class=\"pre\">dim)</span></code> after removing\nthe beginning and end sentence markers.  The sentences are assumed to be padded on the right,\nwith the beginning of each sentence assumed to occur at index 0 (i.e., <code class=\"docutils literal notranslate\"><span class=\"pre\">mask[:,</span> <span class=\"pre\">0]</span></code> is assumed\nto be 1).\nReturns both the new tensor and updated mask.\nThis function is the inverse of <code class=\"docutils literal notranslate\"><span class=\"pre\">add_sentence_boundary_token_ids</span></code>.\nParameters\n———-\ntensor : <code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code></p>\n<blockquote>\n<div><p>A tensor of shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps,</span> <span class=\"pre\">dim)</span></code></p>\n</div></blockquote>\n<dl>\n<dt>mask<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code></span></dt><dd><p>A tensor of shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps)</span></code></p>\n</dd>\n</dl>\n<dl>\n<dt>tensor_without_boundary_tokens<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code></span></dt><dd><p>The tensor after removing the boundary tokens of shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps</span> <span class=\"pre\">-</span> <span class=\"pre\">2,</span> <span class=\"pre\">dim)</span></code></p>\n</dd>\n<dt>new_mask<span class=\"classifier\"><code class=\"docutils literal notranslate\"><span class=\"pre\">torch.Tensor</span></code></span></dt><dd><p>The new mask for the tensor of shape <code class=\"docutils literal notranslate\"><span class=\"pre\">(batch_size,</span> <span class=\"pre\">timesteps</span> <span class=\"pre\">-</span> <span class=\"pre\">2)</span></code>.</p>\n</dd>\n</dl>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.hangul\"></span><p>Hangulpy.py\nCopyright (C) 2012 Ryan Rho, Hyunwoo Cho\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the “Software”), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.</p>\n<dl class=\"exception\">\n<dt id=\"claf.tokens.hangul.NotHangulException\">\n<em class=\"property\">exception </em><code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">NotHangulException</code><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#NotHangulException\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.NotHangulException\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#Exception\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Exception</span></code></a></p>\n</dd></dl>\n\n<dl class=\"exception\">\n<dt id=\"claf.tokens.hangul.NotLetterException\">\n<em class=\"property\">exception </em><code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">NotLetterException</code><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#NotLetterException\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.NotLetterException\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#Exception\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Exception</span></code></a></p>\n</dd></dl>\n\n<dl class=\"exception\">\n<dt id=\"claf.tokens.hangul.NotWordException\">\n<em class=\"property\">exception </em><code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">NotWordException</code><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#NotWordException\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.NotWordException\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#Exception\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Exception</span></code></a></p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.add_ryul\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">add_ryul</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">word</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#add_ryul\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.add_ryul\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>add suffix either ‘률’ or ‘율’ at the end of this word</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.compose\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">compose</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">chosung</em>, <em class=\"sig-param\">joongsung</em>, <em class=\"sig-param\">jongsung=''</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#compose\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.compose\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>This function returns a Hangul letter by composing the specified chosung, joongsung, and jongsung.\n&#64;param chosung\n&#64;param joongsung\n&#64;param jongsung the terminal Hangul letter. This is optional if you do not need a jongsung.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.decompose\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">decompose</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">hangul_letter</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#decompose\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.decompose\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>This function returns letters by decomposing the specified Hangul letter.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.has_approximant\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">has_approximant</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">letter</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#has_approximant\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.has_approximant\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Approximant makes complex vowels, such as ones starting with y or w.\nIn Korean there is a unique approximant euㅡ making uiㅢ, but ㅢ does not make many irregularities.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.has_batchim\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">has_batchim</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">letter</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#has_batchim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.has_batchim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>This method is the same as has_jongsung()</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.has_jongsung\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">has_jongsung</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">letter</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#has_jongsung\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.has_jongsung\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Check whether this letter contains Jongsung</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.ili\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">ili</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">word</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#ili\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.ili\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>convert {가} or {이} to their correct respective particles automagically.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.is_all_hangul\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">is_all_hangul</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">phrase</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#is_all_hangul\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.is_all_hangul\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Check whether the phrase contains all Hangul letters\n&#64;param phrase a target string\n&#64;return True if the phrase only consists of Hangul. False otherwise.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.is_hangul\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">is_hangul</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">phrase</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#is_hangul\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.is_hangul\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Check whether the phrase is Hangul.\nThis method ignores white spaces, punctuations, and numbers.\n&#64;param phrase a target string\n&#64;return True if the phrase is Hangul. False otherwise.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.josa_eg\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">josa_eg</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">word</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#josa_eg\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.josa_eg\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>add josa either ‘이’ or ‘가’ at the end of this word</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.josa_el\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">josa_el</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">word</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#josa_el\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.josa_el\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>add josa either ‘을’ or ‘를’ at the end of this word</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.josa_en\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">josa_en</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">word</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#josa_en\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.josa_en\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>add josa either ‘은’ or ‘는’ at the end of this word</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.josa_gwa\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">josa_gwa</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">word</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#josa_gwa\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.josa_gwa\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>add josa either ‘과’ or ‘와’ at the end of this word</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.josa_ida\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">josa_ida</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">word</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#josa_ida\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.josa_ida\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>add josa either ‘이다’ or ‘다’ at the end of this word</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.hangul.josa_ro\">\n<code class=\"sig-prename descclassname\">claf.tokens.hangul.</code><code class=\"sig-name descname\">josa_ro</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">word</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/hangul.html#josa_ro\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.hangul.josa_ro\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>add josa either ‘으로’ or ‘로’ at the end of this word</p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.linguistic\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.linguistic.NER\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.linguistic.</code><code class=\"sig-name descname\">NER</code><a class=\"reference internal\" href=\"_modules/claf/tokens/linguistic.html#NER\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.linguistic.NER\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Named Entity Recognition</p>\n<p>Models trained on the OntoNotes 5 corpus support\nthe following entity types:\n(<a class=\"reference external\" href=\"https://spacy.io/api/annotation#section-dependency-parsing\">https://spacy.io/api/annotation#section-dependency-parsing</a>)</p>\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.linguistic.NER.classes\">\n<code class=\"sig-name descname\">classes</code><em class=\"property\"> = ['NONE', 'PERSON', 'NORP', 'FAC', 'ORG', 'GPE', 'LOC', 'PRODUCT', 'EVENT', 'WORK_OF_ART', 'LAW', 'LANGUAGE', 'DATE', 'TIME', 'PERCENT', 'MONEY', 'QUANTITY', 'ORDINAL', 'CARDINAL']</em><a class=\"headerlink\" href=\"#claf.tokens.linguistic.NER.classes\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.linguistic.POSTag\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.linguistic.</code><code class=\"sig-name descname\">POSTag</code><a class=\"reference internal\" href=\"_modules/claf/tokens/linguistic.html#POSTag\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.linguistic.POSTag\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Universal POS tags expends by spacy\n(<a class=\"reference external\" href=\"https://spacy.io/api/annotation#section-pos-tagging\">https://spacy.io/api/annotation#section-pos-tagging</a>)</p>\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.linguistic.POSTag.classes\">\n<code class=\"sig-name descname\">classes</code><em class=\"property\"> = ['ADJ', 'ADP', 'ADV', 'AUX', 'CONJ', 'CCONJ', 'DET', 'INTJ', 'NOUN', 'NUM', 'PART', 'PRON', 'PROPN', 'PUNCT', 'SCONJ', 'SYM', 'VERB', 'X', 'SPACE']</em><a class=\"headerlink\" href=\"#claf.tokens.linguistic.POSTag.classes\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.text_handler\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.text_handler.TextHandler\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.text_handler.</code><code class=\"sig-name descname\">TextHandler</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em>, <em class=\"sig-param\">lazy_indexing=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/text_handler.html#TextHandler\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.text_handler.TextHandler\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Text Handler</p>\n<ul class=\"simple\">\n<li><p>voacb and token_counter</p></li>\n<li><p>raw_features -&gt; indexed_features</p></li>\n<li><p>raw_features -&gt; tensor</p></li>\n</ul>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><dl class=\"simple\">\n<dt>token_makers: Dictionary consisting of</dt><dd><ul>\n<li><p>key: token_name</p></li>\n<li><p>value: TokenMaker (claf.tokens.token_maker)</p></li>\n</ul>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>lazy_indexing: Apply <cite>Lazy Evaluation</cite> to text indexing</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.text_handler.TextHandler.build_vocabs\">\n<code class=\"sig-name descname\">build_vocabs</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_counters</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/text_handler.html#TextHandler.build_vocabs\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.text_handler.TextHandler.build_vocabs\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.text_handler.TextHandler.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">datas</em>, <em class=\"sig-param\">text_columns</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/text_handler.html#TextHandler.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.text_handler.TextHandler.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.text_handler.TextHandler.is_all_vocab_use_pretrained\">\n<code class=\"sig-name descname\">is_all_vocab_use_pretrained</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/text_handler.html#TextHandler.is_all_vocab_use_pretrained\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.text_handler.TextHandler.is_all_vocab_use_pretrained\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.text_handler.TextHandler.make_token_counters\">\n<code class=\"sig-name descname\">make_token_counters</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">texts</em>, <em class=\"sig-param\">config=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/text_handler.html#TextHandler.make_token_counters\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.text_handler.TextHandler.make_token_counters\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.text_handler.TextHandler.raw_to_tensor_fn\">\n<code class=\"sig-name descname\">raw_to_tensor_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">data_reader</em>, <em class=\"sig-param\">cuda_device=None</em>, <em class=\"sig-param\">helper={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/text_handler.html#TextHandler.raw_to_tensor_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.text_handler.TextHandler.raw_to_tensor_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.token_maker\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.token_maker.TokenMaker\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.token_maker.</code><code class=\"sig-name descname\">TokenMaker</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_type</em>, <em class=\"sig-param\">tokenizer=None</em>, <em class=\"sig-param\">indexer=None</em>, <em class=\"sig-param\">embedding_fn=None</em>, <em class=\"sig-param\">vocab_config=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_maker.html#TokenMaker\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Token Maker (Data Transfer Object)</p>\n<p>Token Maker consists of Tokenizer, Indexer, Embedding and Vocab</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>tokenizer: Tokenizer (claf.tokens.tokenizer.base)\nindexer: TokenIndexer (claf.tokens.indexer.base)\nembedding_fn: wrapper function of TokenEmbedding (claf.tokens.embedding.base)\nvocab_config: config dict of Vocab (claf.tokens.vocaburary)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.BERT_TYPE\">\n<code class=\"sig-name descname\">BERT_TYPE</code><em class=\"property\"> = 'bert'</em><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.BERT_TYPE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.CHAR_TYPE\">\n<code class=\"sig-name descname\">CHAR_TYPE</code><em class=\"property\"> = 'char'</em><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.CHAR_TYPE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.COVE_TYPE\">\n<code class=\"sig-name descname\">COVE_TYPE</code><em class=\"property\"> = 'cove'</em><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.COVE_TYPE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.ELMO_TYPE\">\n<code class=\"sig-name descname\">ELMO_TYPE</code><em class=\"property\"> = 'elmo'</em><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.ELMO_TYPE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.EXACT_MATCH_TYPE\">\n<code class=\"sig-name descname\">EXACT_MATCH_TYPE</code><em class=\"property\"> = 'exact_match'</em><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.EXACT_MATCH_TYPE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.FEATURE_TYPE\">\n<code class=\"sig-name descname\">FEATURE_TYPE</code><em class=\"property\"> = 'feature'</em><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.FEATURE_TYPE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.FREQUENT_WORD_TYPE\">\n<code class=\"sig-name descname\">FREQUENT_WORD_TYPE</code><em class=\"property\"> = 'frequent_word'</em><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.FREQUENT_WORD_TYPE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.LINGUISTIC_TYPE\">\n<code class=\"sig-name descname\">LINGUISTIC_TYPE</code><em class=\"property\"> = 'linguistic'</em><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.LINGUISTIC_TYPE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.WORD_TYPE\">\n<code class=\"sig-name descname\">WORD_TYPE</code><em class=\"property\"> = 'word'</em><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.WORD_TYPE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.embedding_fn\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">embedding_fn</code><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.embedding_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.indexer\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">indexer</code><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.indexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.set_vocab\">\n<code class=\"sig-name descname\">set_vocab</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_maker.html#TokenMaker.set_vocab\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.set_vocab\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.tokenizer\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">tokenizer</code><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.tokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.vocab\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">vocab</code><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.vocab\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_maker.TokenMaker.vocab_config\">\n<em class=\"property\">property </em><code class=\"sig-name descname\">vocab_config</code><a class=\"headerlink\" href=\"#claf.tokens.token_maker.TokenMaker.vocab_config\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.vocabulary\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.vocabulary.Vocab\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.vocabulary.</code><code class=\"sig-name descname\">Vocab</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_name</em>, <em class=\"sig-param\">pad_token=None</em>, <em class=\"sig-param\">oov_token=None</em>, <em class=\"sig-param\">start_token=None</em>, <em class=\"sig-param\">end_token=None</em>, <em class=\"sig-param\">cls_token=None</em>, <em class=\"sig-param\">sep_token=None</em>, <em class=\"sig-param\">min_count=None</em>, <em class=\"sig-param\">max_vocab_size=None</em>, <em class=\"sig-param\">frequent_count=None</em>, <em class=\"sig-param\">pretrained_path=None</em>, <em class=\"sig-param\">pretrained_token=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<blockquote>\n<div><p>Vocaburary Class</p>\n<p>Vocab consists of token_to_index and index_to_token.</p>\n<ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_name: Token name (Token and Vocab is one-to-one relationship)</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>pad_token: padding token value (eg. &lt;pad&gt;)\noov_token: out-of-vocaburary token value (eg. &lt;unk&gt;)\nstart_token: start token value (eg. &lt;s&gt;, &lt;bos&gt;)\nend_token: end token value (eg. &lt;/s&gt;, &lt;eos&gt;)\ncls_token: CLS token value for BERT (eg. [CLS])\nsep_token: SEP token value for BERT (eg. [SEP])\nmin_count: token’s minimal frequent count.</p>\n<blockquote>\n<div><p>when you define min_count, tokens remain that bigger than min_count.</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>max_vocab_size: vocaburary’s maximun size.</dt><dd><p>when you define max_vocab_size, tokens are selected according to frequent count.</p>\n</dd>\n<dt>frequent_count: get frequent_count threshold_index.</dt><dd><p>(eg. frequent_count = 1000, threshold_index is the tokens that frequent_count is 999 index number.)</p>\n</dd>\n<dt>pretrained_path: pretrained vocab file path</dt><dd><p>(format: A</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n</div></blockquote>\n<p>B\nC\nD\n…)</p>\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.vocabulary.Vocab.DEFAULT_OOV_INDEX\">\n<code class=\"sig-name descname\">DEFAULT_OOV_INDEX</code><em class=\"property\"> = 1</em><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.DEFAULT_OOV_INDEX\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.vocabulary.Vocab.DEFAULT_OOV_TOKEN\">\n<code class=\"sig-name descname\">DEFAULT_OOV_TOKEN</code><em class=\"property\"> = '[UNK]'</em><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.DEFAULT_OOV_TOKEN\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.vocabulary.Vocab.DEFAULT_PAD_INDEX\">\n<code class=\"sig-name descname\">DEFAULT_PAD_INDEX</code><em class=\"property\"> = 0</em><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.DEFAULT_PAD_INDEX\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.vocabulary.Vocab.DEFAULT_PAD_TOKEN\">\n<code class=\"sig-name descname\">DEFAULT_PAD_TOKEN</code><em class=\"property\"> = '[PAD]'</em><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.DEFAULT_PAD_TOKEN\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.vocabulary.Vocab.PRETRAINED_ALL\">\n<code class=\"sig-name descname\">PRETRAINED_ALL</code><em class=\"property\"> = 'all'</em><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.PRETRAINED_ALL\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.vocabulary.Vocab.PRETRAINED_INTERSECT\">\n<code class=\"sig-name descname\">PRETRAINED_INTERSECT</code><em class=\"property\"> = 'intersect'</em><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.PRETRAINED_INTERSECT\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.vocabulary.Vocab.add\">\n<code class=\"sig-name descname\">add</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token</em>, <em class=\"sig-param\">predefine_vocab=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab.add\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.add\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.vocabulary.Vocab.build\">\n<code class=\"sig-name descname\">build</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_counter</em>, <em class=\"sig-param\">predefine_vocab=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab.build\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.build\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>build token with token_counter</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_counter: (collections.Counter) token’s frequent_count Counter.</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.vocabulary.Vocab.build_with_pretrained_file\">\n<code class=\"sig-name descname\">build_with_pretrained_file</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_counter</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab.build_with_pretrained_file\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.build_with_pretrained_file\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.vocabulary.Vocab.dump\">\n<code class=\"sig-name descname\">dump</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab.dump\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.dump\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.vocabulary.Vocab.from_texts\">\n<code class=\"sig-name descname\">from_texts</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">texts</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab.from_texts\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.from_texts\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.vocabulary.Vocab.get_all_tokens\">\n<code class=\"sig-name descname\">get_all_tokens</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab.get_all_tokens\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.get_all_tokens\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.vocabulary.Vocab.get_index\">\n<code class=\"sig-name descname\">get_index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab.get_index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.get_index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.vocabulary.Vocab.get_token\">\n<code class=\"sig-name descname\">get_token</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">index</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab.get_token\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.get_token\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.vocabulary.Vocab.init\">\n<code class=\"sig-name descname\">init</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab.init\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.init\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.vocabulary.Vocab.load\">\n<code class=\"sig-name descname\">load</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab.load\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.load\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.vocabulary.Vocab.to_text\">\n<code class=\"sig-name descname\">to_text</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#Vocab.to_text\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.Vocab.to_text\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.vocabulary.VocabDict\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.vocabulary.</code><code class=\"sig-name descname\">VocabDict</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">oov_value</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/vocabulary.html#VocabDict\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.vocabulary.VocabDict\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/collections.html#collections.defaultdict\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">collections.defaultdict</span></code></a></p>\n<p>Vocab DefaultDict Class</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>oov_value: out-of-vocaburary token value (eg. &lt;unk&gt;)</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.tokens\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.tokens\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.tokens.BertTokenMaker\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.</code><code class=\"sig-name descname\">BertTokenMaker</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">indexer_config</em>, <em class=\"sig-param\">embedding_config</em>, <em class=\"sig-param\">vocab_config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens.html#BertTokenMaker\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.BertTokenMaker\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_maker.TokenMaker\" title=\"claf.tokens.token_maker.TokenMaker\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_maker.TokenMaker</span></code></a></p>\n<p>BERT Token\nPre-training of Deep Bidirectional Transformers for Language Understanding</p>\n<dl class=\"simple\">\n<dt>example.</dt><dd><p>hello -&gt; [‘[CLS]’, ‘he’, ‘##llo’, [SEP]] -&gt; [1, 4, 7, 2] -&gt; BERT -&gt; tensor</p>\n</dd>\n<dt>consisting of</dt><dd><ul class=\"simple\">\n<li><p>tokenizer: WordTokenizer</p></li>\n<li><p>indexer: WordIndexer</p></li>\n<li><p>embedding: ELMoEmbedding (Language Modeling BiLSTM)</p></li>\n<li><p>vocab: Vocab</p></li>\n</ul>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.CharTokenMaker\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.</code><code class=\"sig-name descname\">CharTokenMaker</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">indexer_config</em>, <em class=\"sig-param\">embedding_config</em>, <em class=\"sig-param\">vocab_config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens.html#CharTokenMaker\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.CharTokenMaker\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_maker.TokenMaker\" title=\"claf.tokens.token_maker.TokenMaker\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_maker.TokenMaker</span></code></a></p>\n<p>Character Token</p>\n<p>Character-level Convolutional Networks for Text Classification\n(<a class=\"reference external\" href=\"https://arxiv.org/abs/1509.01626\">https://arxiv.org/abs/1509.01626</a>)</p>\n<dl class=\"simple\">\n<dt>example.</dt><dd><p>hello -&gt; [‘h’, ‘e’, ‘l’, ‘l’, ‘o’] -&gt; [2, 3, 4, 4, 5] -&gt; CharCNN -&gt; tensor</p>\n</dd>\n<dt>consisting of</dt><dd><ul class=\"simple\">\n<li><p>tokenizer: CharTokenizer</p></li>\n<li><p>indexer: CharIndexer</p></li>\n<li><p>embedding: CharEmbedding (CharCNN)</p></li>\n<li><p>vocab: Vocab</p></li>\n</ul>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.CoveTokenMaker\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.</code><code class=\"sig-name descname\">CoveTokenMaker</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">indexer_config</em>, <em class=\"sig-param\">embedding_config</em>, <em class=\"sig-param\">vocab_config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens.html#CoveTokenMaker\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.CoveTokenMaker\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_maker.TokenMaker\" title=\"claf.tokens.token_maker.TokenMaker\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_maker.TokenMaker</span></code></a></p>\n<p>CoVe Token</p>\n<p>Learned in Translation: Contextualized Word Vectors (McCann et. al. 2017)\n(<a class=\"reference external\" href=\"https://github.com/salesforce/cove\">https://github.com/salesforce/cove</a>)</p>\n<dl class=\"simple\">\n<dt>example.</dt><dd><p>hello -&gt; [‘hello’] -&gt; [2] -&gt; CoVe -&gt; tensor</p>\n</dd>\n<dt>consisting of</dt><dd><ul class=\"simple\">\n<li><p>tokenizer: WordTokenizer</p></li>\n<li><p>indexer: WordIndexer</p></li>\n<li><p>embedding: CoveEmbedding (Machine Translation LSTM)</p></li>\n<li><p>vocab: Vocab</p></li>\n</ul>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.ElmoTokenMaker\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.</code><code class=\"sig-name descname\">ElmoTokenMaker</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">indexer_config</em>, <em class=\"sig-param\">embedding_config</em>, <em class=\"sig-param\">vocab_config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens.html#ElmoTokenMaker\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.ElmoTokenMaker\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_maker.TokenMaker\" title=\"claf.tokens.token_maker.TokenMaker\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_maker.TokenMaker</span></code></a></p>\n<p>ELMo Token\nEmbedding from Language Modeling</p>\n<p>Deep contextualized word representations\n(<a class=\"reference external\" href=\"https://github.com/allenai/allennlp/blob/master/allennlp/modules/elmo.py\">https://github.com/allenai/allennlp/blob/master/allennlp/modules/elmo.py</a>)</p>\n<dl class=\"simple\">\n<dt>example.</dt><dd><p>hello -&gt; [‘h’, ‘e’, ‘l’, ‘l’, ‘o’] -&gt; [2, 3, 4, 4, 5] -&gt; ELMo -&gt; tensor</p>\n</dd>\n<dt>consisting of</dt><dd><ul class=\"simple\">\n<li><p>tokenizer: WordTokenizer</p></li>\n<li><p>indexer: WordIndexer</p></li>\n<li><p>embedding: ELMoEmbedding (Language Modeling BiLSTM)</p></li>\n<li><p>vocab: Vocab</p></li>\n</ul>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.ExactMatchTokenMaker\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.</code><code class=\"sig-name descname\">ExactMatchTokenMaker</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">indexer_config</em>, <em class=\"sig-param\">embedding_config</em>, <em class=\"sig-param\">vocab_config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens.html#ExactMatchTokenMaker\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.ExactMatchTokenMaker\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_maker.TokenMaker\" title=\"claf.tokens.token_maker.TokenMaker\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_maker.TokenMaker</span></code></a></p>\n<p>Exact Match Token (Sparse Feature)</p>\n<p>Three simple binary features, indicating whether p_i can be exactly matched\nto one question word in q, either in its original, lowercase or lemma form.</p>\n<dl class=\"simple\">\n<dt>example.</dt><dd><p>c: i do, q: i -&gt; [‘i’, ‘do’] -&gt; [1, 0] -&gt; tensor</p>\n</dd>\n<dt>consisting of</dt><dd><ul class=\"simple\">\n<li><p>tokenizer: WordTokenizer</p></li>\n<li><p>indexer: WordIndexer</p></li>\n<li><p>embedding: SparseFeature</p></li>\n<li><p>vocab: Vocab</p></li>\n</ul>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.FeatureTokenMaker\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.</code><code class=\"sig-name descname\">FeatureTokenMaker</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">indexer_config</em>, <em class=\"sig-param\">embedding_config</em>, <em class=\"sig-param\">vocab_config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens.html#FeatureTokenMaker\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.FeatureTokenMaker\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_maker.TokenMaker\" title=\"claf.tokens.token_maker.TokenMaker\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_maker.TokenMaker</span></code></a></p>\n<p>Feature Token</p>\n<p>Do not use Embedding function.\nJust pass indexed_feature</p>\n<dl class=\"simple\">\n<dt>example.</dt><dd><p>hello -&gt; [‘hello’, ‘world’] -&gt; [3, 5] -&gt; tensor</p>\n</dd>\n<dt>consisting of</dt><dd><ul class=\"simple\">\n<li><p>tokenizer: Tokenizer (need to define unit)</p></li>\n<li><p>indexer: WordIndexer</p></li>\n<li><p>embedding: None</p></li>\n<li><p>vocab: Vocab</p></li>\n</ul>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.FrequentWordTokenMaker\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.</code><code class=\"sig-name descname\">FrequentWordTokenMaker</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">indexer_config</em>, <em class=\"sig-param\">embedding_config</em>, <em class=\"sig-param\">vocab_config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens.html#FrequentWordTokenMaker\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.FrequentWordTokenMaker\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_maker.TokenMaker\" title=\"claf.tokens.token_maker.TokenMaker\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_maker.TokenMaker</span></code></a></p>\n<p>Frequent-Tuning Word Token</p>\n<p>word token + pre-trained word embeddings fixed and only fine-tune the N most frequent</p>\n<dl class=\"simple\">\n<dt>example.</dt><dd><p>i do -&gt; [‘i’, ‘do’] -&gt; [1, 2] -&gt; Embedding Matrix -&gt; tensor\nfinetuning only ‘do’</p>\n</dd>\n<dt>consisting of</dt><dd><ul class=\"simple\">\n<li><p>tokenizer: WordTokenizer</p></li>\n<li><p>indexer: WordIndexer</p></li>\n<li><p>embedding: FrequentTuningWordEmbedding</p></li>\n<li><p>vocab: Vocab</p></li>\n</ul>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.LinguisticTokenMaker\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.</code><code class=\"sig-name descname\">LinguisticTokenMaker</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">indexer_config</em>, <em class=\"sig-param\">embedding_config</em>, <em class=\"sig-param\">vocab_config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens.html#LinguisticTokenMaker\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.LinguisticTokenMaker\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_maker.TokenMaker\" title=\"claf.tokens.token_maker.TokenMaker\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_maker.TokenMaker</span></code></a></p>\n<p>Exact Match Token (Sparse Feature)</p>\n<p>Three simple binary features, indicating whether p_i can be exactly matched\nto one question word in q, either in its original, lowercase or lemma form.</p>\n<dl class=\"simple\">\n<dt>example.</dt><dd><p>c: i do, q: i -&gt; [‘i’, ‘do’] -&gt; [1, 0] -&gt; tensor</p>\n</dd>\n<dt>consisting of</dt><dd><ul class=\"simple\">\n<li><p>tokenizer: WordTokenizer</p></li>\n<li><p>indexer: WordIndexer</p></li>\n<li><p>embedding: SparseFeature</p></li>\n<li><p>vocab: Vocab</p></li>\n</ul>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.WordTokenMaker\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.</code><code class=\"sig-name descname\">WordTokenMaker</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizers</em>, <em class=\"sig-param\">indexer_config</em>, <em class=\"sig-param\">embedding_config</em>, <em class=\"sig-param\">vocab_config</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens.html#WordTokenMaker\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.WordTokenMaker\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_maker.TokenMaker\" title=\"claf.tokens.token_maker.TokenMaker\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_maker.TokenMaker</span></code></a></p>\n<p>Word Token (default)</p>\n<blockquote>\n<div><p>i do -&gt; [‘i’, ‘do’] -&gt; [1, 2] -&gt; Embedding Matrix -&gt; tensor</p>\n</div></blockquote>\n<dl class=\"simple\">\n<dt>consisting of</dt><dd><ul class=\"simple\">\n<li><p>tokenizer: WordTokenizer</p></li>\n<li><p>indexer: WordIndexer</p></li>\n<li><p>embedding: WordEmbedding</p></li>\n<li><p>vocab: Vocab</p></li>\n</ul>\n</dd>\n</dl>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.basic_embedding_fn\">\n<code class=\"sig-prename descclassname\">claf.tokens.</code><code class=\"sig-name descname\">basic_embedding_fn</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">embedding_config</em>, <em class=\"sig-param\">module</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens.html#basic_embedding_fn\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.basic_embedding_fn\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.tokens.embedding.html\" class=\"btn btn-neutral float-right\" title=\"claf.tokens.embedding package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.modules.layer.html\" class=\"btn btn-neutral\" title=\"claf.modules.layer package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.tokens.indexer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.indexer package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.tokens.token_embedder package\" href=\"claf.tokens.token_embedder.html\" />\n    <link rel=\"prev\" title=\"claf.tokens.embedding package\" href=\"claf.tokens.embedding.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.tokens.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.embedding.html\">claf.tokens.embedding package</a></li>\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.tokens.indexer package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.tokens.indexer.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.tokens.indexer\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.token_embedder.html\">claf.tokens.token_embedder package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.tokenizer.html\">claf.tokens.tokenizer package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens.cove\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.tokens.html\">claf.tokens package</a> &raquo;</li>\n        \n      <li>claf.tokens.indexer package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.tokens.indexer.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-tokens-indexer-package\">\n<h1>claf.tokens.indexer package<a class=\"headerlink\" href=\"#claf-tokens-indexer-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.tokens.indexer.base\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.tokens.indexer.base\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.tokens.indexer.base.TokenIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.base.</code><code class=\"sig-name descname\">TokenIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/base.html#TokenIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Token Indexer</p>\n<p>indexing tokens (eg. ‘hi’ -&gt; 4)</p>\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.base.TokenIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/base.html#TokenIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.base.TokenIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.base.TokenIndexer.set_vocab\">\n<code class=\"sig-name descname\">set_vocab</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">vocab</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/base.html#TokenIndexer.set_vocab\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.base.TokenIndexer.set_vocab\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.indexer.bert_indexer\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.indexer.bert_indexer.BertIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.bert_indexer.</code><code class=\"sig-name descname\">BertIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em>, <em class=\"sig-param\">do_tokenize=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/bert_indexer.html#BertIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.bert_indexer.BertIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Bert Token Indexer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Property</dt><dd><p>vocab: Vocab (claf.tokens.vocabulary)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>tokenizer: SubwordTokenizer</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>lowercase: word token to lowercase\ninsert_start: insert start_token to first\ninsert_end: append end_token</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.bert_indexer.BertIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/bert_indexer.html#BertIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.bert_indexer.BertIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.indexer.char_indexer\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.indexer.char_indexer.CharIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.char_indexer.</code><code class=\"sig-name descname\">CharIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em>, <em class=\"sig-param\">insert_char_start=None</em>, <em class=\"sig-param\">insert_char_end=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/char_indexer.html#CharIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.char_indexer.CharIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Character Token Indexer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Property</dt><dd><p>vocab: Vocab (claf.tokens.vocabulary)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>tokenizer: CharTokenizer</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>insert_char_start: insert start index (eg. [‘h’, ‘i’] -&gt; [‘&lt;s&gt;’, ‘h’, ‘i’] )</dt><dd><p>default is None</p>\n</dd>\n<dt>insert_char_end: insert end index (eg. [‘h’, ‘i’] -&gt; [‘h’, ‘i’, ‘&lt;/s&gt;’] )</dt><dd><p>default is None</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.char_indexer.CharIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/char_indexer.html#CharIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.char_indexer.CharIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.char_indexer.CharIndexer.index_token\">\n<code class=\"sig-name descname\">index_token</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">chars</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/char_indexer.html#CharIndexer.index_token\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.char_indexer.CharIndexer.index_token\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.indexer.elmo_indexer\"></span><p>This code is from allenai/allennlp\n(<a class=\"reference external\" href=\"https://github.com/allenai/allennlp/blob/master/allennlp/data/token_indexers/elmo_indexer.py\">https://github.com/allenai/allennlp/blob/master/allennlp/data/token_indexers/elmo_indexer.py</a>)</p>\n<dl class=\"class\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.elmo_indexer.</code><code class=\"sig-name descname\">ELMoIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/elmo_indexer.html#ELMoIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Maps individual tokens to sequences of character ids, compatible with ELMo.\nTo be consistent with previously trained models, we include it here as special of existing\ncharacter indexers.</p>\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.BOS_TOKEN\">\n<code class=\"sig-name descname\">BOS_TOKEN</code><em class=\"property\"> = '&lt;S&gt;'</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.BOS_TOKEN\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.EOS_TOKEN\">\n<code class=\"sig-name descname\">EOS_TOKEN</code><em class=\"property\"> = '&lt;/S&gt;'</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.EOS_TOKEN\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.beginning_of_sentence_character\">\n<code class=\"sig-name descname\">beginning_of_sentence_character</code><em class=\"property\"> = 256</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.beginning_of_sentence_character\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.beginning_of_sentence_characters\">\n<code class=\"sig-name descname\">beginning_of_sentence_characters</code><em class=\"property\"> = [258, 256, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260]</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.beginning_of_sentence_characters\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.beginning_of_word_character\">\n<code class=\"sig-name descname\">beginning_of_word_character</code><em class=\"property\"> = 258</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.beginning_of_word_character\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.end_of_sentence_character\">\n<code class=\"sig-name descname\">end_of_sentence_character</code><em class=\"property\"> = 257</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.end_of_sentence_character\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.end_of_sentence_characters\">\n<code class=\"sig-name descname\">end_of_sentence_characters</code><em class=\"property\"> = [258, 257, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260]</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.end_of_sentence_characters\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.end_of_word_character\">\n<code class=\"sig-name descname\">end_of_word_character</code><em class=\"property\"> = 259</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.end_of_word_character\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/elmo_indexer.html#ELMoIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.index_token\">\n<code class=\"sig-name descname\">index_token</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">word</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/elmo_indexer.html#ELMoIndexer.index_token\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.index_token\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.max_word_length\">\n<code class=\"sig-name descname\">max_word_length</code><em class=\"property\"> = 50</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.max_word_length\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.elmo_indexer.ELMoIndexer.padding_character\">\n<code class=\"sig-name descname\">padding_character</code><em class=\"property\"> = 260</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.elmo_indexer.ELMoIndexer.padding_character\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.indexer.exact_match_indexer\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.exact_match_indexer.</code><code class=\"sig-name descname\">ExactMatchIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em>, <em class=\"sig-param\">lower=True</em>, <em class=\"sig-param\">lemma=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/exact_match_indexer.html#ExactMatchIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Exact Match Token Indexer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Property</dt><dd><p>vocab: Vocab (claf.tokens.vocabulary)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>tokenizer: WordTokenizer</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>lower: add lower feature. default is True (0 or 1)\nlemma: add lemma case feature. feature is True (0 or 1)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em>, <em class=\"sig-param\">query_text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/exact_match_indexer.html#ExactMatchIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer.index_token\">\n<code class=\"sig-name descname\">index_token</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token</em>, <em class=\"sig-param\">query_tokens</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/exact_match_indexer.html#ExactMatchIndexer.index_token\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer.index_token\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.indexer.linguistic_indexer\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.indexer.linguistic_indexer.LinguisticIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.linguistic_indexer.</code><code class=\"sig-name descname\">LinguisticIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em>, <em class=\"sig-param\">pos_tag=None</em>, <em class=\"sig-param\">ner=None</em>, <em class=\"sig-param\">dep=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/linguistic_indexer.html#LinguisticIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.linguistic_indexer.LinguisticIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Linguistic Token Indexer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Property</dt><dd><p>vocab: Vocab (claf.tokens.vocabulary)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>tokenizer: WordTokenizer</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>pos_tag: POS Tagging\nner: Named Entity Recognition\ndep: Dependency Parser</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.linguistic_indexer.LinguisticIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/linguistic_indexer.html#LinguisticIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.linguistic_indexer.LinguisticIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.indexer.word_indexer\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.indexer.word_indexer.WordIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.word_indexer.</code><code class=\"sig-name descname\">WordIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em>, <em class=\"sig-param\">do_tokenize=True</em>, <em class=\"sig-param\">lowercase=False</em>, <em class=\"sig-param\">insert_start=None</em>, <em class=\"sig-param\">insert_end=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/word_indexer.html#WordIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.word_indexer.WordIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Word Token Indexer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Property</dt><dd><p>vocab: Vocab (claf.tokens.vocabulary)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>tokenizer: WordTokenizer</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>lowercase: word token to lowercase\ninsert_start: insert start_token to first\ninsert_end: append end_token</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.word_indexer.WordIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/word_indexer.html#WordIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.word_indexer.WordIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.tokens.indexer\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.tokens.indexer\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.tokens.indexer.BertIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.</code><code class=\"sig-name descname\">BertIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em>, <em class=\"sig-param\">do_tokenize=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/bert_indexer.html#BertIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.BertIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Bert Token Indexer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Property</dt><dd><p>vocab: Vocab (claf.tokens.vocabulary)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>tokenizer: SubwordTokenizer</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>lowercase: word token to lowercase\ninsert_start: insert start_token to first\ninsert_end: append end_token</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.BertIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/bert_indexer.html#BertIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.BertIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.indexer.CharIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.</code><code class=\"sig-name descname\">CharIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em>, <em class=\"sig-param\">insert_char_start=None</em>, <em class=\"sig-param\">insert_char_end=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/char_indexer.html#CharIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.CharIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Character Token Indexer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Property</dt><dd><p>vocab: Vocab (claf.tokens.vocabulary)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>tokenizer: CharTokenizer</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><dl class=\"simple\">\n<dt>insert_char_start: insert start index (eg. [‘h’, ‘i’] -&gt; [‘&lt;s&gt;’, ‘h’, ‘i’] )</dt><dd><p>default is None</p>\n</dd>\n<dt>insert_char_end: insert end index (eg. [‘h’, ‘i’] -&gt; [‘h’, ‘i’, ‘&lt;/s&gt;’] )</dt><dd><p>default is None</p>\n</dd>\n</dl>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.CharIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/char_indexer.html#CharIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.CharIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.CharIndexer.index_token\">\n<code class=\"sig-name descname\">index_token</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">chars</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/char_indexer.html#CharIndexer.index_token\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.CharIndexer.index_token\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.</code><code class=\"sig-name descname\">ELMoIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/elmo_indexer.html#ELMoIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Maps individual tokens to sequences of character ids, compatible with ELMo.\nTo be consistent with previously trained models, we include it here as special of existing\ncharacter indexers.</p>\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.BOS_TOKEN\">\n<code class=\"sig-name descname\">BOS_TOKEN</code><em class=\"property\"> = '&lt;S&gt;'</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.BOS_TOKEN\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.EOS_TOKEN\">\n<code class=\"sig-name descname\">EOS_TOKEN</code><em class=\"property\"> = '&lt;/S&gt;'</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.EOS_TOKEN\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.beginning_of_sentence_character\">\n<code class=\"sig-name descname\">beginning_of_sentence_character</code><em class=\"property\"> = 256</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.beginning_of_sentence_character\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.beginning_of_sentence_characters\">\n<code class=\"sig-name descname\">beginning_of_sentence_characters</code><em class=\"property\"> = [258, 256, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260]</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.beginning_of_sentence_characters\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.beginning_of_word_character\">\n<code class=\"sig-name descname\">beginning_of_word_character</code><em class=\"property\"> = 258</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.beginning_of_word_character\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.end_of_sentence_character\">\n<code class=\"sig-name descname\">end_of_sentence_character</code><em class=\"property\"> = 257</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.end_of_sentence_character\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.end_of_sentence_characters\">\n<code class=\"sig-name descname\">end_of_sentence_characters</code><em class=\"property\"> = [258, 257, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260]</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.end_of_sentence_characters\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.end_of_word_character\">\n<code class=\"sig-name descname\">end_of_word_character</code><em class=\"property\"> = 259</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.end_of_word_character\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/elmo_indexer.html#ELMoIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.index_token\">\n<code class=\"sig-name descname\">index_token</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">word</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/elmo_indexer.html#ELMoIndexer.index_token\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.index_token\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.max_word_length\">\n<code class=\"sig-name descname\">max_word_length</code><em class=\"property\"> = 50</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.max_word_length\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.indexer.ELMoIndexer.padding_character\">\n<code class=\"sig-name descname\">padding_character</code><em class=\"property\"> = 260</em><a class=\"headerlink\" href=\"#claf.tokens.indexer.ELMoIndexer.padding_character\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.indexer.ExactMatchIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.</code><code class=\"sig-name descname\">ExactMatchIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em>, <em class=\"sig-param\">lower=True</em>, <em class=\"sig-param\">lemma=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/exact_match_indexer.html#ExactMatchIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.ExactMatchIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Exact Match Token Indexer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Property</dt><dd><p>vocab: Vocab (claf.tokens.vocabulary)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>tokenizer: WordTokenizer</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>lower: add lower feature. default is True (0 or 1)\nlemma: add lemma case feature. feature is True (0 or 1)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.ExactMatchIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em>, <em class=\"sig-param\">query_text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/exact_match_indexer.html#ExactMatchIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.ExactMatchIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.ExactMatchIndexer.index_token\">\n<code class=\"sig-name descname\">index_token</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token</em>, <em class=\"sig-param\">query_tokens</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/exact_match_indexer.html#ExactMatchIndexer.index_token\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.ExactMatchIndexer.index_token\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.indexer.LinguisticIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.</code><code class=\"sig-name descname\">LinguisticIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em>, <em class=\"sig-param\">pos_tag=None</em>, <em class=\"sig-param\">ner=None</em>, <em class=\"sig-param\">dep=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/linguistic_indexer.html#LinguisticIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.LinguisticIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Linguistic Token Indexer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Property</dt><dd><p>vocab: Vocab (claf.tokens.vocabulary)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>tokenizer: WordTokenizer</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>pos_tag: POS Tagging\nner: Named Entity Recognition\ndep: Dependency Parser</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.LinguisticIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/linguistic_indexer.html#LinguisticIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.LinguisticIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.indexer.WordIndexer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.indexer.</code><code class=\"sig-name descname\">WordIndexer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">tokenizer</em>, <em class=\"sig-param\">do_tokenize=True</em>, <em class=\"sig-param\">lowercase=False</em>, <em class=\"sig-param\">insert_start=None</em>, <em class=\"sig-param\">insert_end=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/word_indexer.html#WordIndexer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.WordIndexer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.indexer.base.TokenIndexer\" title=\"claf.tokens.indexer.base.TokenIndexer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.indexer.base.TokenIndexer</span></code></a></p>\n<p>Word Token Indexer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Property</dt><dd><p>vocab: Vocab (claf.tokens.vocabulary)</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>tokenizer: WordTokenizer</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>lowercase: word token to lowercase\ninsert_start: insert start_token to first\ninsert_end: append end_token</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.indexer.WordIndexer.index\">\n<code class=\"sig-name descname\">index</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/indexer/word_indexer.html#WordIndexer.index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.indexer.WordIndexer.index\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>indexing function</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.tokens.token_embedder.html\" class=\"btn btn-neutral float-right\" title=\"claf.tokens.token_embedder package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.tokens.embedding.html\" class=\"btn btn-neutral\" title=\"claf.tokens.embedding package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.tokens.token_embedder.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.token_embedder package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"claf.tokens.tokenizer package\" href=\"claf.tokens.tokenizer.html\" />\n    <link rel=\"prev\" title=\"claf.tokens.indexer package\" href=\"claf.tokens.indexer.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.tokens.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.embedding.html\">claf.tokens.embedding package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.indexer.html\">claf.tokens.indexer package</a></li>\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.tokens.token_embedder package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.tokens.token_embedder.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.tokens.token_embedder\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.tokenizer.html\">claf.tokens.tokenizer package</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens.cove\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.tokens.html\">claf.tokens package</a> &raquo;</li>\n        \n      <li>claf.tokens.token_embedder package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.tokens.token_embedder.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-tokens-token-embedder-package\">\n<h1>claf.tokens.token_embedder package<a class=\"headerlink\" href=\"#claf-tokens-token-embedder-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.tokens.token_embedder.base\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.tokens.token_embedder.base\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.tokens.token_embedder.base.TokenEmbedder\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.token_embedder.base.</code><code class=\"sig-name descname\">TokenEmbedder</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/base.html#TokenEmbedder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.base.TokenEmbedder\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">torch.nn.modules.module.Module</span></code></p>\n<p>Token Embedder</p>\n<p>Take a tensor(indexed token) look up Embedding modules.</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_makers: dictionary of TokenMaker (claf.token_makers.token)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_embedder.base.TokenEmbedder.add_embedding_modules\">\n<code class=\"sig-name descname\">add_embedding_modules</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/base.html#TokenEmbedder.add_embedding_modules\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.base.TokenEmbedder.add_embedding_modules\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>add embedding module to TokenEmbedder</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_embedder.base.TokenEmbedder.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">params={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/base.html#TokenEmbedder.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.base.TokenEmbedder.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_embedder.base.TokenEmbedder.get_embed_dim\">\n<code class=\"sig-name descname\">get_embed_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/base.html#TokenEmbedder.get_embed_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.base.TokenEmbedder.get_embed_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.token_embedder.basic_embedder\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.token_embedder.basic_embedder.</code><code class=\"sig-name descname\">BasicTokenEmbedder</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/basic_embedder.html#BasicTokenEmbedder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_embedder.base.TokenEmbedder\" title=\"claf.tokens.token_embedder.base.TokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_embedder.base.TokenEmbedder</span></code></a></p>\n<p>Basic Token Embedder</p>\n<p>Take a tensor(indexed token) look up Embedding modules.\nOutput is concatenating all embedded tensors.</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_makers: dictionary of TokenMaker (claf.tokens.token_maker)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">except_keys=[]</em>, <em class=\"sig-param\">params={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/basic_embedder.html#BasicTokenEmbedder.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder.get_embed_dim\">\n<code class=\"sig-name descname\">get_embed_dim</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">except_keys=[]</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/basic_embedder.html#BasicTokenEmbedder.get_embed_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder.get_embed_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.token_embedder.reading_comprehension_embedder\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.token_embedder.reading_comprehension_embedder.</code><code class=\"sig-name descname\">RCTokenEmbedder</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/reading_comprehension_embedder.html#RCTokenEmbedder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_embedder.base.TokenEmbedder\" title=\"claf.tokens.token_embedder.base.TokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_embedder.base.TokenEmbedder</span></code></a></p>\n<p>Reading Comprehension Token Embedder</p>\n<p>Take a tensor(indexed token) look up Embedding modules.\nInputs are seperated context and query for individual token setting.</p>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><p>token_makers: dictionary of TokenMaker (claf.tokens.token_maker)\nvocabs: dictionary of vocab</p>\n<blockquote>\n<div><p>{“token_name”: Vocab (claf.token_makers.vocaburary), …}</p>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder.EXCLUSIVE_TOKENS\">\n<code class=\"sig-name descname\">EXCLUSIVE_TOKENS</code><em class=\"property\"> = ['exact_match']</em><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder.EXCLUSIVE_TOKENS\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">query</em>, <em class=\"sig-param\">context_params={}</em>, <em class=\"sig-param\">query_params={}</em>, <em class=\"sig-param\">query_align=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/reading_comprehension_embedder.html#RCTokenEmbedder.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>context: context inputs (eg. {“token_name1”: tensor, “token_name2”: tensor, …})\nquery: query inputs (eg. {“token_name1”: tensor, “token_name2”: tensor, …})</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>context_params: custom context parameters\nquery_params: query context parameters\nquery_align: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder.get_embed_dim\">\n<code class=\"sig-name descname\">get_embed_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/reading_comprehension_embedder.html#RCTokenEmbedder.get_embed_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder.get_embed_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.tokens.token_embedder\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.tokens.token_embedder\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.tokens.token_embedder.BasicTokenEmbedder\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.token_embedder.</code><code class=\"sig-name descname\">BasicTokenEmbedder</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/basic_embedder.html#BasicTokenEmbedder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.BasicTokenEmbedder\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_embedder.base.TokenEmbedder\" title=\"claf.tokens.token_embedder.base.TokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_embedder.base.TokenEmbedder</span></code></a></p>\n<p>Basic Token Embedder</p>\n<p>Take a tensor(indexed token) look up Embedding modules.\nOutput is concatenating all embedded tensors.</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>token_makers: dictionary of TokenMaker (claf.tokens.token_maker)</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_embedder.BasicTokenEmbedder.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">inputs</em>, <em class=\"sig-param\">except_keys=[]</em>, <em class=\"sig-param\">params={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/basic_embedder.html#BasicTokenEmbedder.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.BasicTokenEmbedder.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Defines the computation performed at every call.</p>\n<p>Should be overridden by all subclasses.</p>\n<div class=\"admonition note\">\n<p class=\"admonition-title\">Note</p>\n<p>Although the recipe for forward pass needs to be defined within\nthis function, one should call the <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Module</span></code> instance afterwards\ninstead of this since the former takes care of running the\nregistered hooks while the latter silently ignores them.</p>\n</div>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_embedder.BasicTokenEmbedder.get_embed_dim\">\n<code class=\"sig-name descname\">get_embed_dim</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">except_keys=[]</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/basic_embedder.html#BasicTokenEmbedder.get_embed_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.BasicTokenEmbedder.get_embed_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.token_embedder.RCTokenEmbedder\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.token_embedder.</code><code class=\"sig-name descname\">RCTokenEmbedder</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">token_makers</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/reading_comprehension_embedder.html#RCTokenEmbedder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.RCTokenEmbedder\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.token_embedder.base.TokenEmbedder\" title=\"claf.tokens.token_embedder.base.TokenEmbedder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.token_embedder.base.TokenEmbedder</span></code></a></p>\n<p>Reading Comprehension Token Embedder</p>\n<p>Take a tensor(indexed token) look up Embedding modules.\nInputs are seperated context and query for individual token setting.</p>\n<ul>\n<li><dl>\n<dt>Args:</dt><dd><p>token_makers: dictionary of TokenMaker (claf.tokens.token_maker)\nvocabs: dictionary of vocab</p>\n<blockquote>\n<div><p>{“token_name”: Vocab (claf.token_makers.vocaburary), …}</p>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.token_embedder.RCTokenEmbedder.EXCLUSIVE_TOKENS\">\n<code class=\"sig-name descname\">EXCLUSIVE_TOKENS</code><em class=\"property\"> = ['exact_match']</em><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.RCTokenEmbedder.EXCLUSIVE_TOKENS\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_embedder.RCTokenEmbedder.forward\">\n<code class=\"sig-name descname\">forward</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">context</em>, <em class=\"sig-param\">query</em>, <em class=\"sig-param\">context_params={}</em>, <em class=\"sig-param\">query_params={}</em>, <em class=\"sig-param\">query_align=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/reading_comprehension_embedder.html#RCTokenEmbedder.forward\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.RCTokenEmbedder.forward\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><ul>\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>context: context inputs (eg. {“token_name1”: tensor, “token_name2”: tensor, …})\nquery: query inputs (eg. {“token_name1”: tensor, “token_name2”: tensor, …})</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt>Kwargs:</dt><dd><p>context_params: custom context parameters\nquery_params: query context parameters\nquery_align: f_align(p_i) = sum(a_ij, E(qj), where the attention score a_ij</p>\n<blockquote>\n<div><p>captures the similarity between pi and each question words q_j.\nthese features add soft alignments between similar but non-identical words (e.g., car and vehicle)\nit only apply to ‘context_embed’.</p>\n</div></blockquote>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.token_embedder.RCTokenEmbedder.get_embed_dim\">\n<code class=\"sig-name descname\">get_embed_dim</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/token_embedder/reading_comprehension_embedder.html#RCTokenEmbedder.get_embed_dim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.token_embedder.RCTokenEmbedder.get_embed_dim\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"claf.tokens.tokenizer.html\" class=\"btn btn-neutral float-right\" title=\"claf.tokens.tokenizer package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.tokens.indexer.html\" class=\"btn btn-neutral\" title=\"claf.tokens.indexer package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/claf.tokens.tokenizer.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf.tokens.tokenizer package &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"GLUE\" href=\"reports/glue.html\" />\n    <link rel=\"prev\" title=\"claf.tokens.token_embedder package\" href=\"claf.tokens.token_embedder.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1 current\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a><ul class=\"current\">\n<li class=\"toctree-l2 current\"><a class=\"reference internal\" href=\"claf.tokens.html#subpackages\">Subpackages</a><ul class=\"current\">\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.embedding.html\">claf.tokens.embedding package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.indexer.html\">claf.tokens.indexer package</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.token_embedder.html\">claf.tokens.token_embedder package</a></li>\n<li class=\"toctree-l3 current\"><a class=\"current reference internal\" href=\"#\">claf.tokens.tokenizer package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.tokens.tokenizer.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"#module-claf.tokens.tokenizer\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens.cove\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n          <li><a href=\"claf.tokens.html\">claf.tokens package</a> &raquo;</li>\n        \n      <li>claf.tokens.tokenizer package</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/claf.tokens.tokenizer.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-tokens-tokenizer-package\">\n<h1>claf.tokens.tokenizer package<a class=\"headerlink\" href=\"#claf-tokens-tokenizer-package\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"section\" id=\"module-claf.tokens.tokenizer.base\">\n<span id=\"submodules\"></span><h2>Submodules<a class=\"headerlink\" href=\"#module-claf.tokens.tokenizer.base\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.base.Tokenizer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.base.</code><code class=\"sig-name descname\">Tokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">cache_name</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/base.html#Tokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.base.Tokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Tokenizer Base Class</p>\n<dl class=\"attribute\">\n<dt id=\"claf.tokens.tokenizer.base.Tokenizer.MAX_TO_KEEP_CACHE\">\n<code class=\"sig-name descname\">MAX_TO_KEEP_CACHE</code><em class=\"property\"> = 3</em><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.base.Tokenizer.MAX_TO_KEEP_CACHE\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"method\">\n<dt id=\"claf.tokens.tokenizer.base.Tokenizer.tokenize\">\n<code class=\"sig-name descname\">tokenize</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em>, <em class=\"sig-param\">unit='text'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/base.html#Tokenizer.tokenize\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.base.Tokenizer.tokenize\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.tokenizer.char\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.char.CharTokenizer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.char.</code><code class=\"sig-name descname\">CharTokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">word_tokenizer</em>, <em class=\"sig-param\">config={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/char.html#CharTokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.char.CharTokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.tokenizer.base.Tokenizer\" title=\"claf.tokens.tokenizer.base.Tokenizer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.tokenizer.base.Tokenizer</span></code></a></p>\n<p>Character Tokenizer</p>\n<p>text -&gt; word tokens -&gt; [char tokens]</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>name: tokenizer name [character|decompose_ko]\nword_tokenizer: word tokenizer object</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.tokenizer.pass_text\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.pass_text.PassText\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.pass_text.</code><code class=\"sig-name descname\">PassText</code><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/pass_text.html#PassText\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.pass_text.PassText\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Pass text without tokenize</p>\n<dl class=\"method\">\n<dt id=\"claf.tokens.tokenizer.pass_text.PassText.tokenize\">\n<code class=\"sig-name descname\">tokenize</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/pass_text.html#PassText.tokenize\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.pass_text.PassText.tokenize\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.tokenizer.sent\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.sent.SentTokenizer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.sent.</code><code class=\"sig-name descname\">SentTokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">config={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/sent.html#SentTokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.sent.SentTokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.tokenizer.base.Tokenizer\" title=\"claf.tokens.tokenizer.base.Tokenizer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.tokenizer.base.Tokenizer</span></code></a></p>\n<p>Sentence Tokenizer</p>\n<p>text -&gt; [sent tokens]</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>name: tokenizer name [punkt]</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.tokenizer.subword\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.subword.SubwordTokenizer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.subword.</code><code class=\"sig-name descname\">SubwordTokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">word_tokenizer</em>, <em class=\"sig-param\">config={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/subword.html#SubwordTokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.subword.SubwordTokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.tokenizer.base.Tokenizer\" title=\"claf.tokens.tokenizer.base.Tokenizer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.tokenizer.base.Tokenizer</span></code></a></p>\n<p>Subword Tokenizer</p>\n<p>text -&gt; [word tokens] -&gt; [[sub word tokens], …]</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>name: tokenizer name [wordpiece]</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.tokenizer.utils\"></span><dl class=\"function\">\n<dt id=\"claf.tokens.tokenizer.utils.create_tokenizer_with_regex\">\n<code class=\"sig-prename descclassname\">claf.tokens.tokenizer.utils.</code><code class=\"sig-name descname\">create_tokenizer_with_regex</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">nlp</em>, <em class=\"sig-param\">split_regex</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/utils.html#create_tokenizer_with_regex\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.utils.create_tokenizer_with_regex\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"claf.tokens.tokenizer.utils.load_spacy_model_for_tokenizer\">\n<code class=\"sig-prename descclassname\">claf.tokens.tokenizer.utils.</code><code class=\"sig-name descname\">load_spacy_model_for_tokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">split_regex</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/utils.html#load_spacy_model_for_tokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.utils.load_spacy_model_for_tokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n<span class=\"target\" id=\"module-claf.tokens.tokenizer.word\"></span><dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.word.WordTokenizer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.word.</code><code class=\"sig-name descname\">WordTokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">sent_tokenizer</em>, <em class=\"sig-param\">config={}</em>, <em class=\"sig-param\">split_with_regex=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/word.html#WordTokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.word.WordTokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.tokenizer.base.Tokenizer\" title=\"claf.tokens.tokenizer.base.Tokenizer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.tokenizer.base.Tokenizer</span></code></a></p>\n<p>Word Tokenizer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>name: tokenizer name [treebank_en|spacy_en|mecab_ko|bert_basic]</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>flatten: return type as flatten list\nsplit_with_regex: post split action. Split tokens that the tokenizer cannot split.</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.tokenizer.word.WordTokenizer.make_split_regex_expression\">\n<code class=\"sig-name descname\">make_split_regex_expression</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/word.html#WordTokenizer.make_split_regex_expression\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.word.WordTokenizer.make_split_regex_expression\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Apply a small amount of extra splitting to the given tokens, this is in particular to avoid UNK tokens\ndue to contraction, quotation, or other forms of puncutation. I haven’t really done tests to see\nif/how much difference this makes, but it does avoid some common UNKs I noticed in SQuAD/TriviaQA</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-claf.tokens.tokenizer\">\n<span id=\"module-contents\"></span><h2>Module contents<a class=\"headerlink\" href=\"#module-claf.tokens.tokenizer\" title=\"Permalink to this headline\">¶</a></h2>\n<dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.PassText\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.</code><code class=\"sig-name descname\">PassText</code><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/pass_text.html#PassText\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.PassText\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference external\" href=\"https://docs.python.org/3/library/functions.html#object\" title=\"(in Python v3.7)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">object</span></code></a></p>\n<p>Pass text without tokenize</p>\n<dl class=\"method\">\n<dt id=\"claf.tokens.tokenizer.PassText.tokenize\">\n<code class=\"sig-name descname\">tokenize</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">text</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/pass_text.html#PassText.tokenize\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.PassText.tokenize\" title=\"Permalink to this definition\">¶</a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.BPETokenizer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.</code><code class=\"sig-name descname\">BPETokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">config={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/bpe.html#BPETokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.BPETokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.tokenizer.base.Tokenizer\" title=\"claf.tokens.tokenizer.base.Tokenizer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.tokenizer.base.Tokenizer</span></code></a></p>\n<p>BPTE(Byte-Pair Encoding) Tokenizer\ntext -&gt; …\n* Args:</p>\n<blockquote>\n<div><p>name: tokenizer name [roberta]</p>\n</div></blockquote>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.CharTokenizer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.</code><code class=\"sig-name descname\">CharTokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">word_tokenizer</em>, <em class=\"sig-param\">config={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/char.html#CharTokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.CharTokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.tokenizer.base.Tokenizer\" title=\"claf.tokens.tokenizer.base.Tokenizer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.tokenizer.base.Tokenizer</span></code></a></p>\n<p>Character Tokenizer</p>\n<p>text -&gt; word tokens -&gt; [char tokens]</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>name: tokenizer name [character|decompose_ko]\nword_tokenizer: word tokenizer object</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.SubwordTokenizer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.</code><code class=\"sig-name descname\">SubwordTokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">word_tokenizer</em>, <em class=\"sig-param\">config={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/subword.html#SubwordTokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.SubwordTokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.tokenizer.base.Tokenizer\" title=\"claf.tokens.tokenizer.base.Tokenizer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.tokenizer.base.Tokenizer</span></code></a></p>\n<p>Subword Tokenizer</p>\n<p>text -&gt; [word tokens] -&gt; [[sub word tokens], …]</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>name: tokenizer name [wordpiece]</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.WordTokenizer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.</code><code class=\"sig-name descname\">WordTokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">sent_tokenizer</em>, <em class=\"sig-param\">config={}</em>, <em class=\"sig-param\">split_with_regex=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/word.html#WordTokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.WordTokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.tokenizer.base.Tokenizer\" title=\"claf.tokens.tokenizer.base.Tokenizer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.tokenizer.base.Tokenizer</span></code></a></p>\n<p>Word Tokenizer</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>name: tokenizer name [treebank_en|spacy_en|mecab_ko|bert_basic]</p>\n</dd>\n</dl>\n</li>\n<li><dl class=\"simple\">\n<dt>Kwargs:</dt><dd><p>flatten: return type as flatten list\nsplit_with_regex: post split action. Split tokens that the tokenizer cannot split.</p>\n</dd>\n</dl>\n</li>\n</ul>\n<dl class=\"method\">\n<dt id=\"claf.tokens.tokenizer.WordTokenizer.make_split_regex_expression\">\n<code class=\"sig-name descname\">make_split_regex_expression</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/word.html#WordTokenizer.make_split_regex_expression\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.WordTokenizer.make_split_regex_expression\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Apply a small amount of extra splitting to the given tokens, this is in particular to avoid UNK tokens\ndue to contraction, quotation, or other forms of puncutation. I haven’t really done tests to see\nif/how much difference this makes, but it does avoid some common UNKs I noticed in SQuAD/TriviaQA</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"claf.tokens.tokenizer.SentTokenizer\">\n<em class=\"property\">class </em><code class=\"sig-prename descclassname\">claf.tokens.tokenizer.</code><code class=\"sig-name descname\">SentTokenizer</code><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">config={}</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"_modules/claf/tokens/tokenizer/sent.html#SentTokenizer\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#claf.tokens.tokenizer.SentTokenizer\" title=\"Permalink to this definition\">¶</a></dt>\n<dd><p>Bases: <a class=\"reference internal\" href=\"#claf.tokens.tokenizer.base.Tokenizer\" title=\"claf.tokens.tokenizer.base.Tokenizer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">claf.tokens.tokenizer.base.Tokenizer</span></code></a></p>\n<p>Sentence Tokenizer</p>\n<p>text -&gt; [sent tokens]</p>\n<ul class=\"simple\">\n<li><dl class=\"simple\">\n<dt>Args:</dt><dd><p>name: tokenizer name [punkt]</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"reports/glue.html\" class=\"btn btn-neutral float-right\" title=\"GLUE\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"claf.tokens.token_embedder.html\" class=\"btn btn-neutral\" title=\"claf.tokens.token_embedder package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/contents/dataset_and_model.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>Dataset and Model &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"Pretrained Vector\" href=\"pretrained_vector.html\" />\n    <link rel=\"prev\" title=\"CLaF documentation\" href=\"../index.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">Dataset and Model</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#multi-task\">Multi-Task</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#dataset\">Dataset</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#model\">Model</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#reading-comprehension\">Reading Comprehension</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#id1\">Dataset</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#id2\">Model</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#regression\">Regression</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#id3\">Model</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#semantic-parsing\">Semantic Parsing</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#id4\">Dataset</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#id5\">Model</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#sequence-classification\">Sequence Classification</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#id6\">Dataset</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#id7\">Model</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#token-classification\">Token Classification</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#id8\">Dataset</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#id9\">Model</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n      <li>Dataset and Model</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"../_sources/contents/dataset_and_model.md.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"dataset-and-model\">\n<h1>Dataset and Model<a class=\"headerlink\" href=\"#dataset-and-model\" title=\"Permalink to this headline\">¶</a></h1>\n<p><strong>Table of Contents</strong></p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"#multi-task\">Multi Task</a></p></li>\n<li><p><a class=\"reference external\" href=\"#reading-comprehension\">Reading Comprehension</a></p></li>\n<li><p><a class=\"reference external\" href=\"#regression\">Regression</a></p></li>\n<li><p><a class=\"reference external\" href=\"#semantic-parsing\">Semantic Parsing</a></p></li>\n<li><p><a class=\"reference external\" href=\"#sequence-classification\">Sequence Classification</a></p></li>\n<li><p><a class=\"reference external\" href=\"#token-classification\">Token Classification</a></p></li>\n</ul>\n<hr class=\"docutils\" />\n<div class=\"section\" id=\"multi-task\">\n<h2>Multi-Task<a class=\"headerlink\" href=\"#multi-task\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"section\" id=\"dataset\">\n<h3>Dataset<a class=\"headerlink\" href=\"#dataset\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://gluebenchmark.com/\">GLUE Benchmark</a>: The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems.</p>\n<ul>\n<li><p>CoLA, MNLI, MRPC, QNLI, QQP, RTE, SST-2, STS-B, WNLI</p></li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"section\" id=\"model\">\n<h3>Model<a class=\"headerlink\" href=\"#model\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://arxiv.org/abs/1901.11504\">Multi-Task Deep Neural Networks for Natural Language Understanding</a></p></li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"reading-comprehension\">\n<h2>Reading Comprehension<a class=\"headerlink\" href=\"#reading-comprehension\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"section\" id=\"id1\">\n<h3>Dataset<a class=\"headerlink\" href=\"#id1\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://oss.navercorp.com/ClovaAI-PJT/HistoryQA\">HistoryQA</a>: Joseon History Question Answering Dataset (SQuAD Style)</p></li>\n<li><p><a class=\"reference external\" href=\"https://korquad.github.io/\">KorQuAD</a>: KorQuAD는 한국어 Machine Reading Comprehension을 위해 만든 데이터셋입니다. 모든 질의에 대한 답변은 해당 Wikipedia 아티클 문단의 일부 하위 영역으로 이루어집니다. Stanford Question Answering Dataset(SQuAD) v1.0과 동일한 방식으로 구성되었습니다.</p></li>\n<li><p><a class=\"reference external\" href=\"https://rajpurkar.github.io/SQuAD-explorer/\">SQuAD</a>: <strong>S</strong>tanford <strong>Qu</strong>estion <strong>A</strong>nswering <strong>D</strong>ataset is a reading comprehension dataset, consisting of questions posed by crowdworkers on a set of Wikipedia articles, where the answer to every question is a segment of text, or span, from the corresponding reading passage, or the question might be unanswerable.</p></li>\n</ul>\n</div>\n<div class=\"section\" id=\"id2\">\n<h3>Model<a class=\"headerlink\" href=\"#id2\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p>BiDAF: <a class=\"reference external\" href=\"https://arxiv.org/abs/1611.01603\">Birectional Attention Flow for Machine Comprehension</a> + <code class=\"docutils literal notranslate\"><span class=\"pre\">No</span> <span class=\"pre\">Answer</span></code></p></li>\n<li><p><a class=\"reference external\" href=\"https://arxiv.org/abs/1703.03130\">A Structured Self-attentive Sentence Embedding</a></p></li>\n<li><p>DrQA: <a class=\"reference external\" href=\"https://arxiv.org/abs/1704.00051\">Reading Wikipedia to Answer Open-Domain Questions</a></p></li>\n<li><p>DocQA: <a class=\"reference external\" href=\"https://arxiv.org/abs/1710.10723\">Simple and Effective Multi-Paragraph Reading Comprehension</a> + <code class=\"docutils literal notranslate\"><span class=\"pre\">No</span> <span class=\"pre\">Answer</span></code></p></li>\n<li><p><a class=\"reference external\" href=\"https://arxiv.org/abs/1804.09541\">QANet: Combining Local Convolution with Global Self-Attention for Reading Comprehension </a></p></li>\n<li><p><a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</a></p></li>\n</ul>\n</div>\n</div>\n<hr class=\"docutils\" />\n<div class=\"section\" id=\"regression\">\n<h2>Regression<a class=\"headerlink\" href=\"#regression\" title=\"Permalink to this headline\">¶</a></h2>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://gluebenchmark.com/\">GLUE Benchmark</a>: The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems.</p>\n<ul>\n<li><p>STS-B</p></li>\n</ul>\n</li>\n</ul>\n<div class=\"section\" id=\"id3\">\n<h3>Model<a class=\"headerlink\" href=\"#id3\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://arxiv.org/abs/1907.11692\">RoBERTa: A Robustly Optimized BERT Pretraining Approach</a></p></li>\n</ul>\n</div>\n</div>\n<hr class=\"docutils\" />\n<div class=\"section\" id=\"semantic-parsing\">\n<h2>Semantic Parsing<a class=\"headerlink\" href=\"#semantic-parsing\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"section\" id=\"id4\">\n<h3>Dataset<a class=\"headerlink\" href=\"#id4\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://github.com/salesforce/WikiSQL\">WikiSQL</a>: A large crowd-sourced dataset for developing natural language interfaces for relational databases. WikiSQL is the dataset released along with our work <a class=\"reference external\" href=\"http://arxiv.org/abs/1709.00103\">Seq2SQL: Generating Structured Queries from Natural Language using Reinforcement Learning</a>.</p></li>\n</ul>\n</div>\n<div class=\"section\" id=\"id5\">\n<h3>Model<a class=\"headerlink\" href=\"#id5\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p>SQLNet: <a class=\"reference external\" href=\"https://arxiv.org/abs/1711.04436\">SQLNet: Generating Structured Queries From Natural Language Without Reinforcement Learning</a></p></li>\n</ul>\n</div>\n</div>\n<hr class=\"docutils\" />\n<div class=\"section\" id=\"sequence-classification\">\n<h2>Sequence Classification<a class=\"headerlink\" href=\"#sequence-classification\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"section\" id=\"id6\">\n<h3>Dataset<a class=\"headerlink\" href=\"#id6\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://gluebenchmark.com/\">GLUE Benchmark</a>: The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems.</p>\n<ul>\n<li><p>CoLA, MNLI, MRPC, QNLI, QQP, RTE, SST-2, WNLI</p></li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"section\" id=\"id7\">\n<h3>Model<a class=\"headerlink\" href=\"#id7\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://arxiv.org/abs/1703.03130\">A Structured Self-attentive Sentence Embedding</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://arxiv.org/abs/1907.11692\">RoBERTa: A Robustly Optimized BERT Pretraining Approach</a></p></li>\n</ul>\n</div>\n</div>\n<hr class=\"docutils\" />\n<div class=\"section\" id=\"token-classification\">\n<h2>Token Classification<a class=\"headerlink\" href=\"#token-classification\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"section\" id=\"id8\">\n<h3>Dataset<a class=\"headerlink\" href=\"#id8\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://www.clips.uantwerpen.be/conll2003/ner/\">NER - CoNLL 2013</a>: The shared task of CoNLL-2003 concerns language-independent named entity recognition. Named entities are phrases that contain the names of persons, organizations, locations, times and quantities.</p></li>\n</ul>\n</div>\n<div class=\"section\" id=\"id9\">\n<h3>Model<a class=\"headerlink\" href=\"#id9\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</a></p></li>\n</ul>\n</div>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"pretrained_vector.html\" class=\"btn btn-neutral float-right\" title=\"Pretrained Vector\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"../index.html\" class=\"btn btn-neutral\" title=\"CLaF documentation\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/contents/pretrained_vector.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>Pretrained Vector &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"Tokens\" href=\"tokens.html\" />\n    <link rel=\"prev\" title=\"Dataset and Model\" href=\"dataset_and_model.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">Pretrained Vector</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#english\">English</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#korean\">Korean</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n      <li>Pretrained Vector</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"../_sources/contents/pretrained_vector.md.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"pretrained-vector\">\n<h1>Pretrained Vector<a class=\"headerlink\" href=\"#pretrained-vector\" title=\"Permalink to this headline\">¶</a></h1>\n<ul class=\"simple\">\n<li><p>List on <a class=\"reference external\" href=\"http://dev-reasoning-qa-data-ncl.nfra.io:7778/\">DataServer</a></p></li>\n</ul>\n<div class=\"section\" id=\"english\">\n<h2>English<a class=\"headerlink\" href=\"#english\" title=\"Permalink to this headline\">¶</a></h2>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Counter</span> <span class=\"pre\">Fitting</span></code>: <a class=\"reference external\" href=\"http://mi.eng.cam.ac.uk/%7Enm480/naaclhlt2016.pdf\">Counter-fitting Word Vectors to Linguistic Constraints</a></p>\n<ul>\n<li><p>counter_fitted_glove.300d.txt</p></li>\n</ul>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Cove</span></code>: <a class=\"reference external\" href=\"https://github.com/salesforce/cove\">Learned in Translation: Contextualized Word Vectors (McCann et. al. 2017)</a></p>\n<ul>\n<li><p>wmtlstm-b142a7f2.pth</p></li>\n</ul>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">fastText</span></code>: <a class=\"reference external\" href=\"https://github.com/facebookresearch/fastText\">Enriching Word Vectors with Subword Information</a></p>\n<ul>\n<li><p>fasttext.wiki.en.300d.txt</p></li>\n</ul>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">GloVe</span></code>: <a class=\"reference external\" href=\"https://nlp.stanford.edu/projects/glove/\">GloVe: Global Vectors for Word Representation</a></p>\n<ul>\n<li><p>glove.6B.50d.txt</p></li>\n<li><p>glove.6B.100d.txt</p></li>\n<li><p>glove.6B.200d.txt</p></li>\n<li><p>glove.6B.300d.txt</p></li>\n<li><p>glove.840B.300d.txt</p></li>\n</ul>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ELMo</span></code>: <a class=\"reference external\" href=\"https://github.com/allenai/allennlp/blob/master/allennlp/modules/elmo.py\">Deep contextualized word representations</a></p>\n<ul>\n<li><p>elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5</p></li>\n<li><p>elmo_2x4096_512_2048cnn_2xhighway_options</p></li>\n</ul>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Word2Vec</span></code>: <a class=\"reference external\" href=\"https://code.google.com/archive/p/word2vec/\">Distributed Representations of Words and Phrases and their Compositionality</a></p>\n<ul>\n<li><p>GoogleNews-vectors-negative300.txt</p></li>\n</ul>\n</li>\n</ul>\n</div>\n<div class=\"section\" id=\"korean\">\n<h2>Korean<a class=\"headerlink\" href=\"#korean\" title=\"Permalink to this headline\">¶</a></h2>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">fastText</span></code>: <a class=\"reference external\" href=\"https://github.com/facebookresearch/fastText\">Enriching Word Vectors with Subword Information</a></p>\n<ul>\n<li><p>fasttext.wiki.ko.300d.txt</p></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"tokens.html\" class=\"btn btn-neutral float-right\" title=\"Tokens\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"dataset_and_model.html\" class=\"btn btn-neutral\" title=\"Dataset and Model\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/contents/tokens.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>Tokens &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"claf.config package\" href=\"../claf.config.html\" />\n    <link rel=\"prev\" title=\"Pretrained Vector\" href=\"pretrained_vector.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">Tokens</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#tokenizers\">Tokenizers</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#token-maker\">Token Maker</a></li>\n</ul>\n</li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n      <li>Tokens</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"../_sources/contents/tokens.md.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"tokens\">\n<h1>Tokens<a class=\"headerlink\" href=\"#tokens\" title=\"Permalink to this headline\">¶</a></h1>\n<p>TokenMakers consists of Tokenizer, Indexer, Vocabulary, and Embedding Modules.<br /><code class=\"docutils literal notranslate\"><span class=\"pre\">TokenMaker</span></code> is responsible for the indexing of text and the generation of the tensors through the embedding module.</p>\n<div class=\"section\" id=\"tokenizers\">\n<h2>Tokenizers<a class=\"headerlink\" href=\"#tokenizers\" title=\"Permalink to this headline\">¶</a></h2>\n<ul class=\"simple\">\n<li><p>Tokenizer Design</p></li>\n</ul>\n<p><img alt=\"images\" src=\"../_images/tokenizers_design.png\" /></p>\n<div class=\"highlight-default notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">class</span> <span class=\"nc\">SentTokenizer</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n<span class=\"k\">class</span> <span class=\"nc\">WordTokenizer</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">sent_tokenizer</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">)</span> <span class=\"o\">...</span>\n<span class=\"k\">class</span> <span class=\"nc\">SubwordTokenizer</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">word_tokenizer</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">)</span> <span class=\"o\">...</span>\n<span class=\"k\">class</span> <span class=\"nc\">CharTokenizer</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">word_tokenizer</span><span class=\"p\">,</span> <span class=\"n\">config</span><span class=\"p\">)</span> <span class=\"o\">...</span>\n</pre></div>\n</div>\n<p>The Tokenizer has a dependency with the other unit’s tokenizer and the <code class=\"docutils literal notranslate\"><span class=\"pre\">tokenize()</span></code> function takes the input of text units.<br />(* unit: unit of input e.g. ‘text’, ‘sentence’ and ‘word’)</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">tokenizer()</span></code> example</p></li>\n</ul>\n<div class=\"highlight-default notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Hello World.This is tokenizer example code.&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;text&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># text -&gt; sentences -&gt; words</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;World&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;This&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;is&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;tokenizer&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;example&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;code&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;.&#39;</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">word_tokenizer</span><span class=\"o\">.</span><span class=\"n\">tokenize</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">,</span> <span class=\"n\">unit</span><span class=\"o\">=</span><span class=\"s2\">&quot;sentence&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># text -&gt; words</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;World.This&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;is&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;tokenizer&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;example&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;code&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;.&#39;</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n<p>Several tensors in a sub-level text unit can be combined into a single tensor of higher level via a vector operation. For example, subword level tensors can be averaged to represent a word level tensor.</p>\n<p>e.g.) concatenate [word; subword] (subword tokens –average–&gt; word token)</p>\n<ul class=\"simple\">\n<li><p>The list of pre-defined <code class=\"docutils literal notranslate\"><span class=\"pre\">Tokenizers</span></code>:</p></li>\n</ul>\n<table border=\"1\" class=\"docutils\">\n<thead>\n<tr>\n<th>Text Unit</th>\n<th>Language</th>\n<th>Name</th>\n<th>Example</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>BPE</td>\n<td>All (depend on vocab)</td>\n<td><strong>roberta</strong></td>\n<td>Hello World<br/>-&gt; [\"ĠHello\", \"ĠWorld\"]</td>\n</tr>\n<tr>\n<td>Char</td>\n<td>All</td>\n<td><strong>character</strong></td>\n<td>Hello World<br/>-&gt; [\"Hello\", \"World\"]<br/>-&gt; [[\"H\", \"e\", \"l\", \"l\", \"o\"], [\"W\", \"o\", \"r\", \"l\", \"d\"]]</td>\n</tr>\n<tr>\n<td>Char</td>\n<td>Korean</td>\n<td><a href=\"https://github.com/rhobot/Hangulpy\"><strong>jamo_ko</strong></a></td>\n<td>\"안녕 세상\"<br/>-&gt; [\"안녕\", \"세상\"]<br/>-&gt; [[\"ㅇ\", \"ㅏ\", \"ㄴ\", \"ㄴ\", \"ㅕ\", \"ㅇ\"], [\"ㅅ\", \"ㅔ\", \"ㅅ\", \"ㅏ\", \"ㅇ\"]]</td>\n</tr>\n<tr>\n<td>Subword</td>\n<td>All (but, need vocab.txt)</td>\n<td><a href=\"https://github.com/huggingface/pytorch-pretrained-BERT/blob/master/pytorch_pretrained_bert/tokenization.py\"><strong>wordpiece</strong></a></td>\n<td>\"expectancy of anyone\"<br/>-&gt; [\"expectancy\", \"of\", \"anyone\"]<br/>-&gt; [\"expect\", \"##ancy\", \"of\", \"anyone\"]</td>\n</tr>\n<tr>\n<td>Word</td>\n<td>English</td>\n<td><a href=\"http://www.nltk.org/api/nltk.tokenize.html\"><strong>nltk_en</strong></a></td>\n<td>-</td>\n</tr>\n<tr>\n<td>Word</td>\n<td>English</td>\n<td><a href=\"https://spacy.io/api/tokenizer\"><strong>spacy_en</strong></a></td>\n<td>-</td>\n</tr>\n<tr>\n<td>Word</td>\n<td>Korean</td>\n<td><a href=\"https://bitbucket.org/eunjeon/mecab-ko\"><strong>mecab_ko</strong></a></td>\n<td>-</td>\n</tr>\n<tr>\n<td>Word</td>\n<td>All</td>\n<td><strong>bert_basic</strong></td>\n<td>-</td>\n</tr>\n<tr>\n<td>Word</td>\n<td>All</td>\n<td><strong>space_all</strong></td>\n<td>\"Hello World\"<br/>-&gt; [\"Hello\", \"World\"]</td>\n</tr>\n<tr>\n<td>Sent</td>\n<td>All</td>\n<td><a href=\"http://www.nltk.org/api/nltk.tokenize.html\"><strong>punkt</strong></a></td>\n<td>\"Hello World. This is punkt tokenizer.\"<br/>-&gt; [\"Hello World.\", \"This is punkt tokenizer.\"]</td>\n</tr>\n</tbody>\n</table></div>\n<div class=\"section\" id=\"token-maker\">\n<h2>Token Maker<a class=\"headerlink\" href=\"#token-maker\" title=\"Permalink to this headline\">¶</a></h2>\n<ul class=\"simple\">\n<li><p>The list of pre-defined <code class=\"docutils literal notranslate\"><span class=\"pre\">Token</span> <span class=\"pre\">Maker</span></code>:</p></li>\n</ul>\n<table border=\"1\" class=\"docutils\">\n<thead>\n<tr>\n<th>Type</th>\n<th>Description</th>\n<th>Category</th>\n<th>Notes</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>char</strong></td>\n<td>character -&gt; convolution -&gt; maxpool</td>\n<td><code>CharCNN</code></td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>cove</strong></td>\n<td>Embeddings from Neural Machine Translation</td>\n<td><code>NMT</code></td>\n<td>- From <a href=\"https://github.com/salesforce/cove\">Salesforce</a></td>\n</tr>\n<tr>\n<td><strong>feature</strong></td>\n<td>Do not use embedding function, just pass feature</td>\n<td><code>Feature</code></td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>word</strong></td>\n<td>word -&gt; Embedding (+pretrained)</td>\n<td><code>Word2Vec</code></td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>frequent_word</strong></td>\n<td>word token + pre-trained word embeddings fixed and only fine-tune the N most frequent</td>\n<td><code>Word2Vec</code> + <code>Fine-tune</code></td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>exact_match</strong></td>\n<td>Three simple binary features, indicating whether p_i can be exactly matched to one question word in q, either in its original, lowercase or lemma form.</td>\n<td><code>Feature</code></td>\n<td>- Sparse or Embedding<br/> - Only for RC</td>\n</tr>\n<tr>\n<td><strong>elmo</strong></td>\n<td>Embeddings from Language Models</td>\n<td><code>LM</code></td>\n<td>From <a href=\"https://github.com/allenai/allennlp\">Allennlp</a></td>\n</tr>\n<tr>\n<td><strong>linguistic</strong></td>\n<td>Linguistic Features like POS Tagging, NER and Dependency Parser</td>\n<td><code>Feature</code></td>\n<td>- Sparse or Embedding</td>\n</tr>\n</tbody>\n</table><ul class=\"simple\">\n<li><p>Example of tokens in <a class=\"reference external\" href=\"#baseconfig\">BaseConfig</a></p></li>\n</ul>\n<div class=\"highlight-default notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s2\">&quot;token&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n   <span class=\"s2\">&quot;names&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;char&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;glove&quot;</span><span class=\"p\">],</span>\n   <span class=\"s2\">&quot;types&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;char&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;word&quot;</span><span class=\"p\">],</span>\n   <span class=\"s2\">&quot;tokenizer&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>  <span class=\"c1\"># Define the tokenizer in each unit.</span>\n       <span class=\"s2\">&quot;char&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n           <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;character&quot;</span>\n       <span class=\"p\">},</span>\n       <span class=\"s2\">&quot;word&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n           <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;treebank_en&quot;</span><span class=\"p\">,</span>\n           <span class=\"s2\">&quot;split_with_regex&quot;</span><span class=\"p\">:</span> <span class=\"n\">true</span>\n       <span class=\"p\">}</span>\n   <span class=\"p\">},</span>\n   <span class=\"s2\">&quot;char&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>  <span class=\"c1\"># token_name</span>\n       <span class=\"s2\">&quot;vocab&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n           <span class=\"s2\">&quot;start_token&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&lt;s&gt;&quot;</span><span class=\"p\">,</span>\n           <span class=\"s2\">&quot;end_token&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&lt;/s&gt;&quot;</span><span class=\"p\">,</span>\n           <span class=\"s2\">&quot;max_vocab_size&quot;</span><span class=\"p\">:</span> <span class=\"mi\">260</span>\n       <span class=\"p\">},</span>\n       <span class=\"s2\">&quot;indexer&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n           <span class=\"s2\">&quot;insert_char_start&quot;</span><span class=\"p\">:</span> <span class=\"n\">true</span><span class=\"p\">,</span>\n           <span class=\"s2\">&quot;insert_char_end&quot;</span><span class=\"p\">:</span> <span class=\"n\">true</span>\n       <span class=\"p\">},</span>\n       <span class=\"s2\">&quot;embedding&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n           <span class=\"s2\">&quot;embed_dim&quot;</span><span class=\"p\">:</span> <span class=\"mi\">16</span><span class=\"p\">,</span>\n           <span class=\"s2\">&quot;kernel_sizes&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">],</span>\n           <span class=\"s2\">&quot;num_filter&quot;</span><span class=\"p\">:</span> <span class=\"mi\">100</span><span class=\"p\">,</span>\n           <span class=\"s2\">&quot;activation&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;relu&quot;</span><span class=\"p\">,</span>\n           <span class=\"s2\">&quot;dropout&quot;</span><span class=\"p\">:</span> <span class=\"mf\">0.2</span>\n       <span class=\"p\">}</span>\n   <span class=\"p\">},</span>\n   <span class=\"s2\">&quot;glove&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>  <span class=\"c1\"># token_name</span>\n       <span class=\"s2\">&quot;indexer&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n           <span class=\"s2\">&quot;lowercase&quot;</span><span class=\"p\">:</span> <span class=\"n\">true</span>\n       <span class=\"p\">},</span>\n       <span class=\"s2\">&quot;embedding&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n           <span class=\"s2\">&quot;embed_dim&quot;</span><span class=\"p\">:</span> <span class=\"mi\">100</span><span class=\"p\">,</span>\n           <span class=\"s2\">&quot;pretrained_path&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&lt;glove.6B.100d path&gt;,</span>\n           <span class=\"s2\">&quot;trainable&quot;</span><span class=\"p\">:</span> <span class=\"n\">false</span><span class=\"p\">,</span>\n           <span class=\"s2\">&quot;dropout&quot;</span><span class=\"p\">:</span> <span class=\"mf\">0.2</span>\n       <span class=\"p\">}</span>\n   <span class=\"p\">}</span>\n<span class=\"p\">},</span>\n\n<span class=\"c1\"># Tokens process</span>\n<span class=\"c1\">#   Text -&gt; Indexed Featrues -&gt; Tensor -&gt; TokenEmbedder -&gt; Model</span>\n\n<span class=\"c1\"># Visualization</span>\n<span class=\"c1\"># - Text: Hello World</span>\n<span class=\"c1\"># - Indexed Feature: {&#39;char&#39;: [[2, 3, 4, 4, 5], [6, 7, 8, 4, 9]], &#39;glove&#39;: [2, 3]} </span>\n<span class=\"c1\"># - Tensor: {&#39;char&#39;: tensor, &#39;glove&#39;: tensor} </span>\n<span class=\"c1\"># - TokenEmbedder: [char; glove]  (default: concatenate)</span>\n<span class=\"c1\"># - Model: use embedded_value</span>\n</pre></div>\n</div>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"../claf.config.html\" class=\"btn btn-neutral float-right\" title=\"claf.config package\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"pretrained_vector.html\" class=\"btn btn-neutral\" title=\"Pretrained Vector\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/genindex.html",
    "content": "\n\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>Index &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"#\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>Index</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n\n<h1 id=\"index\">Index</h1>\n\n<div class=\"genindex-jumpbox\">\n <a href=\"#A\"><strong>A</strong></a>\n | <a href=\"#B\"><strong>B</strong></a>\n | <a href=\"#C\"><strong>C</strong></a>\n | <a href=\"#D\"><strong>D</strong></a>\n | <a href=\"#E\"><strong>E</strong></a>\n | <a href=\"#F\"><strong>F</strong></a>\n | <a href=\"#G\"><strong>G</strong></a>\n | <a href=\"#H\"><strong>H</strong></a>\n | <a href=\"#I\"><strong>I</strong></a>\n | <a href=\"#J\"><strong>J</strong></a>\n | <a href=\"#K\"><strong>K</strong></a>\n | <a href=\"#L\"><strong>L</strong></a>\n | <a href=\"#M\"><strong>M</strong></a>\n | <a href=\"#N\"><strong>N</strong></a>\n | <a href=\"#O\"><strong>O</strong></a>\n | <a href=\"#P\"><strong>P</strong></a>\n | <a href=\"#Q\"><strong>Q</strong></a>\n | <a href=\"#R\"><strong>R</strong></a>\n | <a href=\"#S\"><strong>S</strong></a>\n | <a href=\"#T\"><strong>T</strong></a>\n | <a href=\"#V\"><strong>V</strong></a>\n | <a href=\"#W\"><strong>W</strong></a>\n \n</div>\n<h2 id=\"A\">A</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.config.html#claf.config.registry.Registry.add\">add() (claf.config.registry.Registry method)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.add\">(claf.tokens.vocabulary.Vocab method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.base.TokenEmbedder.add_embedding_modules\">add_embedding_modules() (claf.tokens.token_embedder.base.TokenEmbedder method)</a>\n</li>\n      <li><a href=\"claf.modules.html#claf.modules.functional.add_masked_value\">add_masked_value() (in module claf.modules.functional)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.add_ryul\">add_ryul() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.elmo.add_sentence_boundary_token_ids\">add_sentence_boundary_token_ids() (in module claf.tokens.elmo)</a>\n</li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.AGG_OPS\">AGG_OPS (claf.model.semantic_parsing.mixin.WikiSQL attribute)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.AggPredictor\">AggPredictor (class in claf.model.semantic_parsing.sqlnet)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.apply_no_ans_threshold\">apply_no_ans_threshold() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.args.arg_str2bool\">arg_str2bool() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.decorator.html#claf.decorator.arguments_required\">arguments_required (class in claf.decorator)</a>\n\n      <ul>\n        <li><a href=\"claf.decorator.html#claf.decorator.arguments.arguments_required\">(class in claf.decorator.arguments)</a>\n</li>\n      </ul></li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"B\">B</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.config.html#claf.config.args.base_config\">base_config() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.basic_embedding_fn\">basic_embedding_fn() (in module claf.tokens)</a>\n</li>\n      <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.BasicTokenEmbedder\">BasicTokenEmbedder (class in claf.tokens.token_embedder)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder\">(class in claf.tokens.token_embedder.basic_embedder)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.beginning_of_sentence_character\">beginning_of_sentence_character (claf.tokens.indexer.elmo_indexer.ELMoIndexer attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.beginning_of_sentence_character\">(claf.tokens.indexer.ELMoIndexer attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.beginning_of_sentence_characters\">beginning_of_sentence_characters (claf.tokens.indexer.elmo_indexer.ELMoIndexer attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.beginning_of_sentence_characters\">(claf.tokens.indexer.ELMoIndexer attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.beginning_of_word_character\">beginning_of_word_character (claf.tokens.indexer.elmo_indexer.ELMoIndexer attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.beginning_of_word_character\">(claf.tokens.indexer.ELMoIndexer attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.bert_input_maxlen\">bert_input_maxlen() (claf.data.dataset.SQuADBertDataset property)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.BERT_TYPE\">BERT_TYPE (claf.tokens.token_maker.TokenMaker attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.BertEmbedding\">BertEmbedding (class in claf.tokens.embedding)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.bert_embedding.BertEmbedding\">(class in claf.tokens.embedding.bert_embedding)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.BertForQA\">BertForQA (class in claf.model.reading_comprehension)</a>\n</li>\n      <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.BertForSeqCls\">BertForSeqCls (class in claf.model.sequence_classification)</a>\n</li>\n      <li><a href=\"claf.model.token_classification.html#claf.model.token_classification.BertForTokCls\">BertForTokCls (class in claf.model.token_classification)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.BertIndexer\">BertIndexer (class in claf.tokens.indexer)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.bert_indexer.BertIndexer\">(class in claf.tokens.indexer.bert_indexer)</a>\n</li>\n      </ul></li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.html#claf.tokens.BertTokenMaker\">BertTokenMaker (class in claf.tokens)</a>\n</li>\n      <li><a href=\"claf.modules.attention.html#claf.modules.attention.BiAttention\">BiAttention (class in claf.modules.attention)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.bi_attention.BiAttention\">(class in claf.modules.attention.bi_attention)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.BiDAF\">BiDAF (class in claf.model.reading_comprehension)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.bidaf.BiDAF\">(class in claf.model.reading_comprehension.bidaf)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.BiDAF_No_Answer\">BiDAF_No_Answer (class in claf.model.reading_comprehension)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.bidaf_no_answer.BiDAF_No_Answer\">(class in claf.model.reading_comprehension.bidaf_no_answer)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.modules.attention.html#claf.modules.attention.BilinearSeqAttn\">BilinearSeqAttn (class in claf.modules.attention)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.seq_attention.BilinearSeqAttn\">(class in claf.modules.attention.seq_attention)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.bind_nsml\">bind_nsml() (in module claf.learn.utils)</a>\n</li>\n      <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.block_orthogonal\">block_orthogonal() (in module claf.modules.encoder.lstm_cell_with_projection)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.BOS_TOKEN\">BOS_TOKEN (claf.tokens.indexer.elmo_indexer.ELMoIndexer attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.BOS_TOKEN\">(claf.tokens.indexer.ELMoIndexer attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.BPETokenizer\">BPETokenizer (class in claf.tokens.tokenizer)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.build\">build() (claf.tokens.vocabulary.Vocab method)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.text_handler.TextHandler.build_vocabs\">build_vocabs() (claf.tokens.text_handler.TextHandler method)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.build_with_pretrained_file\">build_with_pretrained_file() (claf.tokens.vocabulary.Vocab method)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"C\">C</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.data.html#claf.data.data_handler.DataHandler.cache_token_counter\">cache_token_counter() (claf.data.data_handler.DataHandler method)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.data_handler.CachePath\">CachePath (class in claf.data.data_handler)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.CHAR_TYPE\">CHAR_TYPE (claf.tokens.token_maker.TokenMaker attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.CharEmbedding\">CharEmbedding (class in claf.tokens.embedding)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.char_embedding.CharEmbedding\">(class in claf.tokens.embedding.char_embedding)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.CharIndexer\">CharIndexer (class in claf.tokens.indexer)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.char_indexer.CharIndexer\">(class in claf.tokens.indexer.char_indexer)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.CharTokenizer\">CharTokenizer (class in claf.tokens.tokenizer)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.char.CharTokenizer\">(class in claf.tokens.tokenizer.char)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.CharTokenMaker\">CharTokenMaker (class in claf.tokens)</a>\n</li>\n      <li><a href=\"claf.html#module-claf\">claf (module)</a>\n</li>\n      <li><a href=\"claf.config.html#module-claf.config\">claf.config (module)</a>\n</li>\n      <li><a href=\"claf.config.html#module-claf.config.args\">claf.config.args (module)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#module-claf.config.factory\">claf.config.factory (module)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#module-claf.config.factory.base\">claf.config.factory.base (module)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#module-claf.config.factory.data_loader\">claf.config.factory.data_loader (module)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#module-claf.config.factory.data_reader\">claf.config.factory.data_reader (module)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#module-claf.config.factory.model\">claf.config.factory.model (module)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#module-claf.config.factory.optimizer\">claf.config.factory.optimizer (module)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#module-claf.config.factory.tokens\">claf.config.factory.tokens (module)</a>\n</li>\n      <li><a href=\"claf.config.html#module-claf.config.namespace\">claf.config.namespace (module)</a>\n</li>\n      <li><a href=\"claf.config.html#module-claf.config.pattern\">claf.config.pattern (module)</a>\n</li>\n      <li><a href=\"claf.config.html#module-claf.config.registry\">claf.config.registry (module)</a>\n</li>\n      <li><a href=\"claf.config.html#module-claf.config.utils\">claf.config.utils (module)</a>\n</li>\n      <li><a href=\"claf.data.html#module-claf.data\">claf.data (module)</a>\n</li>\n      <li><a href=\"claf.data.html#module-claf.data.collate\">claf.data.collate (module)</a>\n</li>\n      <li><a href=\"claf.data.html#module-claf.data.data_handler\">claf.data.data_handler (module)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#module-claf.data.dataset\">claf.data.dataset (module)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#module-claf.data.dataset.base\">claf.data.dataset.base (module)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#module-claf.data.dataset.seq_cls\">claf.data.dataset.seq_cls (module)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#module-claf.data.dataset.squad\">claf.data.dataset.squad (module)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#module-claf.data.dataset.wikisql\">claf.data.dataset.wikisql (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#module-claf.data.reader\">claf.data.reader (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#module-claf.data.reader.base\">claf.data.reader.base (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.bert.html#module-claf.data.reader.bert\">claf.data.reader.bert (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.bert.html#module-claf.data.reader.bert.conll2003\">claf.data.reader.bert.conll2003 (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.bert.html#module-claf.data.reader.bert.seq_cls\">claf.data.reader.bert.seq_cls (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.bert.html#module-claf.data.reader.bert.squad\">claf.data.reader.bert.squad (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.bert.html#module-claf.data.reader.bert.tok_cls\">claf.data.reader.bert.tok_cls (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#module-claf.data.reader.cola\">claf.data.reader.cola (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#module-claf.data.reader.seq_cls\">claf.data.reader.seq_cls (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#module-claf.data.reader.squad\">claf.data.reader.squad (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#module-claf.data.reader.wikisql\">claf.data.reader.wikisql (module)</a>\n</li>\n      <li><a href=\"claf.data.html#module-claf.data.utils\">claf.data.utils (module)</a>\n</li>\n      <li><a href=\"claf.decorator.html#module-claf.decorator\">claf.decorator (module)</a>\n</li>\n      <li><a href=\"claf.decorator.html#module-claf.decorator.arguments\">claf.decorator.arguments (module)</a>\n</li>\n      <li><a href=\"claf.decorator.html#module-claf.decorator.register\">claf.decorator.register (module)</a>\n</li>\n      <li><a href=\"claf.learn.html#module-claf.learn\">claf.learn (module)</a>\n</li>\n      <li><a href=\"claf.learn.html#module-claf.learn.experiment\">claf.learn.experiment (module)</a>\n</li>\n      <li><a href=\"claf.learn.html#module-claf.learn.mode\">claf.learn.mode (module)</a>\n</li>\n      <li><a href=\"claf.learn.html#module-claf.learn.tensorboard\">claf.learn.tensorboard (module)</a>\n</li>\n      <li><a href=\"claf.learn.html#module-claf.learn.trainer\">claf.learn.trainer (module)</a>\n</li>\n      <li><a href=\"claf.learn.html#module-claf.learn.utils\">claf.learn.utils (module)</a>\n</li>\n      <li><a href=\"claf.machine.html#module-claf.machine\">claf.machine (module)</a>\n</li>\n      <li><a href=\"claf.machine.html#module-claf.machine.base\">claf.machine.base (module)</a>\n</li>\n      <li><a href=\"claf.machine.components.html#module-claf.machine.components\">claf.machine.components (module)</a>\n</li>\n      <li><a href=\"claf.machine.components.retrieval.html#module-claf.machine.components.retrieval\">claf.machine.components.retrieval (module)</a>\n</li>\n      <li><a href=\"claf.machine.components.retrieval.html#module-claf.machine.components.retrieval.tfidf\">claf.machine.components.retrieval.tfidf (module)</a>\n</li>\n      <li><a href=\"claf.machine.html#module-claf.machine.module\">claf.machine.module (module)</a>\n</li>\n      <li><a href=\"claf.machine.html#module-claf.machine.nlu\">claf.machine.nlu (module)</a>\n</li>\n      <li><a href=\"claf.machine.html#module-claf.machine.open_qa\">claf.machine.open_qa (module)</a>\n</li>\n      <li><a href=\"claf.metric.html#module-claf.metric\">claf.metric (module)</a>\n</li>\n      <li><a href=\"claf.metric.html#module-claf.metric.classification\">claf.metric.classification (module)</a>\n</li>\n      <li><a href=\"claf.metric.html#module-claf.metric.squad_v1_official\">claf.metric.squad_v1_official (module)</a>\n</li>\n      <li><a href=\"claf.metric.html#module-claf.metric.squad_v2_official\">claf.metric.squad_v2_official (module)</a>\n</li>\n      <li><a href=\"claf.metric.html#module-claf.metric.wikisql_official\">claf.metric.wikisql_official (module)</a>\n</li>\n      <li><a href=\"claf.model.html#module-claf.model\">claf.model (module)</a>\n</li>\n      <li><a href=\"claf.model.html#module-claf.model.base\">claf.model.base (module)</a>\n</li>\n      <li><a href=\"claf.model.html#module-claf.model.cls_utils\">claf.model.cls_utils (module)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension\">claf.model.reading_comprehension (module)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.bidaf\">claf.model.reading_comprehension.bidaf (module)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.bidaf_no_answer\">claf.model.reading_comprehension.bidaf_no_answer (module)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.docqa\">claf.model.reading_comprehension.docqa (module)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.docqa_no_answer\">claf.model.reading_comprehension.docqa_no_answer (module)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.drqa\">claf.model.reading_comprehension.drqa (module)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.mixin\">claf.model.reading_comprehension.mixin (module)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.qanet\">claf.model.reading_comprehension.qanet (module)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing\">claf.model.semantic_parsing (module)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing.mixin\">claf.model.semantic_parsing.mixin (module)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing.sqlnet\">claf.model.semantic_parsing.sqlnet (module)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing.utils\">claf.model.semantic_parsing.utils (module)</a>\n</li>\n      <li><a href=\"claf.model.sequence_classification.html#module-claf.model.sequence_classification\">claf.model.sequence_classification (module)</a>\n</li>\n      <li><a href=\"claf.model.sequence_classification.html#module-claf.model.sequence_classification.mixin\">claf.model.sequence_classification.mixin (module)</a>\n</li>\n      <li><a href=\"claf.model.sequence_classification.html#module-claf.model.sequence_classification.structured_self_attention\">claf.model.sequence_classification.structured_self_attention (module)</a>\n</li>\n      <li><a href=\"claf.model.token_classification.html#module-claf.model.token_classification\">claf.model.token_classification (module)</a>\n</li>\n      <li><a href=\"claf.model.token_classification.html#module-claf.model.token_classification.mixin\">claf.model.token_classification.mixin (module)</a>\n</li>\n      <li><a href=\"claf.modules.html#module-claf.modules\">claf.modules (module)</a>\n</li>\n      <li><a href=\"claf.modules.html#module-claf.modules.activation\">claf.modules.activation (module)</a>\n</li>\n      <li><a href=\"claf.modules.attention.html#module-claf.modules.attention\">claf.modules.attention (module)</a>\n</li>\n      <li><a href=\"claf.modules.attention.html#module-claf.modules.attention.bi_attention\">claf.modules.attention.bi_attention (module)</a>\n</li>\n      <li><a href=\"claf.modules.attention.html#module-claf.modules.attention.co_attention\">claf.modules.attention.co_attention (module)</a>\n</li>\n      <li><a href=\"claf.modules.attention.html#module-claf.modules.attention.docqa_attention\">claf.modules.attention.docqa_attention (module)</a>\n</li>\n      <li><a href=\"claf.modules.attention.html#module-claf.modules.attention.multi_head_attention\">claf.modules.attention.multi_head_attention (module)</a>\n</li>\n      <li><a href=\"claf.modules.attention.html#module-claf.modules.attention.seq_attention\">claf.modules.attention.seq_attention (module)</a>\n</li>\n      <li><a href=\"claf.modules.conv.html#module-claf.modules.conv\">claf.modules.conv (module)</a>\n</li>\n      <li><a href=\"claf.modules.conv.html#module-claf.modules.conv.depthwise_separable_conv\">claf.modules.conv.depthwise_separable_conv (module)</a>\n</li>\n      <li><a href=\"claf.modules.conv.html#module-claf.modules.conv.pointwise_conv\">claf.modules.conv.pointwise_conv (module)</a>\n</li>\n      <li><a href=\"claf.modules.encoder.html#module-claf.modules.encoder\">claf.modules.encoder (module)</a>\n</li>\n      <li><a href=\"claf.modules.encoder.html#module-claf.modules.encoder.lstm_cell_with_projection\">claf.modules.encoder.lstm_cell_with_projection (module)</a>\n</li>\n      <li><a href=\"claf.modules.encoder.html#module-claf.modules.encoder.positional\">claf.modules.encoder.positional (module)</a>\n</li>\n      <li><a href=\"claf.modules.html#module-claf.modules.functional\">claf.modules.functional (module)</a>\n</li>\n      <li><a href=\"claf.modules.html#module-claf.modules.initializer\">claf.modules.initializer (module)</a>\n</li>\n      <li><a href=\"claf.modules.layer.html#module-claf.modules.layer\">claf.modules.layer (module)</a>\n</li>\n      <li><a href=\"claf.modules.layer.html#module-claf.modules.layer.highway\">claf.modules.layer.highway (module)</a>\n</li>\n      <li><a href=\"claf.modules.layer.html#module-claf.modules.layer.normalization\">claf.modules.layer.normalization (module)</a>\n</li>\n      <li><a href=\"claf.modules.layer.html#module-claf.modules.layer.positionwise\">claf.modules.layer.positionwise (module)</a>\n</li>\n      <li><a href=\"claf.modules.layer.html#module-claf.modules.layer.residual\">claf.modules.layer.residual (module)</a>\n</li>\n      <li><a href=\"claf.modules.layer.html#module-claf.modules.layer.scalar_mix\">claf.modules.layer.scalar_mix (module)</a>\n</li>\n      <li><a href=\"claf.tokens.html#module-claf.tokens\">claf.tokens (module)</a>\n</li>\n      <li><a href=\"claf.tokens.html#module-claf.tokens.cove\">claf.tokens.cove (module)</a>\n</li>\n      <li><a href=\"claf.tokens.html#module-claf.tokens.elmo\">claf.tokens.elmo (module)</a>\n</li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding\">claf.tokens.embedding (module)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.base\">claf.tokens.embedding.base (module)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.bert_embedding\">claf.tokens.embedding.bert_embedding (module)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.char_embedding\">claf.tokens.embedding.char_embedding (module)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.cove_embedding\">claf.tokens.embedding.cove_embedding (module)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.elmo_embedding\">claf.tokens.embedding.elmo_embedding (module)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.frequent_word_embedding\">claf.tokens.embedding.frequent_word_embedding (module)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.sparse_feature\">claf.tokens.embedding.sparse_feature (module)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.word_embedding\">claf.tokens.embedding.word_embedding (module)</a>\n</li>\n      <li><a href=\"claf.tokens.html#module-claf.tokens.hangul\">claf.tokens.hangul (module)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer\">claf.tokens.indexer (module)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.base\">claf.tokens.indexer.base (module)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.bert_indexer\">claf.tokens.indexer.bert_indexer (module)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.char_indexer\">claf.tokens.indexer.char_indexer (module)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.elmo_indexer\">claf.tokens.indexer.elmo_indexer (module)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.exact_match_indexer\">claf.tokens.indexer.exact_match_indexer (module)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.linguistic_indexer\">claf.tokens.indexer.linguistic_indexer (module)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.word_indexer\">claf.tokens.indexer.word_indexer (module)</a>\n</li>\n      <li><a href=\"claf.tokens.html#module-claf.tokens.linguistic\">claf.tokens.linguistic (module)</a>\n</li>\n      <li><a href=\"claf.tokens.html#module-claf.tokens.text_handler\">claf.tokens.text_handler (module)</a>\n</li>\n      <li><a href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder\">claf.tokens.token_embedder (module)</a>\n</li>\n      <li><a href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder.base\">claf.tokens.token_embedder.base (module)</a>\n</li>\n      <li><a href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder.basic_embedder\">claf.tokens.token_embedder.basic_embedder (module)</a>\n</li>\n      <li><a href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder.reading_comprehension_embedder\">claf.tokens.token_embedder.reading_comprehension_embedder (module)</a>\n</li>\n      <li><a href=\"claf.tokens.html#module-claf.tokens.token_maker\">claf.tokens.token_maker (module)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer\">claf.tokens.tokenizer (module)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.base\">claf.tokens.tokenizer.base (module)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.char\">claf.tokens.tokenizer.char (module)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.pass_text\">claf.tokens.tokenizer.pass_text (module)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.sent\">claf.tokens.tokenizer.sent (module)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.subword\">claf.tokens.tokenizer.subword (module)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.utils\">claf.tokens.tokenizer.utils (module)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.word\">claf.tokens.tokenizer.word (module)</a>\n</li>\n      <li><a href=\"claf.tokens.html#module-claf.tokens.vocabulary\">claf.tokens.vocabulary (module)</a>\n</li>\n      <li><a href=\"claf.html#module-claf.utils\">claf.utils (module)</a>\n</li>\n      <li><a href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader.CLASS_DATA\">CLASS_DATA (claf.data.reader.bert.seq_cls.SeqClsBertReader attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.cola.CoLAReader.CLASS_DATA\">(claf.data.reader.cola.CoLAReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.CoLABertReader.CLASS_DATA\">(claf.data.reader.CoLABertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.CoLAReader.CLASS_DATA\">(claf.data.reader.CoLAReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.MNLIBertReader.CLASS_DATA\">(claf.data.reader.MNLIBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.MRPCBertReader.CLASS_DATA\">(claf.data.reader.MRPCBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.MultiTaskBertReader.CLASS_DATA\">(claf.data.reader.MultiTaskBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.QNLIBertReader.CLASS_DATA\">(claf.data.reader.QNLIBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.QQPBertReader.CLASS_DATA\">(claf.data.reader.QQPBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.RTEBertReader.CLASS_DATA\">(claf.data.reader.RTEBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.seq_cls.SeqClsReader.CLASS_DATA\">(claf.data.reader.seq_cls.SeqClsReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.SeqClsBertReader.CLASS_DATA\">(claf.data.reader.SeqClsBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.SeqClsReader.CLASS_DATA\">(claf.data.reader.SeqClsReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.SSTBertReader.CLASS_DATA\">(claf.data.reader.SSTBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.WNLIBertReader.CLASS_DATA\">(claf.data.reader.WNLIBertReader attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.linguistic.NER.classes\">classes (claf.tokens.linguistic.NER attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.html#claf.tokens.linguistic.POSTag.classes\">(claf.tokens.linguistic.POSTag attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.modules.attention.html#claf.modules.attention.CoAttention\">CoAttention (class in claf.modules.attention)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.co_attention.CoAttention\">(class in claf.modules.attention.co_attention)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.CoLABertReader\">CoLABertReader (class in claf.data.reader)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.CoLAReader\">CoLAReader (class in claf.data.reader)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.cola.CoLAReader\">(class in claf.data.reader.cola)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.html#claf.data.collate.FeatLabelPadCollator.collate\">collate() (claf.data.collate.FeatLabelPadCollator method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.html#claf.data.collate.PadCollator.collate\">(claf.data.collate.PadCollator method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.base.DatasetBase.collate_fn\">collate_fn() (claf.data.dataset.base.DatasetBase method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.MultiTaskBertDataset.collate_fn\">(claf.data.dataset.MultiTaskBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.RegressionBertDataset.collate_fn\">(claf.data.dataset.RegressionBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset.collate_fn\">(claf.data.dataset.seq_cls.SeqClsDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset.collate_fn\">(claf.data.dataset.SeqClsBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsDataset.collate_fn\">(claf.data.dataset.SeqClsDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.collate_fn\">(claf.data.dataset.squad.SQuADDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.collate_fn\">(claf.data.dataset.SQuADBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADDataset.collate_fn\">(claf.data.dataset.SQuADDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.collate_fn\">(claf.data.dataset.TokClsBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset.collate_fn\">(claf.data.dataset.wikisql.WikiSQLDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.WikiSQLDataset.collate_fn\">(claf.data.dataset.WikiSQLDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.learn.html#claf.learn.experiment.Experiment.common_setting\">common_setting() (claf.learn.experiment.Experiment method)</a>\n</li>\n      <li><a href=\"claf.machine.html#claf.machine.module.Module.COMPONENT\">COMPONENT (claf.machine.module.Module attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.compose\">compose() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.compute_exact\">compute_exact() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.compute_f1\">compute_f1() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsValuePointer.concat_start_and_end_zero_padding\">concat_start_and_end_zero_padding() (claf.model.semantic_parsing.sqlnet.CondsValuePointer method)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.COND_OPS\">COND_OPS (claf.model.semantic_parsing.mixin.WikiSQL attribute)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsColPredictor\">CondsColPredictor (class in claf.model.semantic_parsing.sqlnet)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsNumPredictor\">CondsNumPredictor (class in claf.model.semantic_parsing.sqlnet)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsOpPredictor\">CondsOpPredictor (class in claf.model.semantic_parsing.sqlnet)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsPredictor\">CondsPredictor (class in claf.model.semantic_parsing.sqlnet)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsValuePointer\">CondsValuePointer (class in claf.model.semantic_parsing.sqlnet)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.config\">config() (claf.model.base.ModelBase property)</a>\n\n      <ul>\n        <li><a href=\"claf.config.html#claf.config.args.config\">(in module claf.config.args)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.CoNLL2003BertReader\">CoNLL2003BertReader (class in claf.data.reader)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.bert.html#claf.data.reader.bert.conll2003.CoNLL2003BertReader\">(class in claf.data.reader.bert.conll2003)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.context_maxlen\">context_maxlen() (claf.data.dataset.squad.SQuADDataset property)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADDataset.context_maxlen\">(claf.data.dataset.SQuADDataset property)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.html#claf.data.data_handler.DataHandler.convert_cache_path\">convert_cache_path() (claf.data.data_handler.DataHandler method)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.utils.convert_config2dict\">convert_config2dict() (in module claf.config.utils)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.utils.convert_position_to_decoder_input\">convert_position_to_decoder_input() (in module claf.model.semantic_parsing.utils)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.base.DataReader.convert_to_dataset\">convert_to_dataset() (claf.data.reader.base.DataReader method)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.wikisql_official.count_lines\">count_lines() (in module claf.metric.wikisql_official)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.COVE_TYPE\">COVE_TYPE (claf.tokens.token_maker.TokenMaker attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.CoveEmbedding\">CoveEmbedding (class in claf.tokens.embedding)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.cove_embedding.CoveEmbedding\">(class in claf.tokens.embedding.cove_embedding)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.CoveTokenMaker\">CoveTokenMaker (class in claf.tokens)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.base.Factory.create\">create() (claf.config.factory.base.Factory method)</a>\n\n      <ul>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.data_loader.DataLoaderFactory.create\">(claf.config.factory.data_loader.DataLoaderFactory method)</a>\n</li>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.data_reader.DataReaderFactory.create\">(claf.config.factory.data_reader.DataReaderFactory method)</a>\n</li>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.DataLoaderFactory.create\">(claf.config.factory.DataLoaderFactory method)</a>\n</li>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.DataReaderFactory.create\">(claf.config.factory.DataReaderFactory method)</a>\n</li>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.model.ModelFactory.create\">(claf.config.factory.model.ModelFactory method)</a>\n</li>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.ModelFactory.create\">(claf.config.factory.ModelFactory method)</a>\n</li>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.optimizer.OptimizerFactory.create\">(claf.config.factory.optimizer.OptimizerFactory method)</a>\n</li>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.OptimizerFactory.create\">(claf.config.factory.OptimizerFactory method)</a>\n</li>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.TokenMakersFactory.create\">(claf.config.factory.TokenMakersFactory method)</a>\n</li>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.tokens.TokenMakersFactory.create\">(claf.config.factory.tokens.TokenMakersFactory method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.model.ModelFactory.create_token_embedder\">create_token_embedder() (claf.config.factory.model.ModelFactory method)</a>\n\n      <ul>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.ModelFactory.create_token_embedder\">(claf.config.factory.ModelFactory method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.utils.create_tokenizer_with_regex\">create_tokenizer_with_regex() (in module claf.tokens.tokenizer.utils)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"D\">D</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.config.html#claf.config.args.data\">data() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.data_handler.DataHandler\">DataHandler (class in claf.data.data_handler)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.DataLoaderFactory\">DataLoaderFactory (class in claf.config.factory)</a>\n\n      <ul>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.data_loader.DataLoaderFactory\">(class in claf.config.factory.data_loader)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.base.DataReader\">DataReader (class in claf.data.reader.base)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.DataReaderFactory\">DataReaderFactory (class in claf.config.factory)</a>\n\n      <ul>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.data_reader.DataReaderFactory\">(class in claf.config.factory.data_reader)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.html#claf.data.data_handler.CachePath.DATASET\">DATASET (claf.data.data_handler.CachePath attribute)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.dataset\">dataset() (claf.model.base.ModelBase property)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.base.DatasetBase\">DatasetBase (class in claf.data.dataset.base)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.decode_pointer\">decode_pointer() (claf.model.semantic_parsing.mixin.WikiSQL method)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsValuePointer.decode_then_output\">decode_then_output() (claf.model.semantic_parsing.sqlnet.CondsValuePointer method)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.decompose\">decompose() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.DEFAULT_OOV_INDEX\">DEFAULT_OOV_INDEX (claf.tokens.vocabulary.Vocab attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.DEFAULT_OOV_TOKEN\">DEFAULT_OOV_TOKEN (claf.tokens.vocabulary.Vocab attribute)</a>\n</li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.DEFAULT_PAD_INDEX\">DEFAULT_PAD_INDEX (claf.tokens.vocabulary.Vocab attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.DEFAULT_PAD_TOKEN\">DEFAULT_PAD_TOKEN (claf.tokens.vocabulary.Vocab attribute)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.namespace.NestedNamespace.delete_unselected\">delete_unselected() (claf.config.namespace.NestedNamespace method)</a>\n</li>\n      <li><a href=\"claf.modules.conv.html#claf.modules.conv.DepSepConv\">DepSepConv (class in claf.modules.conv)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.conv.html#claf.modules.conv.depthwise_separable_conv.DepSepConv\">(class in claf.modules.conv.depthwise_separable_conv)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.DocQA\">DocQA (class in claf.model.reading_comprehension)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa.DocQA\">(class in claf.model.reading_comprehension.docqa)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.DocQA_No_Answer\">DocQA_No_Answer (class in claf.model.reading_comprehension)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.DocQA_No_Answer\">(class in claf.model.reading_comprehension.docqa_no_answer)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.modules.attention.html#claf.modules.attention.DocQAAttention\">DocQAAttention (class in claf.modules.attention)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.docqa_attention.DocQAAttention\">(class in claf.modules.attention.docqa_attention)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.DrQA\">DrQA (class in claf.model.reading_comprehension)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.drqa.DrQA\">(class in claf.model.reading_comprehension.drqa)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.html#claf.data.data_handler.DataHandler.dump\">dump() (claf.data.data_handler.DataHandler method)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.dump\">(claf.tokens.vocabulary.Vocab method)</a>\n</li>\n      </ul></li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"E\">E</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.html#claf.tokens.elmo.Elmo\">Elmo (class in claf.tokens.elmo)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.ELMO_TYPE\">ELMO_TYPE (claf.tokens.token_maker.TokenMaker attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.ELMoEmbedding\">ELMoEmbedding (class in claf.tokens.embedding)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.elmo_embedding.ELMoEmbedding\">(class in claf.tokens.embedding.elmo_embedding)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer\">ELMoIndexer (class in claf.tokens.indexer)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer\">(class in claf.tokens.indexer.elmo_indexer)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.elmo.ElmoLstm\">ElmoLstm (class in claf.tokens.elmo)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.ElmoTokenMaker\">ElmoTokenMaker (class in claf.tokens)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.embedding_fn\">embedding_fn() (claf.tokens.token_maker.TokenMaker property)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.tensorboard.TensorBoard.embedding_summary\">embedding_summary() (claf.learn.tensorboard.TensorBoard method)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.utils.encode_column\">encode_column() (in module claf.model.semantic_parsing.utils)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.qanet.EncoderBlock\">EncoderBlock (class in claf.model.reading_comprehension.qanet)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.end_of_sentence_character\">end_of_sentence_character (claf.tokens.indexer.elmo_indexer.ELMoIndexer attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.end_of_sentence_character\">(claf.tokens.indexer.ELMoIndexer attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.end_of_sentence_characters\">end_of_sentence_characters (claf.tokens.indexer.elmo_indexer.ELMoIndexer attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.end_of_sentence_characters\">(claf.tokens.indexer.ELMoIndexer attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.end_of_word_character\">end_of_word_character (claf.tokens.indexer.elmo_indexer.ELMoIndexer attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.end_of_word_character\">(claf.tokens.indexer.ELMoIndexer attribute)</a>\n</li>\n      </ul></li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.EOS_TOKEN\">EOS_TOKEN (claf.tokens.indexer.elmo_indexer.ELMoIndexer attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.EOS_TOKEN\">(claf.tokens.indexer.ELMoIndexer attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.TrainCounter.epoch\">epoch (claf.learn.utils.TrainCounter attribute)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.mode.Mode.EVAL\">EVAL (claf.learn.mode.Mode attribute)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.trainer.Trainer.evaluate\">evaluate() (claf.learn.trainer.Trainer method)</a>\n\n      <ul>\n        <li><a href=\"claf.config.html#claf.config.args.evaluate\">(in module claf.config.args)</a>\n</li>\n        <li><a href=\"claf.metric.html#claf.metric.squad_v1_official.evaluate\">(in module claf.metric.squad_v1_official)</a>\n</li>\n        <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.evaluate\">(in module claf.metric.squad_v2_official)</a>\n</li>\n        <li><a href=\"claf.metric.html#claf.metric.wikisql_official.evaluate\">(in module claf.metric.wikisql_official)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.learn.html#claf.learn.trainer.Trainer.evaluate_inference_latency\">evaluate_inference_latency() (claf.learn.trainer.Trainer method)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v1_official.exact_match_score\">exact_match_score() (in module claf.metric.squad_v1_official)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.EXACT_MATCH_TYPE\">EXACT_MATCH_TYPE (claf.tokens.token_maker.TokenMaker attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ExactMatchIndexer\">ExactMatchIndexer (class in claf.tokens.indexer)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer\">(class in claf.tokens.indexer.exact_match_indexer)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.ExactMatchTokenMaker\">ExactMatchTokenMaker (class in claf.tokens)</a>\n</li>\n      <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.RCTokenEmbedder.EXCLUSIVE_TOKENS\">EXCLUSIVE_TOKENS (claf.tokens.token_embedder.RCTokenEmbedder attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder.EXCLUSIVE_TOKENS\">(claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.machine.html#claf.machine.module.Module.EXPERIMENT\">EXPERIMENT (claf.machine.module.Module attribute)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.experiment.Experiment\">Experiment (class in claf.learn.experiment)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"F\">F</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.metric.html#claf.metric.classification.f1\">f1() (in module claf.metric.classification)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v1_official.f1_score\">f1_score() (in module claf.metric.squad_v1_official)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.base.Factory\">Factory (class in claf.config.factory.base)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.collate.FeatLabelPadCollator\">FeatLabelPadCollator (class in claf.data.collate)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.FEATURE_TYPE\">FEATURE_TYPE (claf.tokens.token_maker.TokenMaker attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.FeatureTokenMaker\">FeatureTokenMaker (class in claf.tokens)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.base.DataReader.filter_texts\">filter_texts() (claf.data.reader.base.DataReader method)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.utils.filter_used_column\">filter_used_column() (in module claf.model.semantic_parsing.utils)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.find_all_best_thresh\">find_all_best_thresh() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.find_best_thresh\">find_best_thresh() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.html#claf.utils.flatten\">flatten() (in module claf.utils)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.forward\">forward() (claf.model.base.ModelBase method)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.BertForQA.forward\">(claf.model.reading_comprehension.BertForQA method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.BiDAF.forward\">(claf.model.reading_comprehension.BiDAF method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.bidaf.BiDAF.forward\">(claf.model.reading_comprehension.bidaf.BiDAF method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.BiDAF_No_Answer.forward\">(claf.model.reading_comprehension.BiDAF_No_Answer method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.bidaf_no_answer.BiDAF_No_Answer.forward\">(claf.model.reading_comprehension.bidaf_no_answer.BiDAF_No_Answer method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.DocQA.forward\">(claf.model.reading_comprehension.DocQA method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa.DocQA.forward\">(claf.model.reading_comprehension.docqa.DocQA method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa.SelfAttention.forward\">(claf.model.reading_comprehension.docqa.SelfAttention method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.DocQA_No_Answer.forward\">(claf.model.reading_comprehension.DocQA_No_Answer method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.DocQA_No_Answer.forward\">(claf.model.reading_comprehension.docqa_no_answer.DocQA_No_Answer method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.NoAnswer.forward\">(claf.model.reading_comprehension.docqa_no_answer.NoAnswer method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.SelfAttention.forward\">(claf.model.reading_comprehension.docqa_no_answer.SelfAttention method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.DrQA.forward\">(claf.model.reading_comprehension.DrQA method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.drqa.DrQA.forward\">(claf.model.reading_comprehension.drqa.DrQA method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.QANet.forward\">(claf.model.reading_comprehension.QANet method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.qanet.EncoderBlock.forward\">(claf.model.reading_comprehension.qanet.EncoderBlock method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.qanet.QANet.forward\">(claf.model.reading_comprehension.qanet.QANet method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.RoBertaForQA.forward\">(claf.model.reading_comprehension.RoBertaForQA method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.SQLNet.forward\">(claf.model.semantic_parsing.SQLNet method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.AggPredictor.forward\">(claf.model.semantic_parsing.sqlnet.AggPredictor method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsColPredictor.forward\">(claf.model.semantic_parsing.sqlnet.CondsColPredictor method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsNumPredictor.forward\">(claf.model.semantic_parsing.sqlnet.CondsNumPredictor method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsOpPredictor.forward\">(claf.model.semantic_parsing.sqlnet.CondsOpPredictor method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsPredictor.forward\">(claf.model.semantic_parsing.sqlnet.CondsPredictor method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.CondsValuePointer.forward\">(claf.model.semantic_parsing.sqlnet.CondsValuePointer method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.SelPredictor.forward\">(claf.model.semantic_parsing.sqlnet.SelPredictor method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.SQLNet.forward\">(claf.model.semantic_parsing.sqlnet.SQLNet method)</a>\n</li>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.BertForSeqCls.forward\">(claf.model.sequence_classification.BertForSeqCls method)</a>\n</li>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.RobertaForSeqCls.forward\">(claf.model.sequence_classification.RobertaForSeqCls method)</a>\n</li>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention.forward\">(claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention method)</a>\n</li>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.StructuredSelfAttention.forward\">(claf.model.sequence_classification.StructuredSelfAttention method)</a>\n</li>\n        <li><a href=\"claf.model.token_classification.html#claf.model.token_classification.BertForTokCls.forward\">(claf.model.token_classification.BertForTokCls method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.bi_attention.BiAttention.forward\">(claf.modules.attention.bi_attention.BiAttention method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.BiAttention.forward\">(claf.modules.attention.BiAttention method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.BilinearSeqAttn.forward\">(claf.modules.attention.BilinearSeqAttn method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.co_attention.CoAttention.forward\">(claf.modules.attention.co_attention.CoAttention method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.CoAttention.forward\">(claf.modules.attention.CoAttention method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.docqa_attention.DocQAAttention.forward\">(claf.modules.attention.docqa_attention.DocQAAttention method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.DocQAAttention.forward\">(claf.modules.attention.DocQAAttention method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.LinearSeqAttn.forward\">(claf.modules.attention.LinearSeqAttn method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.multi_head_attention.MultiHeadAttention.forward\">(claf.modules.attention.multi_head_attention.MultiHeadAttention method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.MultiHeadAttention.forward\">(claf.modules.attention.MultiHeadAttention method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.seq_attention.BilinearSeqAttn.forward\">(claf.modules.attention.seq_attention.BilinearSeqAttn method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.seq_attention.LinearSeqAttn.forward\">(claf.modules.attention.seq_attention.LinearSeqAttn method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.seq_attention.SeqAttnMatch.forward\">(claf.modules.attention.seq_attention.SeqAttnMatch method)</a>\n</li>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.SeqAttnMatch.forward\">(claf.modules.attention.SeqAttnMatch method)</a>\n</li>\n        <li><a href=\"claf.modules.conv.html#claf.modules.conv.DepSepConv.forward\">(claf.modules.conv.DepSepConv method)</a>\n</li>\n        <li><a href=\"claf.modules.conv.html#claf.modules.conv.depthwise_separable_conv.DepSepConv.forward\">(claf.modules.conv.depthwise_separable_conv.DepSepConv method)</a>\n</li>\n        <li><a href=\"claf.modules.conv.html#claf.modules.conv.pointwise_conv.PointwiseConv.forward\">(claf.modules.conv.pointwise_conv.PointwiseConv method)</a>\n</li>\n        <li><a href=\"claf.modules.conv.html#claf.modules.conv.PointwiseConv.forward\">(claf.modules.conv.PointwiseConv method)</a>\n</li>\n        <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection.forward\">(claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection method)</a>\n</li>\n        <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.LstmCellWithProjection.forward\">(claf.modules.encoder.LstmCellWithProjection method)</a>\n</li>\n        <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.positional.PositionalEncoding.forward\">(claf.modules.encoder.positional.PositionalEncoding method)</a>\n</li>\n        <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.PositionalEncoding.forward\">(claf.modules.encoder.PositionalEncoding method)</a>\n</li>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.Highway.forward\">(claf.modules.layer.Highway method)</a>\n</li>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.highway.Highway.forward\">(claf.modules.layer.highway.Highway method)</a>\n</li>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.normalization.LayerNorm.forward\">(claf.modules.layer.normalization.LayerNorm method)</a>\n</li>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.positionwise.PositionwiseFeedForward.forward\">(claf.modules.layer.positionwise.PositionwiseFeedForward method)</a>\n</li>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.PositionwiseFeedForward.forward\">(claf.modules.layer.PositionwiseFeedForward method)</a>\n</li>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.residual.ResidualConnection.forward\">(claf.modules.layer.residual.ResidualConnection method)</a>\n</li>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.ResidualConnection.forward\">(claf.modules.layer.ResidualConnection method)</a>\n</li>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.scalar_mix.ScalarMix.forward\">(claf.modules.layer.scalar_mix.ScalarMix method)</a>\n</li>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.ScalarMix.forward\">(claf.modules.layer.ScalarMix method)</a>\n</li>\n        <li><a href=\"claf.tokens.html#claf.tokens.cove.MTLSTM.forward\">(claf.tokens.cove.MTLSTM method)</a>\n</li>\n        <li><a href=\"claf.tokens.html#claf.tokens.elmo.Elmo.forward\">(claf.tokens.elmo.Elmo method)</a>\n</li>\n        <li><a href=\"claf.tokens.html#claf.tokens.elmo.ElmoLstm.forward\">(claf.tokens.elmo.ElmoLstm method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.base.TokenEmbedding.forward\">(claf.tokens.embedding.base.TokenEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.bert_embedding.BertEmbedding.forward\">(claf.tokens.embedding.bert_embedding.BertEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.BertEmbedding.forward\">(claf.tokens.embedding.BertEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.char_embedding.CharEmbedding.forward\">(claf.tokens.embedding.char_embedding.CharEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.CharEmbedding.forward\">(claf.tokens.embedding.CharEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.cove_embedding.CoveEmbedding.forward\">(claf.tokens.embedding.cove_embedding.CoveEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.CoveEmbedding.forward\">(claf.tokens.embedding.CoveEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.elmo_embedding.ELMoEmbedding.forward\">(claf.tokens.embedding.elmo_embedding.ELMoEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.ELMoEmbedding.forward\">(claf.tokens.embedding.ELMoEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding.forward\">(claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.FrequentTuningWordEmbedding.forward\">(claf.tokens.embedding.FrequentTuningWordEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.OneHotEncoding.forward\">(claf.tokens.embedding.sparse_feature.OneHotEncoding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseFeature.forward\">(claf.tokens.embedding.sparse_feature.SparseFeature method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseToEmbedding.forward\">(claf.tokens.embedding.sparse_feature.SparseToEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.SparseFeature.forward\">(claf.tokens.embedding.SparseFeature method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.word_embedding.WordEmbedding.forward\">(claf.tokens.embedding.word_embedding.WordEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.WordEmbedding.forward\">(claf.tokens.embedding.WordEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.base.TokenEmbedder.forward\">(claf.tokens.token_embedder.base.TokenEmbedder method)</a>\n</li>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder.forward\">(claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder method)</a>\n</li>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.BasicTokenEmbedder.forward\">(claf.tokens.token_embedder.BasicTokenEmbedder method)</a>\n</li>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.RCTokenEmbedder.forward\">(claf.tokens.token_embedder.RCTokenEmbedder method)</a>\n</li>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder.forward\">(claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder method)</a>\n</li>\n      </ul></li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.modules.html#claf.modules.functional.forward_rnn_with_pack\">forward_rnn_with_pack() (in module claf.modules.functional)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.FREQUENT_WORD_TYPE\">FREQUENT_WORD_TYPE (claf.tokens.token_maker.TokenMaker attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.FrequentTuningWordEmbedding\">FrequentTuningWordEmbedding (class in claf.tokens.embedding)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding\">(class in claf.tokens.embedding.frequent_word_embedding)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.FrequentWordTokenMaker\">FrequentWordTokenMaker (class in claf.tokens)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.elmo.Elmo.from_params\">from_params() (claf.tokens.elmo.Elmo class method)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.from_texts\">from_texts() (claf.tokens.vocabulary.Vocab method)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"G\">G</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.config.html#claf.config.args.general\">general() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.generate_queries\">generate_queries() (claf.model.semantic_parsing.mixin.WikiSQL method)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.registry.Registry.get\">get() (claf.config.registry.Registry method)</a>\n</li>\n      <li><a href=\"claf.modules.html#claf.modules.activation.get_activation_fn\">get_activation_fn() (in module claf.modules.activation)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.get_all_tokens\">get_all_tokens() (claf.tokens.vocabulary.Vocab method)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_bert_tokens\">get_bert_tokens() (claf.data.dataset.SQuADBertDataset method)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.ReadingComprehension.get_best_span\">get_best_span() (claf.model.reading_comprehension.mixin.ReadingComprehension method)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset.get_class_text_with_idx\">get_class_text_with_idx() (claf.data.dataset.seq_cls.SeqClsDataset method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset.get_class_text_with_idx\">(claf.data.dataset.SeqClsBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsDataset.get_class_text_with_idx\">(claf.data.dataset.SeqClsDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.machine.components.retrieval.html#claf.machine.components.retrieval.tfidf.TFIDF.get_closest\">get_closest() (claf.machine.components.retrieval.tfidf.TFIDF method)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.components.html#claf.machine.components.TFIDF.get_closest\">(claf.machine.components.TFIDF method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.wikisql.WikiSQLReader.get_coditions_value_position\">get_coditions_value_position() (claf.data.reader.wikisql.WikiSQLReader method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.WikiSQLReader.get_coditions_value_position\">(claf.data.reader.WikiSQLReader method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.utils.get_column_lengths\">get_column_lengths() (in module claf.model.semantic_parsing.utils)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_context\">get_context() (claf.data.dataset.squad.SQuADDataset method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_context\">(claf.data.dataset.SQuADBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADDataset.get_context\">(claf.data.dataset.SQuADDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.TrainCounter.get_display\">get_display() (claf.learn.utils.TrainCounter method)</a>\n</li>\n      <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.get_dropout_mask\">get_dropout_mask() (in module claf.modules.encoder.lstm_cell_with_projection)</a>\n</li>\n      <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.base.TokenEmbedder.get_embed_dim\">get_embed_dim() (claf.tokens.token_embedder.base.TokenEmbedder method)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder.get_embed_dim\">(claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder method)</a>\n</li>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.BasicTokenEmbedder.get_embed_dim\">(claf.tokens.token_embedder.BasicTokenEmbedder method)</a>\n</li>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.RCTokenEmbedder.get_embed_dim\">(claf.tokens.token_embedder.RCTokenEmbedder method)</a>\n</li>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder.get_embed_dim\">(claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.base.DatasetBase.get_ground_truth\">get_ground_truth() (claf.data.dataset.base.DatasetBase method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.RegressionBertDataset.get_ground_truth\">(claf.data.dataset.RegressionBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset.get_ground_truth\">(claf.data.dataset.seq_cls.SeqClsDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset.get_ground_truth\">(claf.data.dataset.SeqClsBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsDataset.get_ground_truth\">(claf.data.dataset.SeqClsDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.get_ground_truth\">(claf.data.dataset.TokClsBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset.get_ground_truth\">(claf.data.dataset.wikisql.WikiSQLDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.WikiSQLDataset.get_ground_truth\">(claf.data.dataset.WikiSQLDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.base.DatasetBase.get_ground_truths\">get_ground_truths() (claf.data.dataset.base.DatasetBase method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_ground_truths\">(claf.data.dataset.squad.SQuADDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_ground_truths\">(claf.data.dataset.SQuADBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADDataset.get_ground_truths\">(claf.data.dataset.SQuADDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.RegressionBertDataset.get_id\">get_id() (claf.data.dataset.RegressionBertDataset method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset.get_id\">(claf.data.dataset.seq_cls.SeqClsDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset.get_id\">(claf.data.dataset.SeqClsBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsDataset.get_id\">(claf.data.dataset.SeqClsDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_id\">(claf.data.dataset.SQuADBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.get_id\">(claf.data.dataset.TokClsBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset.get_id\">(claf.data.dataset.wikisql.WikiSQLDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.WikiSQLDataset.get_id\">(claf.data.dataset.WikiSQLDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.get_index\">get_index() (claf.tokens.vocabulary.Vocab method)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.args.get_input_arguments\">get_input_arguments() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.utils.get_is_head_of_word\">get_is_head_of_word() (in module claf.data.utils)</a>\n</li>\n      <li><a href=\"claf.modules.html#claf.modules.functional.get_mask_from_tokens\">get_mask_from_tokens() (in module claf.modules.functional)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.elmo.Elmo.get_output_dim\">get_output_dim() (claf.tokens.elmo.Elmo method)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.base.TokenEmbedding.get_output_dim\">(claf.tokens.embedding.base.TokenEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.bert_embedding.BertEmbedding.get_output_dim\">(claf.tokens.embedding.bert_embedding.BertEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.BertEmbedding.get_output_dim\">(claf.tokens.embedding.BertEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.char_embedding.CharEmbedding.get_output_dim\">(claf.tokens.embedding.char_embedding.CharEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.CharEmbedding.get_output_dim\">(claf.tokens.embedding.CharEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.cove_embedding.CoveEmbedding.get_output_dim\">(claf.tokens.embedding.cove_embedding.CoveEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.CoveEmbedding.get_output_dim\">(claf.tokens.embedding.CoveEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.elmo_embedding.ELMoEmbedding.get_output_dim\">(claf.tokens.embedding.elmo_embedding.ELMoEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.ELMoEmbedding.get_output_dim\">(claf.tokens.embedding.ELMoEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding.get_output_dim\">(claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.FrequentTuningWordEmbedding.get_output_dim\">(claf.tokens.embedding.FrequentTuningWordEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.OneHotEncoding.get_output_dim\">(claf.tokens.embedding.sparse_feature.OneHotEncoding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseFeature.get_output_dim\">(claf.tokens.embedding.sparse_feature.SparseFeature method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseToEmbedding.get_output_dim\">(claf.tokens.embedding.sparse_feature.SparseToEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.SparseFeature.get_output_dim\">(claf.tokens.embedding.SparseFeature method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.word_embedding.WordEmbedding.get_output_dim\">(claf.tokens.embedding.word_embedding.WordEmbedding method)</a>\n</li>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.WordEmbedding.get_output_dim\">(claf.tokens.embedding.WordEmbedding method)</a>\n</li>\n      </ul></li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.base.DatasetBase.get_predict\">get_predict() (claf.data.dataset.base.DatasetBase method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_predict\">(claf.data.dataset.squad.SQuADDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_predict\">(claf.data.dataset.SQuADBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADDataset.get_predict\">(claf.data.dataset.SQuADDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_qid\">get_qid() (claf.data.dataset.squad.SQuADDataset method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_qid\">(claf.data.dataset.SQuADBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADDataset.get_qid\">(claf.data.dataset.SQuADDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_qid_index\">get_qid_index() (claf.data.dataset.SQuADBertDataset method)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.get_raw_scores\">get_raw_scores() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.utils.get_sequence_a\">get_sequence_a() (in module claf.data.utils)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.get_session_name\">get_session_name() (in module claf.learn.utils)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.get_sorted_path\">get_sorted_path() (in module claf.learn.utils)</a>\n</li>\n      <li><a href=\"claf.modules.html#claf.modules.functional.get_sorted_seq_config\">get_sorted_seq_config() (in module claf.modules.functional)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset.get_table_id\">get_table_id() (claf.data.dataset.wikisql.WikiSQLDataset method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.WikiSQLDataset.get_table_id\">(claf.data.dataset.WikiSQLDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.html#claf.model.cls_utils.get_tag_dict\">get_tag_dict() (in module claf.model.cls_utils)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.get_tag_text_with_idx\">get_tag_text_with_idx() (claf.data.dataset.TokClsBertDataset method)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.get_tag_texts_with_idxs\">get_tag_texts_with_idxs() (claf.data.dataset.TokClsBertDataset method)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_text_span\">get_text_span() (claf.data.dataset.squad.SQuADDataset method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADDataset.get_text_span\">(claf.data.dataset.SQuADDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.get_text_with_index\">get_text_with_index() (claf.data.dataset.squad.SQuADDataset method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADBertDataset.get_text_with_index\">(claf.data.dataset.SQuADBertDataset method)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADDataset.get_text_with_index\">(claf.data.dataset.SQuADDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.get_token\">get_token() (claf.tokens.vocabulary.Vocab method)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.utils.get_token_dim\">get_token_dim() (in module claf.data.utils)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.utils.get_token_type\">get_token_type() (in module claf.data.utils)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset.get_tokenized_question\">get_tokenized_question() (claf.data.dataset.wikisql.WikiSQLDataset method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.WikiSQLDataset.get_tokenized_question\">(claf.data.dataset.WikiSQLDataset method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.get_tokens\">get_tokens() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.html#claf.utils.get_user_input\">get_user_input() (in module claf.utils)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.base.TokenEmbedding.get_vocab_size\">get_vocab_size() (claf.tokens.embedding.base.TokenEmbedding method)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.TrainCounter.global_step\">global_step (claf.learn.utils.TrainCounter attribute)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.tensorboard.TensorBoard.graph_summary\">graph_summary() (claf.learn.tensorboard.TensorBoard method)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"H\">H</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.has_approximant\">has_approximant() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.has_batchim\">has_batchim() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.has_jongsung\">has_jongsung() (in module claf.tokens.hangul)</a>\n</li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.modules.layer.html#claf.modules.layer.Highway\">Highway (class in claf.modules.layer)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.highway.Highway\">(class in claf.modules.layer.highway)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.histogram_na_prob\">histogram_na_prob() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.tensorboard.TensorBoard.histogram_summary\">histogram_summary() (claf.learn.tensorboard.TensorBoard method)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"I\">I</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.ili\">ili() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.tensorboard.TensorBoard.image_summary\">image_summary() (claf.learn.tensorboard.TensorBoard method)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.base.TokenIndexer.index\">index() (claf.tokens.indexer.base.TokenIndexer method)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.bert_indexer.BertIndexer.index\">(claf.tokens.indexer.bert_indexer.BertIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.BertIndexer.index\">(claf.tokens.indexer.BertIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.char_indexer.CharIndexer.index\">(claf.tokens.indexer.char_indexer.CharIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.CharIndexer.index\">(claf.tokens.indexer.CharIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.index\">(claf.tokens.indexer.elmo_indexer.ELMoIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.index\">(claf.tokens.indexer.ELMoIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer.index\">(claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ExactMatchIndexer.index\">(claf.tokens.indexer.ExactMatchIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.linguistic_indexer.LinguisticIndexer.index\">(claf.tokens.indexer.linguistic_indexer.LinguisticIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.LinguisticIndexer.index\">(claf.tokens.indexer.LinguisticIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.word_indexer.WordIndexer.index\">(claf.tokens.indexer.word_indexer.WordIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.WordIndexer.index\">(claf.tokens.indexer.WordIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.html#claf.tokens.text_handler.TextHandler.index\">(claf.tokens.text_handler.TextHandler method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.machine.components.retrieval.html#claf.machine.components.retrieval.tfidf.TFIDF.INDEX_FNAME\">INDEX_FNAME (claf.machine.components.retrieval.tfidf.TFIDF attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.components.html#claf.machine.components.TFIDF.INDEX_FNAME\">(claf.machine.components.TFIDF attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.char_indexer.CharIndexer.index_token\">index_token() (claf.tokens.indexer.char_indexer.CharIndexer method)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.CharIndexer.index_token\">(claf.tokens.indexer.CharIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.index_token\">(claf.tokens.indexer.elmo_indexer.ELMoIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.index_token\">(claf.tokens.indexer.ELMoIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer.index_token\">(claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer method)</a>\n</li>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ExactMatchIndexer.index_token\">(claf.tokens.indexer.ExactMatchIndexer method)</a>\n</li>\n      </ul></li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.indexer\">indexer() (claf.tokens.token_maker.TokenMaker property)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.mode.Mode.INFER_EVAL\">INFER_EVAL (claf.learn.mode.Mode attribute)</a>\n</li>\n      <li><a href=\"claf.machine.components.retrieval.html#claf.machine.components.retrieval.tfidf.TFIDF.init\">init() (claf.machine.components.retrieval.tfidf.TFIDF method)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.components.html#claf.machine.components.TFIDF.init\">(claf.machine.components.TFIDF method)</a>\n</li>\n        <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.init\">(claf.tokens.vocabulary.Vocab method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.MultiTaskBertDataset.init_iterators\">init_iterators() (claf.data.dataset.MultiTaskBertDataset method)</a>\n</li>\n      <li><a href=\"claf.machine.components.retrieval.html#claf.machine.components.retrieval.tfidf.TFIDF.init_model\">init_model() (claf.machine.components.retrieval.tfidf.TFIDF method)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.components.html#claf.machine.components.TFIDF.init_model\">(claf.machine.components.TFIDF method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.machine.html#claf.machine.NLU.intent_classification\">intent_classification() (claf.machine.NLU method)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.html#claf.machine.nlu.NLU.intent_classification\">(claf.machine.nlu.NLU method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.is_all_hangul\">is_all_hangul() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.text_handler.TextHandler.is_all_vocab_use_pretrained\">is_all_vocab_use_pretrained() (claf.tokens.text_handler.TextHandler method)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.is_hangul\">is_hangul() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.utils.is_lazy\">is_lazy() (in module claf.data.utils)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.is_ready\">is_ready() (claf.model.base.ModelBase method)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"J\">J</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.josa_eg\">josa_eg() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.josa_el\">josa_el() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.josa_en\">josa_en() (in module claf.tokens.hangul)</a>\n</li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.josa_gwa\">josa_gwa() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.josa_ida\">josa_ida() (in module claf.tokens.hangul)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.josa_ro\">josa_ro() (in module claf.tokens.hangul)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"K\">K</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.machine.html#claf.machine.module.Module.KNOWLEDGE_BASE\">KNOWLEDGE_BASE (claf.machine.module.Module attribute)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"L\">L</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.TokenMakersFactory.LANGS\">LANGS (claf.config.factory.TokenMakersFactory attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.tokens.TokenMakersFactory.LANGS\">(claf.config.factory.tokens.TokenMakersFactory attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.modules.html#claf.modules.functional.last_dim_masked_softmax\">last_dim_masked_softmax() (in module claf.modules.functional)</a>\n</li>\n      <li><a href=\"claf.modules.layer.html#claf.modules.layer.normalization.LayerNorm\">LayerNorm (class in claf.modules.layer.normalization)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.base.DatasetBase.lazy_evaluation\">lazy_evaluation() (claf.data.dataset.base.DatasetBase method)</a>\n</li>\n      <li><a href=\"claf.modules.attention.html#claf.modules.attention.LinearSeqAttn\">LinearSeqAttn (class in claf.modules.attention)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.seq_attention.LinearSeqAttn\">(class in claf.modules.attention.seq_attention)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.LINGUISTIC_TYPE\">LINGUISTIC_TYPE (claf.tokens.token_maker.TokenMaker attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.LinguisticIndexer\">LinguisticIndexer (class in claf.tokens.indexer)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.linguistic_indexer.LinguisticIndexer\">(class in claf.tokens.indexer.linguistic_indexer)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.LinguisticTokenMaker\">LinguisticTokenMaker (class in claf.tokens)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.data_handler.DataHandler.load\">load() (claf.data.data_handler.DataHandler method)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.html#claf.machine.base.Machine.load\">(claf.machine.base.Machine method)</a>\n</li>\n        <li><a href=\"claf.machine.components.retrieval.html#claf.machine.components.retrieval.tfidf.TFIDF.load\">(claf.machine.components.retrieval.tfidf.TFIDF method)</a>\n</li>\n        <li><a href=\"claf.machine.components.html#claf.machine.components.TFIDF.load\">(claf.machine.components.TFIDF method)</a>\n</li>\n        <li><a href=\"claf.machine.html#claf.machine.NLU.load\">(claf.machine.NLU method)</a>\n</li>\n        <li><a href=\"claf.machine.html#claf.machine.nlu.NLU.load\">(claf.machine.nlu.NLU method)</a>\n</li>\n        <li><a href=\"claf.machine.html#claf.machine.open_qa.OpenQA.load\">(claf.machine.open_qa.OpenQA method)</a>\n</li>\n        <li><a href=\"claf.machine.html#claf.machine.OpenQA.load\">(claf.machine.OpenQA method)</a>\n</li>\n        <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.load\">(claf.tokens.vocabulary.Vocab method)</a>\n</li>\n      </ul></li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.wikisql.WikiSQLReader.load_data\">load_data() (claf.data.reader.wikisql.WikiSQLReader method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.WikiSQLReader.load_data\">(claf.data.reader.WikiSQLReader method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.machine.html#claf.machine.base.Machine.load_from_config\">load_from_config() (claf.machine.base.Machine class method)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.namespace.NestedNamespace.load_from_json\">load_from_json() (claf.config.namespace.NestedNamespace method)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.load_model_checkpoint\">load_model_checkpoint() (in module claf.learn.utils)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.load_optimizer_checkpoint\">load_optimizer_checkpoint() (in module claf.learn.utils)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.experiment.Experiment.load_setting\">load_setting() (claf.learn.experiment.Experiment method)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.utils.load_spacy_model_for_tokenizer\">load_spacy_model_for_tokenizer() (in module claf.tokens.tokenizer.utils)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.load_vocabs\">load_vocabs() (in module claf.learn.utils)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.elmo.ElmoLstm.load_weights\">load_weights() (claf.tokens.elmo.ElmoLstm method)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.log_dir\">log_dir() (claf.model.base.ModelBase property)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.logger\">logger (in module claf.learn.utils)</a>\n</li>\n      <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.LstmCellWithProjection\">LstmCellWithProjection (class in claf.modules.encoder)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection\">(class in claf.modules.encoder.lstm_cell_with_projection)</a>\n</li>\n      </ul></li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"M\">M</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.data.html#claf.data.data_handler.CachePath.MACHINE\">MACHINE (claf.data.data_handler.CachePath attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.learn.html#claf.learn.mode.Mode.MACHINE\">(claf.learn.mode.Mode attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.machine.html#claf.machine.base.Machine\">Machine (class in claf.machine.base)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.args.machine\">machine() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.machine.html#claf.machine.open_qa.OpenQA.machine_reading\">machine_reading() (claf.machine.open_qa.OpenQA method)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.html#claf.machine.OpenQA.machine_reading\">(claf.machine.OpenQA method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.metric.html#claf.metric.classification.macro_f1\">macro_f1() (in module claf.metric.classification)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.classification.macro_precision\">macro_precision() (in module claf.metric.classification)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.classification.macro_recall\">macro_recall() (in module claf.metric.classification)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.main\">main() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.tokens.make_all_tokenizers\">make_all_tokenizers() (in module claf.config.factory.tokens)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.utils.make_batch\">make_batch() (in module claf.data.utils)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.utils.make_bert_input\">make_bert_input() (in module claf.data.utils)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.utils.make_bert_token_type\">make_bert_token_type() (in module claf.data.utils)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.utils.make_bert_token_types\">make_bert_token_types() (in module claf.data.utils)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.data_loader.make_data_loader\">make_data_loader() (in module claf.config.factory.data_loader)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.MultiTaskBertReader.make_data_reader\">make_data_reader() (claf.data.reader.MultiTaskBertReader method)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.make_eval_dict\">make_eval_dict() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.make_metrics\">make_metrics() (claf.model.base.ModelBase method)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv1.make_metrics\">(claf.model.reading_comprehension.mixin.SQuADv1 method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv1ForBert.make_metrics\">(claf.model.reading_comprehension.mixin.SQuADv1ForBert method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv2.make_metrics\">(claf.model.reading_comprehension.mixin.SQuADv2 method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.make_metrics\">(claf.model.semantic_parsing.mixin.WikiSQL method)</a>\n</li>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification.make_metrics\">(claf.model.sequence_classification.mixin.SequenceClassification method)</a>\n</li>\n        <li><a href=\"claf.model.token_classification.html#claf.model.token_classification.mixin.TokenClassification.make_metrics\">(claf.model.token_classification.mixin.TokenClassification method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.machine.html#claf.machine.base.Machine.make_module\">make_module() (claf.machine.base.Machine method)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.make_precision_recall_eval\">make_precision_recall_eval() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.make_predictions\">make_predictions() (claf.model.base.ModelBase method)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.ReadingComprehension.make_predictions\">(claf.model.reading_comprehension.mixin.ReadingComprehension method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.make_predictions\">(claf.model.semantic_parsing.mixin.WikiSQL method)</a>\n</li>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification.make_predictions\">(claf.model.sequence_classification.mixin.SequenceClassification method)</a>\n</li>\n        <li><a href=\"claf.model.token_classification.html#claf.model.token_classification.mixin.TokenClassification.make_predictions\">(claf.model.token_classification.mixin.TokenClassification method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.make_qid_to_has_ans\">make_qid_to_has_ans() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.word.WordTokenizer.make_split_regex_expression\">make_split_regex_expression() (claf.tokens.tokenizer.word.WordTokenizer method)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.WordTokenizer.make_split_regex_expression\">(claf.tokens.tokenizer.WordTokenizer method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.MultiTaskBertReader.make_task_by_reader\">make_task_by_reader() (claf.data.reader.MultiTaskBertReader method)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.text_handler.TextHandler.make_token_counters\">make_token_counters() (claf.tokens.text_handler.TextHandler method)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.tokens.make_tokenizer\">make_tokenizer() (in module claf.config.factory.tokens)</a>\n</li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.modules.html#claf.modules.functional.masked_log_softmax\">masked_log_softmax() (in module claf.modules.functional)</a>\n</li>\n      <li><a href=\"claf.modules.html#claf.modules.functional.masked_softmax\">masked_softmax() (in module claf.modules.functional)</a>\n</li>\n      <li><a href=\"claf.modules.html#claf.modules.functional.masked_zero\">masked_zero() (in module claf.modules.functional)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.base.Tokenizer.MAX_TO_KEEP_CACHE\">MAX_TO_KEEP_CACHE (claf.tokens.tokenizer.base.Tokenizer attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.max_word_length\">max_word_length (claf.tokens.indexer.elmo_indexer.ELMoIndexer attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.max_word_length\">(claf.tokens.indexer.ELMoIndexer attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.merge_eval\">merge_eval() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.merge_tokens\">merge_tokens() (claf.model.semantic_parsing.mixin.WikiSQL method)</a>\n</li>\n      <li><a href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader.METRIC_KEY\">METRIC_KEY (claf.data.reader.bert.seq_cls.SeqClsBertReader attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.bert.html#claf.data.reader.bert.squad.SQuADBertReader.METRIC_KEY\">(claf.data.reader.bert.squad.SQuADBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.CoLABertReader.METRIC_KEY\">(claf.data.reader.CoLABertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.MNLIBertReader.METRIC_KEY\">(claf.data.reader.MNLIBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.MRPCBertReader.METRIC_KEY\">(claf.data.reader.MRPCBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.QNLIBertReader.METRIC_KEY\">(claf.data.reader.QNLIBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.QQPBertReader.METRIC_KEY\">(claf.data.reader.QQPBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.RegressionBertReader.METRIC_KEY\">(claf.data.reader.RegressionBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.RTEBertReader.METRIC_KEY\">(claf.data.reader.RTEBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.SeqClsBertReader.METRIC_KEY\">(claf.data.reader.SeqClsBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.SQuADBertReader.METRIC_KEY\">(claf.data.reader.SQuADBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.SSTBertReader.METRIC_KEY\">(claf.data.reader.SSTBertReader attribute)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.STSBBertReader.METRIC_KEY\">(claf.data.reader.STSBBertReader attribute)</a>, <a href=\"claf.data.reader.html#claf.data.reader.STSBBertReader.METRIC_KEY\">[1]</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.WNLIBertReader.METRIC_KEY\">(claf.data.reader.WNLIBertReader attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v1_official.metric_max_over_ground_truths\">metric_max_over_ground_truths() (in module claf.metric.squad_v1_official)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.metrics\">metrics() (claf.model.base.ModelBase property)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.MNLIBertReader\">MNLIBertReader (class in claf.data.reader)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.mode.Mode\">Mode (class in claf.learn.mode)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.args.model\">model() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase\">ModelBase (class in claf.model.base)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.ModelFactory\">ModelFactory (class in claf.config.factory)</a>\n\n      <ul>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.model.ModelFactory\">(class in claf.config.factory.model)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelWithoutTokenEmbedder\">ModelWithoutTokenEmbedder (class in claf.model.base)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelWithTokenEmbedder\">ModelWithTokenEmbedder (class in claf.model.base)</a>\n</li>\n      <li><a href=\"claf.machine.html#claf.machine.module.Module\">Module (class in claf.machine.module)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.MRPCBertReader\">MRPCBertReader (class in claf.data.reader)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.cove.MTLSTM\">MTLSTM (class in claf.tokens.cove)</a>\n</li>\n      <li><a href=\"claf.modules.attention.html#claf.modules.attention.MultiHeadAttention\">MultiHeadAttention (class in claf.modules.attention)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.multi_head_attention.MultiHeadAttention\">(class in claf.modules.attention.multi_head_attention)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.MultiTaskBertDataset\">MultiTaskBertDataset (class in claf.data.dataset)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.MultiTaskBertReader\">MultiTaskBertReader (class in claf.data.reader)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"N\">N</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.html#claf.tokens.linguistic.NER\">NER (class in claf.tokens.linguistic)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.namespace.NestedNamespace\">NestedNamespace (class in claf.config.namespace)</a>\n</li>\n      <li><a href=\"claf.machine.html#claf.machine.NLU\">NLU (class in claf.machine)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.html#claf.machine.nlu.NLU\">(class in claf.machine.nlu)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.NoAnswer\">NoAnswer (class in claf.model.reading_comprehension.docqa_no_answer)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v1_official.normalize_answer\">normalize_answer() (in module claf.metric.squad_v1_official)</a>\n\n      <ul>\n        <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.normalize_answer\">(in module claf.metric.squad_v2_official)</a>\n</li>\n      </ul></li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.NotHangulException\">NotHangulException</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.NotLetterException\">NotLetterException</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.hangul.NotWordException\">NotWordException</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.args.nsml_for_internal\">nsml_for_internal() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset.num_classes\">num_classes() (claf.data.dataset.seq_cls.SeqClsDataset property)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset.num_classes\">(claf.data.dataset.SeqClsBertDataset property)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsDataset.num_classes\">(claf.data.dataset.SeqClsDataset property)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.num_tags\">num_tags() (claf.data.dataset.TokClsBertDataset property)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"O\">O</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.OneHotEncoding\">OneHotEncoding (class in claf.tokens.embedding.sparse_feature)</a>\n</li>\n      <li><a href=\"claf.machine.html#claf.machine.OpenQA\">OpenQA (class in claf.machine)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.html#claf.machine.open_qa.OpenQA\">(class in claf.machine.open_qa)</a>\n</li>\n      </ul></li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.config.html#claf.config.args.optimize_config\">optimize_config() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.OptimizerFactory\">OptimizerFactory (class in claf.config.factory)</a>\n\n      <ul>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.optimizer.OptimizerFactory\">(class in claf.config.factory.optimizer)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.config.html#claf.config.namespace.NestedNamespace.overwrite\">overwrite() (claf.config.namespace.NestedNamespace method)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"P\">P</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.data.html#claf.data.collate.PadCollator\">PadCollator (class in claf.data.collate)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.elmo_indexer.ELMoIndexer.padding_character\">padding_character (claf.tokens.indexer.elmo_indexer.ELMoIndexer attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.ELMoIndexer.padding_character\">(claf.tokens.indexer.ELMoIndexer attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.html#claf.data.utils.padding_tokens\">padding_tokens() (in module claf.data.utils)</a>\n</li>\n      <li><a href=\"claf.machine.components.retrieval.html#claf.machine.components.retrieval.tfidf.TFIDF.parse\">parse() (claf.machine.components.retrieval.tfidf.TFIDF method)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.components.html#claf.machine.components.TFIDF.parse\">(claf.machine.components.TFIDF method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.parse_args\">parse_args() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.PassText\">PassText (class in claf.tokens.tokenizer)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.pass_text.PassText\">(class in claf.tokens.tokenizer.pass_text)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention.penalty\">penalty() (claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention method)</a>\n\n      <ul>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.StructuredSelfAttention.penalty\">(claf.model.sequence_classification.StructuredSelfAttention method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.plot_pr_curve\">plot_pr_curve() (in module claf.metric.squad_v2_official)</a>\n</li>\n      <li><a href=\"claf.modules.conv.html#claf.modules.conv.PointwiseConv\">PointwiseConv (class in claf.modules.conv)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.conv.html#claf.modules.conv.pointwise_conv.PointwiseConv\">(class in claf.modules.conv.pointwise_conv)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.PositionalEncoding\">PositionalEncoding (class in claf.modules.encoder)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.positional.PositionalEncoding\">(class in claf.modules.encoder.positional)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.modules.layer.html#claf.modules.layer.PositionwiseFeedForward\">PositionwiseFeedForward (class in claf.modules.layer)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.positionwise.PositionwiseFeedForward\">(class in claf.modules.layer.positionwise)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.linguistic.POSTag\">POSTag (class in claf.tokens.linguistic)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.classification.precision\">precision() (in module claf.metric.classification)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.mode.Mode.PREDICT\">PREDICT (claf.learn.mode.Mode attribute)</a>\n</li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.learn.html#claf.learn.experiment.Experiment.predict\">predict() (claf.learn.experiment.Experiment method)</a>\n\n      <ul>\n        <li><a href=\"claf.learn.html#claf.learn.trainer.Trainer.predict\">(claf.learn.trainer.Trainer method)</a>\n</li>\n        <li><a href=\"claf.model.html#claf.model.base.ModelBase.predict\">(claf.model.base.ModelBase method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.ReadingComprehension.predict\">(claf.model.reading_comprehension.mixin.ReadingComprehension method)</a>\n</li>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv1ForBert.predict\">(claf.model.reading_comprehension.mixin.SQuADv1ForBert method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.predict\">(claf.model.semantic_parsing.mixin.WikiSQL method)</a>\n</li>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification.predict\">(claf.model.sequence_classification.mixin.SequenceClassification method)</a>\n</li>\n        <li><a href=\"claf.model.token_classification.html#claf.model.token_classification.mixin.TokenClassification.predict\">(claf.model.token_classification.mixin.TokenClassification method)</a>\n</li>\n        <li><a href=\"claf.config.html#claf.config.args.predict\">(in module claf.config.args)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.PRETRAINED_ALL\">PRETRAINED_ALL (claf.tokens.vocabulary.Vocab attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.PRETRAINED_INTERSECT\">PRETRAINED_INTERSECT (claf.tokens.vocabulary.Vocab attribute)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.data_handler.CachePath.PRETRAINED_VECTOR\">PRETRAINED_VECTOR (claf.data.data_handler.CachePath attribute)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.utils.pretty_json_dumps\">pretty_json_dumps() (in module claf.config.utils)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.print_examples\">print_examples() (claf.model.base.ModelBase method)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.ReadingComprehension.print_examples\">(claf.model.reading_comprehension.mixin.ReadingComprehension method)</a>\n</li>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL.print_examples\">(claf.model.semantic_parsing.mixin.WikiSQL method)</a>\n</li>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.BertForSeqCls.print_examples\">(claf.model.sequence_classification.BertForSeqCls method)</a>\n</li>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification.print_examples\">(claf.model.sequence_classification.mixin.SequenceClassification method)</a>\n</li>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.RobertaForSeqCls.print_examples\">(claf.model.sequence_classification.RobertaForSeqCls method)</a>\n</li>\n        <li><a href=\"claf.model.token_classification.html#claf.model.token_classification.BertForTokCls.print_examples\">(claf.model.token_classification.BertForTokCls method)</a>\n</li>\n        <li><a href=\"claf.model.token_classification.html#claf.model.token_classification.mixin.TokenClassification.print_examples\">(claf.model.token_classification.mixin.TokenClassification method)</a>\n</li>\n      </ul></li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"Q\">Q</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.QANet\">QANet (class in claf.model.reading_comprehension)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.qanet.QANet\">(class in claf.model.reading_comprehension.qanet)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.QNLIBertReader\">QNLIBertReader (class in claf.data.reader)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.QQPBertReader\">QQPBertReader (class in claf.data.reader)</a>\n</li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset.question_maxlen\">question_maxlen() (claf.data.dataset.squad.SQuADDataset property)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADDataset.question_maxlen\">(claf.data.dataset.SQuADDataset property)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset.question_maxlen\">(claf.data.dataset.wikisql.WikiSQLDataset property)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.WikiSQLDataset.question_maxlen\">(claf.data.dataset.WikiSQLDataset property)</a>\n</li>\n      </ul></li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"R\">R</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.html#claf.tokens.text_handler.TextHandler.raw_to_tensor_fn\">raw_to_tensor_fn() (claf.tokens.text_handler.TextHandler method)</a>\n</li>\n      <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.RCTokenEmbedder\">RCTokenEmbedder (class in claf.tokens.token_embedder)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder\">(class in claf.tokens.token_embedder.reading_comprehension_embedder)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.html#claf.data.data_handler.DataHandler.read\">read() (claf.data.data_handler.DataHandler method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.base.DataReader.read\">(claf.data.reader.base.DataReader method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.html#claf.data.data_handler.DataHandler.read_embedding\">read_embedding() (claf.data.data_handler.DataHandler method)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.base.DataReader.read_one_example\">read_one_example() (claf.data.reader.base.DataReader method)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader.read_one_example\">(claf.data.reader.bert.seq_cls.SeqClsBertReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.bert.html#claf.data.reader.bert.squad.SQuADBertReader.read_one_example\">(claf.data.reader.bert.squad.SQuADBertReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.bert.html#claf.data.reader.bert.tok_cls.TokClsBertReader.read_one_example\">(claf.data.reader.bert.tok_cls.TokClsBertReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.MultiTaskBertReader.read_one_example\">(claf.data.reader.MultiTaskBertReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.RegressionBertReader.read_one_example\">(claf.data.reader.RegressionBertReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.seq_cls.SeqClsReader.read_one_example\">(claf.data.reader.seq_cls.SeqClsReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.SeqClsBertReader.read_one_example\">(claf.data.reader.SeqClsBertReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.SeqClsReader.read_one_example\">(claf.data.reader.SeqClsReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.squad.SQuADReader.read_one_example\">(claf.data.reader.squad.SQuADReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.SQuADBertReader.read_one_example\">(claf.data.reader.SQuADBertReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.SQuADReader.read_one_example\">(claf.data.reader.SQuADReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.TokClsBertReader.read_one_example\">(claf.data.reader.TokClsBertReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.wikisql.WikiSQLReader.read_one_example\">(claf.data.reader.wikisql.WikiSQLReader method)</a>\n</li>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.WikiSQLReader.read_one_example\">(claf.data.reader.WikiSQLReader method)</a>\n</li>\n      </ul></li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.ReadingComprehension\">ReadingComprehension (class in claf.model.reading_comprehension.mixin)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.classification.recall\">recall() (in module claf.metric.classification)</a>\n</li>\n      <li><a href=\"claf.decorator.html#claf.decorator.register\">register (class in claf.decorator)</a>\n\n      <ul>\n        <li><a href=\"claf.decorator.html#claf.decorator.register.register\">(class in claf.decorator.register)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.config.html#claf.config.registry.Registry\">Registry (class in claf.config.registry)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.RegressionBertDataset\">RegressionBertDataset (class in claf.data.dataset)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.RegressionBertReader\">RegressionBertReader (class in claf.data.reader)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.bert_embedding.BertEmbedding.remove_cls_sep_token\">remove_cls_sep_token() (claf.tokens.embedding.bert_embedding.BertEmbedding method)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.BertEmbedding.remove_cls_sep_token\">(claf.tokens.embedding.BertEmbedding method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.config.html#claf.config.utils.remove_none\">remove_none() (in module claf.config.utils)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.elmo.remove_sentence_boundaries\">remove_sentence_boundaries() (in module claf.tokens.elmo)</a>\n</li>\n      <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection.reset_parameters\">reset_parameters() (claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection method)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.LstmCellWithProjection.reset_parameters\">(claf.modules.encoder.LstmCellWithProjection method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.modules.layer.html#claf.modules.layer.ResidualConnection\">ResidualConnection (class in claf.modules.layer)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.residual.ResidualConnection\">(class in claf.modules.layer.residual)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.RoBertaForQA\">RoBertaForQA (class in claf.model.reading_comprehension)</a>\n</li>\n      <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.RobertaForSeqCls\">RobertaForSeqCls (class in claf.model.sequence_classification)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.data_handler.CachePath.ROOT\">ROOT (claf.data.data_handler.CachePath attribute)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.RTEBertReader\">RTEBertReader (class in claf.data.reader)</a>\n</li>\n      <li><a href=\"claf.metric.html#claf.metric.squad_v2_official.run_precision_recall_analysis\">run_precision_recall_analysis() (in module claf.metric.squad_v2_official)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"S\">S</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.data.html#claf.data.utils.sanity_check_iob\">sanity_check_iob() (in module claf.data.utils)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.trainer.Trainer.save\">save() (claf.learn.trainer.Trainer method)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.components.retrieval.html#claf.machine.components.retrieval.tfidf.TFIDF.save\">(claf.machine.components.retrieval.tfidf.TFIDF method)</a>\n</li>\n        <li><a href=\"claf.machine.components.html#claf.machine.components.TFIDF.save\">(claf.machine.components.TFIDF method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.save_checkpoint\">save_checkpoint() (in module claf.learn.utils)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.tensorboard.TensorBoard.scalar_summaries\">scalar_summaries() (claf.learn.tensorboard.TensorBoard method)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.tensorboard.TensorBoard.scalar_summary\">scalar_summary() (claf.learn.tensorboard.TensorBoard method)</a>\n</li>\n      <li><a href=\"claf.modules.layer.html#claf.modules.layer.ScalarMix\">ScalarMix (class in claf.modules.layer)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.layer.html#claf.modules.layer.scalar_mix.ScalarMix\">(class in claf.modules.layer.scalar_mix)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.machine.html#claf.machine.open_qa.OpenQA.search_documents\">search_documents() (claf.machine.open_qa.OpenQA method)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.html#claf.machine.OpenQA.search_documents\">(claf.machine.OpenQA method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa.SelfAttention\">SelfAttention (class in claf.model.reading_comprehension.docqa)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.docqa_no_answer.SelfAttention\">(class in claf.model.reading_comprehension.docqa_no_answer)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.SelPredictor\">SelPredictor (class in claf.model.semantic_parsing.sqlnet)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.send_message_to_slack\">send_message_to_slack() (in module claf.learn.utils)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.SentTokenizer\">SentTokenizer (class in claf.tokens.tokenizer)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.sent.SentTokenizer\">(class in claf.tokens.tokenizer.sent)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.modules.attention.html#claf.modules.attention.SeqAttnMatch\">SeqAttnMatch (class in claf.modules.attention)</a>\n\n      <ul>\n        <li><a href=\"claf.modules.attention.html#claf.modules.attention.seq_attention.SeqAttnMatch\">(class in claf.modules.attention.seq_attention)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset\">SeqClsBertDataset (class in claf.data.dataset)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.SeqClsBertReader\">SeqClsBertReader (class in claf.data.reader)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.bert.html#claf.data.reader.bert.seq_cls.SeqClsBertReader\">(class in claf.data.reader.bert.seq_cls)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsDataset\">SeqClsDataset (class in claf.data.dataset)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset\">(class in claf.data.dataset.seq_cls)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.SeqClsReader\">SeqClsReader (class in claf.data.reader)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.seq_cls.SeqClsReader\">(class in claf.data.reader.seq_cls)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.RegressionBertDataset.sequence_maxlen\">sequence_maxlen() (claf.data.dataset.RegressionBertDataset property)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.seq_cls.SeqClsDataset.sequence_maxlen\">(claf.data.dataset.seq_cls.SeqClsDataset property)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsBertDataset.sequence_maxlen\">(claf.data.dataset.SeqClsBertDataset property)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.SeqClsDataset.sequence_maxlen\">(claf.data.dataset.SeqClsDataset property)</a>\n</li>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.TokClsBertDataset.sequence_maxlen\">(claf.data.dataset.TokClsBertDataset property)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification\">SequenceClassification (class in claf.model.sequence_classification.mixin)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.args.set_batch_size\">set_batch_size() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.experiment.Experiment.set_eval_inference_latency_mode\">set_eval_inference_latency_mode() (claf.learn.experiment.Experiment method)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.experiment.Experiment.set_eval_mode\">set_eval_mode() (claf.learn.experiment.Experiment method)</a>\n</li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.config.html#claf.config.utils.set_global_seed\">set_global_seed() (in module claf.config.utils)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.args.set_gpu_env\">set_gpu_env() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.html#claf.utils.set_logging_config\">set_logging_config() (in module claf.utils)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.trainer.Trainer.set_model_base_properties\">set_model_base_properties() (claf.learn.trainer.Trainer method)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.experiment.Experiment.set_predict_mode\">set_predict_mode() (claf.learn.experiment.Experiment method)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.experiment.Experiment.set_train_mode\">set_train_mode() (claf.learn.experiment.Experiment method)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.experiment.Experiment.set_trainer\">set_trainer() (claf.learn.experiment.Experiment method)</a>\n</li>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.base.TokenIndexer.set_vocab\">set_vocab() (claf.tokens.indexer.base.TokenIndexer method)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.set_vocab\">(claf.tokens.token_maker.TokenMaker method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.optimizer.OptimizerFactory.set_warmup_steps\">set_warmup_steps() (claf.config.factory.optimizer.OptimizerFactory method)</a>\n\n      <ul>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.OptimizerFactory.set_warmup_steps\">(claf.config.factory.OptimizerFactory method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.config.html#claf.config.pattern.Singleton\">Singleton (class in claf.config.pattern)</a>\n</li>\n      <li><a href=\"claf.machine.html#claf.machine.NLU.slot_filling\">slot_filling() (claf.machine.NLU method)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.html#claf.machine.nlu.NLU.slot_filling\">(claf.machine.nlu.NLU method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.modules.encoder.html#claf.modules.encoder.lstm_cell_with_projection.sort_batch_by_length\">sort_batch_by_length() (in module claf.modules.encoder.lstm_cell_with_projection)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.SparseFeature\">SparseFeature (class in claf.tokens.embedding)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseFeature\">(class in claf.tokens.embedding.sparse_feature)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.sparse_feature.SparseToEmbedding\">SparseToEmbedding (class in claf.tokens.embedding.sparse_feature)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.SQLNet\">SQLNet (class in claf.model.semantic_parsing)</a>\n\n      <ul>\n        <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.sqlnet.SQLNet\">(class in claf.model.semantic_parsing.sqlnet)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADBertDataset\">SQuADBertDataset (class in claf.data.dataset)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.SQuADBertReader\">SQuADBertReader (class in claf.data.reader)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.bert.html#claf.data.reader.bert.squad.SQuADBertReader\">(class in claf.data.reader.bert.squad)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.SQuADDataset\">SQuADDataset (class in claf.data.dataset)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.squad.SQuADDataset\">(class in claf.data.dataset.squad)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.SQuADReader\">SQuADReader (class in claf.data.reader)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.squad.SQuADReader\">(class in claf.data.reader.squad)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv1\">SQuADv1 (class in claf.model.reading_comprehension.mixin)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv1ForBert\">SQuADv1ForBert (class in claf.model.reading_comprehension.mixin)</a>\n</li>\n      <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.SQuADv2\">SQuADv2 (class in claf.model.reading_comprehension.mixin)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.SSTBertReader\">SSTBertReader (class in claf.data.reader)</a>\n</li>\n      <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.StructuredSelfAttention\">StructuredSelfAttention (class in claf.model.sequence_classification)</a>\n\n      <ul>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention\">(class in claf.model.sequence_classification.structured_self_attention)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.STSBBertReader\">STSBBertReader (class in claf.data.reader)</a>, <a href=\"claf.data.reader.html#claf.data.reader.STSBBertReader\">[1]</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.SubwordTokenizer\">SubwordTokenizer (class in claf.tokens.tokenizer)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.subword.SubwordTokenizer\">(class in claf.tokens.tokenizer.subword)</a>\n</li>\n      </ul></li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"T\">T</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.learn.html#claf.learn.tensorboard.TensorBoard\">TensorBoard (class in claf.learn.tensorboard)</a>\n</li>\n      <li><a href=\"claf.machine.components.retrieval.html#claf.machine.components.retrieval.tfidf.TFIDF.text_to_tfidf\">text_to_tfidf() (claf.machine.components.retrieval.tfidf.TFIDF method)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.components.html#claf.machine.components.TFIDF.text_to_tfidf\">(claf.machine.components.TFIDF method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.text_handler.TextHandler\">TextHandler (class in claf.tokens.text_handler)</a>\n</li>\n      <li><a href=\"claf.machine.components.html#claf.machine.components.TFIDF\">TFIDF (class in claf.machine.components)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.components.retrieval.html#claf.machine.components.retrieval.tfidf.TFIDF\">(class in claf.machine.components.retrieval.tfidf)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.machine.components.retrieval.html#claf.machine.components.retrieval.tfidf.TFIDF.TFIDF_FNAME\">TFIDF_FNAME (claf.machine.components.retrieval.tfidf.TFIDF attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.components.html#claf.machine.components.TFIDF.TFIDF_FNAME\">(claf.machine.components.TFIDF attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab.to_text\">to_text() (claf.tokens.vocabulary.Vocab method)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.TokClsBertDataset\">TokClsBertDataset (class in claf.data.dataset)</a>\n</li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.TokClsBertReader\">TokClsBertReader (class in claf.data.reader)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.bert.html#claf.data.reader.bert.tok_cls.TokClsBertReader\">(class in claf.data.reader.bert.tok_cls)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.bert.html#claf.data.reader.bert.squad.Token\">Token (class in claf.data.reader.bert.squad)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.args.token\">token() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.data_handler.CachePath.TOKEN_COUNTER\">TOKEN_COUNTER (claf.data.data_handler.CachePath attribute)</a>\n</li>\n      <li><a href=\"claf.model.token_classification.html#claf.model.token_classification.mixin.TokenClassification\">TokenClassification (class in claf.model.token_classification.mixin)</a>\n</li>\n      <li><a href=\"claf.tokens.token_embedder.html#claf.tokens.token_embedder.base.TokenEmbedder\">TokenEmbedder (class in claf.tokens.token_embedder.base)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.base.TokenEmbedding\">TokenEmbedding (class in claf.tokens.embedding.base)</a>\n</li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.base.TokenIndexer\">TokenIndexer (class in claf.tokens.indexer.base)</a>\n</li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.base.Tokenizer.tokenize\">tokenize() (claf.tokens.tokenizer.base.Tokenizer method)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.pass_text.PassText.tokenize\">(claf.tokens.tokenizer.pass_text.PassText method)</a>\n</li>\n        <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.PassText.tokenize\">(claf.tokens.tokenizer.PassText method)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.base.Tokenizer\">Tokenizer (class in claf.tokens.tokenizer.base)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.tokenizer\">tokenizer() (claf.tokens.token_maker.TokenMaker property)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker\">TokenMaker (class in claf.tokens.token_maker)</a>\n</li>\n      <li><a href=\"claf.config.factory.html#claf.config.factory.TokenMakersFactory\">TokenMakersFactory (class in claf.config.factory)</a>\n\n      <ul>\n        <li><a href=\"claf.config.factory.html#claf.config.factory.tokens.TokenMakersFactory\">(class in claf.config.factory.tokens)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.learn.html#claf.learn.mode.Mode.TRAIN\">TRAIN (claf.learn.mode.Mode attribute)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.trainer.Trainer.train\">train() (claf.learn.trainer.Trainer method)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.trainer.Trainer.train_and_evaluate\">train_and_evaluate() (claf.learn.trainer.Trainer method)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.args.train_config\">train_config() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.train_counter\">train_counter() (claf.model.base.ModelBase property)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.utils.TrainCounter\">TrainCounter (class in claf.learn.utils)</a>\n</li>\n      <li><a href=\"claf.learn.html#claf.learn.trainer.Trainer\">Trainer (class in claf.learn.trainer)</a>\n</li>\n      <li><a href=\"claf.config.html#claf.config.args.trainer\">trainer() (in module claf.config.args)</a>\n</li>\n      <li><a href=\"claf.data.html#claf.data.utils.transpose\">transpose() (in module claf.data.utils)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"V\">V</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.data.html#claf.data.data_handler.CachePath.VOCAB\">VOCAB (claf.data.data_handler.CachePath attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.Vocab\">Vocab (class in claf.tokens.vocabulary)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.vocab\">vocab() (claf.tokens.token_maker.TokenMaker property)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.vocab_config\">vocab_config() (claf.tokens.token_maker.TokenMaker property)</a>\n</li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.machine.components.retrieval.html#claf.machine.components.retrieval.tfidf.TFIDF.VOCAB_FNAME\">VOCAB_FNAME (claf.machine.components.retrieval.tfidf.TFIDF attribute)</a>\n\n      <ul>\n        <li><a href=\"claf.machine.components.html#claf.machine.components.TFIDF.VOCAB_FNAME\">(claf.machine.components.TFIDF attribute)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.vocabulary.VocabDict\">VocabDict (class in claf.tokens.vocabulary)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.vocabs\">vocabs() (claf.model.base.ModelBase property)</a>\n</li>\n  </ul></td>\n</tr></table>\n\n<h2 id=\"W\">W</h2>\n<table style=\"width: 100%\" class=\"indextable genindextable\"><tr>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.modules.html#claf.modules.initializer.weight\">weight() (in module claf.modules.initializer)</a>\n</li>\n      <li><a href=\"claf.modules.html#claf.modules.functional.weighted_sum\">weighted_sum() (in module claf.modules.functional)</a>\n</li>\n      <li><a href=\"claf.model.semantic_parsing.html#claf.model.semantic_parsing.mixin.WikiSQL\">WikiSQL (class in claf.model.semantic_parsing.mixin)</a>\n</li>\n      <li><a href=\"claf.data.dataset.html#claf.data.dataset.WikiSQLDataset\">WikiSQLDataset (class in claf.data.dataset)</a>\n\n      <ul>\n        <li><a href=\"claf.data.dataset.html#claf.data.dataset.wikisql.WikiSQLDataset\">(class in claf.data.dataset.wikisql)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.WikiSQLReader\">WikiSQLReader (class in claf.data.reader)</a>\n\n      <ul>\n        <li><a href=\"claf.data.reader.html#claf.data.reader.wikisql.WikiSQLReader\">(class in claf.data.reader.wikisql)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.data.reader.html#claf.data.reader.WNLIBertReader\">WNLIBertReader (class in claf.data.reader)</a>\n</li>\n      <li><a href=\"claf.tokens.html#claf.tokens.token_maker.TokenMaker.WORD_TYPE\">WORD_TYPE (claf.tokens.token_maker.TokenMaker attribute)</a>\n</li>\n      <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.WordEmbedding\">WordEmbedding (class in claf.tokens.embedding)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.embedding.html#claf.tokens.embedding.word_embedding.WordEmbedding\">(class in claf.tokens.embedding.word_embedding)</a>\n</li>\n      </ul></li>\n  </ul></td>\n  <td style=\"width: 33%; vertical-align: top;\"><ul>\n      <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.WordIndexer\">WordIndexer (class in claf.tokens.indexer)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.indexer.html#claf.tokens.indexer.word_indexer.WordIndexer\">(class in claf.tokens.indexer.word_indexer)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.WordTokenizer\">WordTokenizer (class in claf.tokens.tokenizer)</a>\n\n      <ul>\n        <li><a href=\"claf.tokens.tokenizer.html#claf.tokens.tokenizer.word.WordTokenizer\">(class in claf.tokens.tokenizer.word)</a>\n</li>\n      </ul></li>\n      <li><a href=\"claf.tokens.html#claf.tokens.WordTokenMaker\">WordTokenMaker (class in claf.tokens)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.cls_utils.write_confusion_matrix_to_csv\">write_confusion_matrix_to_csv() (in module claf.model.cls_utils)</a>\n</li>\n      <li><a href=\"claf.model.html#claf.model.base.ModelBase.write_predictions\">write_predictions() (claf.model.base.ModelBase method)</a>\n\n      <ul>\n        <li><a href=\"claf.model.reading_comprehension.html#claf.model.reading_comprehension.mixin.ReadingComprehension.write_predictions\">(claf.model.reading_comprehension.mixin.ReadingComprehension method)</a>\n</li>\n        <li><a href=\"claf.model.sequence_classification.html#claf.model.sequence_classification.mixin.SequenceClassification.write_predictions\">(claf.model.sequence_classification.mixin.SequenceClassification method)</a>\n</li>\n        <li><a href=\"claf.model.token_classification.html#claf.model.token_classification.mixin.TokenClassification.write_predictions\">(claf.model.token_classification.mixin.TokenClassification method)</a>\n</li>\n      </ul></li>\n  </ul></td>\n</tr></table>\n\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/index.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>CLaF documentation &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"Dataset and Model\" href=\"contents/dataset_and_model.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"#\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"#\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"#\">Docs</a> &raquo;</li>\n        \n      <li>CLaF documentation</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            \n              <!-- User defined GitHub URL -->\n              <a href=\"https://github.com/naver/claf\" class=\"fa fa-github\"> Edit on GitHub</a>\n            \n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf-documentation\">\n<h1>CLaF documentation<a class=\"headerlink\" href=\"#claf-documentation\" title=\"Permalink to this headline\">¶</a></h1>\n<p>CLaF: Clova Language Framework</p>\n<div class=\"toctree-wrapper compound\">\n<p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n</div>\n<div class=\"toctree-wrapper compound\">\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n</div>\n<div class=\"toctree-wrapper compound\">\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n</div>\n<div class=\"toctree-wrapper compound\">\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n</div>\n<div class=\"toctree-wrapper compound\">\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"indices-and-tables\">\n<h1>Indices and tables<a class=\"headerlink\" href=\"#indices-and-tables\" title=\"Permalink to this headline\">¶</a></h1>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"genindex.html\"><span class=\"std std-ref\">Index</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"py-modindex.html\"><span class=\"std std-ref\">Module Index</span></a></p></li>\n</ul>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"contents/dataset_and_model.html\" class=\"btn btn-neutral float-right\" title=\"Dataset and Model\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/modules.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>claf &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>claf</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/modules.rst.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"claf\">\n<h1>claf<a class=\"headerlink\" href=\"#claf\" title=\"Permalink to this headline\">¶</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.html\">claf package</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.html#subpackages\">Subpackages</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.config.html\">claf.config package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.config.html#subpackages\">Subpackages</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.config.html#module-claf.config.args\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.config.html#module-claf.config\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.data.html\">claf.data package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.html#subpackages\">Subpackages</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.html#module-claf.data.collate\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.data.html#module-claf.data\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.decorator.html\">claf.decorator package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.decorator.html#module-claf.decorator.arguments\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.decorator.html#module-claf.decorator\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.learn.html\">claf.learn package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.learn.html#module-claf.learn.experiment\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.learn.html#module-claf.learn\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.machine.html\">claf.machine package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.machine.html#subpackages\">Subpackages</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.machine.html#module-claf.machine.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.machine.html#module-claf.machine\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.metric.html\">claf.metric package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.metric.html#module-claf.metric.classification\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.metric.html#module-claf.metric\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.model.html\">claf.model package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.model.html#subpackages\">Subpackages</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model.base\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.model.html#module-claf.model\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.modules.html\">claf.modules package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.modules.html#subpackages\">Subpackages</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules.activation\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.modules.html#module-claf.modules\">Module contents</a></li>\n</ul>\n</li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"claf.tokens.html\">claf.tokens package</a><ul>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.tokens.html#subpackages\">Subpackages</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens.cove\">Submodules</a></li>\n<li class=\"toctree-l4\"><a class=\"reference internal\" href=\"claf.tokens.html#module-claf.tokens\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.html#module-claf.utils\">Submodules</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"claf.html#module-claf\">Module contents</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/py-modindex.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>Python Module Index &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n \n\n\n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>Python Module Index</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n\n   <h1>Python Module Index</h1>\n\n   <div class=\"modindex-jumpbox\">\n   <a href=\"#cap-c\"><strong>c</strong></a>\n   </div>\n\n   <table class=\"indextable modindextable\">\n     <tr class=\"pcap\"><td></td><td>&#160;</td><td></td></tr>\n     <tr class=\"cap\" id=\"cap-c\"><td></td><td>\n       <strong>c</strong></td><td></td></tr>\n     <tr>\n       <td><img src=\"_static/minus.png\" class=\"toggler\"\n              id=\"toggle-1\" style=\"display: none\" alt=\"-\" /></td>\n       <td>\n       <a href=\"claf.html#module-claf\"><code class=\"xref\">claf</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.html#module-claf.config\"><code class=\"xref\">claf.config</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.html#module-claf.config.args\"><code class=\"xref\">claf.config.args</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.factory.html#module-claf.config.factory\"><code class=\"xref\">claf.config.factory</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.factory.html#module-claf.config.factory.base\"><code class=\"xref\">claf.config.factory.base</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.factory.html#module-claf.config.factory.data_loader\"><code class=\"xref\">claf.config.factory.data_loader</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.factory.html#module-claf.config.factory.data_reader\"><code class=\"xref\">claf.config.factory.data_reader</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.factory.html#module-claf.config.factory.model\"><code class=\"xref\">claf.config.factory.model</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.factory.html#module-claf.config.factory.optimizer\"><code class=\"xref\">claf.config.factory.optimizer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.factory.html#module-claf.config.factory.tokens\"><code class=\"xref\">claf.config.factory.tokens</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.html#module-claf.config.namespace\"><code class=\"xref\">claf.config.namespace</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.html#module-claf.config.pattern\"><code class=\"xref\">claf.config.pattern</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.html#module-claf.config.registry\"><code class=\"xref\">claf.config.registry</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.config.html#module-claf.config.utils\"><code class=\"xref\">claf.config.utils</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.html#module-claf.data\"><code class=\"xref\">claf.data</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.html#module-claf.data.collate\"><code class=\"xref\">claf.data.collate</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.html#module-claf.data.data_handler\"><code class=\"xref\">claf.data.data_handler</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.dataset.html#module-claf.data.dataset\"><code class=\"xref\">claf.data.dataset</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.dataset.html#module-claf.data.dataset.base\"><code class=\"xref\">claf.data.dataset.base</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.dataset.html#module-claf.data.dataset.seq_cls\"><code class=\"xref\">claf.data.dataset.seq_cls</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.dataset.html#module-claf.data.dataset.squad\"><code class=\"xref\">claf.data.dataset.squad</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.dataset.html#module-claf.data.dataset.wikisql\"><code class=\"xref\">claf.data.dataset.wikisql</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.reader.html#module-claf.data.reader\"><code class=\"xref\">claf.data.reader</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.reader.html#module-claf.data.reader.base\"><code class=\"xref\">claf.data.reader.base</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.reader.bert.html#module-claf.data.reader.bert\"><code class=\"xref\">claf.data.reader.bert</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.reader.bert.html#module-claf.data.reader.bert.conll2003\"><code class=\"xref\">claf.data.reader.bert.conll2003</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.reader.bert.html#module-claf.data.reader.bert.seq_cls\"><code class=\"xref\">claf.data.reader.bert.seq_cls</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.reader.bert.html#module-claf.data.reader.bert.squad\"><code class=\"xref\">claf.data.reader.bert.squad</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.reader.bert.html#module-claf.data.reader.bert.tok_cls\"><code class=\"xref\">claf.data.reader.bert.tok_cls</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.reader.html#module-claf.data.reader.cola\"><code class=\"xref\">claf.data.reader.cola</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.reader.html#module-claf.data.reader.seq_cls\"><code class=\"xref\">claf.data.reader.seq_cls</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.reader.html#module-claf.data.reader.squad\"><code class=\"xref\">claf.data.reader.squad</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.reader.html#module-claf.data.reader.wikisql\"><code class=\"xref\">claf.data.reader.wikisql</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.data.html#module-claf.data.utils\"><code class=\"xref\">claf.data.utils</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.decorator.html#module-claf.decorator\"><code class=\"xref\">claf.decorator</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.decorator.html#module-claf.decorator.arguments\"><code class=\"xref\">claf.decorator.arguments</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.decorator.html#module-claf.decorator.register\"><code class=\"xref\">claf.decorator.register</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.learn.html#module-claf.learn\"><code class=\"xref\">claf.learn</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.learn.html#module-claf.learn.experiment\"><code class=\"xref\">claf.learn.experiment</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.learn.html#module-claf.learn.mode\"><code class=\"xref\">claf.learn.mode</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.learn.html#module-claf.learn.tensorboard\"><code class=\"xref\">claf.learn.tensorboard</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.learn.html#module-claf.learn.trainer\"><code class=\"xref\">claf.learn.trainer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.learn.html#module-claf.learn.utils\"><code class=\"xref\">claf.learn.utils</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.machine.html#module-claf.machine\"><code class=\"xref\">claf.machine</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.machine.html#module-claf.machine.base\"><code class=\"xref\">claf.machine.base</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.machine.components.html#module-claf.machine.components\"><code class=\"xref\">claf.machine.components</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.machine.components.retrieval.html#module-claf.machine.components.retrieval\"><code class=\"xref\">claf.machine.components.retrieval</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.machine.components.retrieval.html#module-claf.machine.components.retrieval.tfidf\"><code class=\"xref\">claf.machine.components.retrieval.tfidf</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.machine.html#module-claf.machine.module\"><code class=\"xref\">claf.machine.module</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.machine.html#module-claf.machine.nlu\"><code class=\"xref\">claf.machine.nlu</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.machine.html#module-claf.machine.open_qa\"><code class=\"xref\">claf.machine.open_qa</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.metric.html#module-claf.metric\"><code class=\"xref\">claf.metric</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.metric.html#module-claf.metric.classification\"><code class=\"xref\">claf.metric.classification</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.metric.html#module-claf.metric.squad_v1_official\"><code class=\"xref\">claf.metric.squad_v1_official</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.metric.html#module-claf.metric.squad_v2_official\"><code class=\"xref\">claf.metric.squad_v2_official</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.metric.html#module-claf.metric.wikisql_official\"><code class=\"xref\">claf.metric.wikisql_official</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.html#module-claf.model\"><code class=\"xref\">claf.model</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.html#module-claf.model.base\"><code class=\"xref\">claf.model.base</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.html#module-claf.model.cls_utils\"><code class=\"xref\">claf.model.cls_utils</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension\"><code class=\"xref\">claf.model.reading_comprehension</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.bidaf\"><code class=\"xref\">claf.model.reading_comprehension.bidaf</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.bidaf_no_answer\"><code class=\"xref\">claf.model.reading_comprehension.bidaf_no_answer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.docqa\"><code class=\"xref\">claf.model.reading_comprehension.docqa</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.docqa_no_answer\"><code class=\"xref\">claf.model.reading_comprehension.docqa_no_answer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.drqa\"><code class=\"xref\">claf.model.reading_comprehension.drqa</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.mixin\"><code class=\"xref\">claf.model.reading_comprehension.mixin</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.reading_comprehension.html#module-claf.model.reading_comprehension.qanet\"><code class=\"xref\">claf.model.reading_comprehension.qanet</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing\"><code class=\"xref\">claf.model.semantic_parsing</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing.mixin\"><code class=\"xref\">claf.model.semantic_parsing.mixin</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing.sqlnet\"><code class=\"xref\">claf.model.semantic_parsing.sqlnet</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.semantic_parsing.html#module-claf.model.semantic_parsing.utils\"><code class=\"xref\">claf.model.semantic_parsing.utils</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.sequence_classification.html#module-claf.model.sequence_classification\"><code class=\"xref\">claf.model.sequence_classification</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.sequence_classification.html#module-claf.model.sequence_classification.mixin\"><code class=\"xref\">claf.model.sequence_classification.mixin</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.sequence_classification.html#module-claf.model.sequence_classification.structured_self_attention\"><code class=\"xref\">claf.model.sequence_classification.structured_self_attention</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.token_classification.html#module-claf.model.token_classification\"><code class=\"xref\">claf.model.token_classification</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.model.token_classification.html#module-claf.model.token_classification.mixin\"><code class=\"xref\">claf.model.token_classification.mixin</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.html#module-claf.modules\"><code class=\"xref\">claf.modules</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.html#module-claf.modules.activation\"><code class=\"xref\">claf.modules.activation</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.attention.html#module-claf.modules.attention\"><code class=\"xref\">claf.modules.attention</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.attention.html#module-claf.modules.attention.bi_attention\"><code class=\"xref\">claf.modules.attention.bi_attention</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.attention.html#module-claf.modules.attention.co_attention\"><code class=\"xref\">claf.modules.attention.co_attention</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.attention.html#module-claf.modules.attention.docqa_attention\"><code class=\"xref\">claf.modules.attention.docqa_attention</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.attention.html#module-claf.modules.attention.multi_head_attention\"><code class=\"xref\">claf.modules.attention.multi_head_attention</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.attention.html#module-claf.modules.attention.seq_attention\"><code class=\"xref\">claf.modules.attention.seq_attention</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.conv.html#module-claf.modules.conv\"><code class=\"xref\">claf.modules.conv</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.conv.html#module-claf.modules.conv.depthwise_separable_conv\"><code class=\"xref\">claf.modules.conv.depthwise_separable_conv</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.conv.html#module-claf.modules.conv.pointwise_conv\"><code class=\"xref\">claf.modules.conv.pointwise_conv</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.encoder.html#module-claf.modules.encoder\"><code class=\"xref\">claf.modules.encoder</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.encoder.html#module-claf.modules.encoder.lstm_cell_with_projection\"><code class=\"xref\">claf.modules.encoder.lstm_cell_with_projection</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.encoder.html#module-claf.modules.encoder.positional\"><code class=\"xref\">claf.modules.encoder.positional</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.html#module-claf.modules.functional\"><code class=\"xref\">claf.modules.functional</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.html#module-claf.modules.initializer\"><code class=\"xref\">claf.modules.initializer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.layer.html#module-claf.modules.layer\"><code class=\"xref\">claf.modules.layer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.layer.html#module-claf.modules.layer.highway\"><code class=\"xref\">claf.modules.layer.highway</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.layer.html#module-claf.modules.layer.normalization\"><code class=\"xref\">claf.modules.layer.normalization</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.layer.html#module-claf.modules.layer.positionwise\"><code class=\"xref\">claf.modules.layer.positionwise</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.layer.html#module-claf.modules.layer.residual\"><code class=\"xref\">claf.modules.layer.residual</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.modules.layer.html#module-claf.modules.layer.scalar_mix\"><code class=\"xref\">claf.modules.layer.scalar_mix</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.html#module-claf.tokens\"><code class=\"xref\">claf.tokens</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.html#module-claf.tokens.cove\"><code class=\"xref\">claf.tokens.cove</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.html#module-claf.tokens.elmo\"><code class=\"xref\">claf.tokens.elmo</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding\"><code class=\"xref\">claf.tokens.embedding</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.base\"><code class=\"xref\">claf.tokens.embedding.base</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.bert_embedding\"><code class=\"xref\">claf.tokens.embedding.bert_embedding</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.char_embedding\"><code class=\"xref\">claf.tokens.embedding.char_embedding</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.cove_embedding\"><code class=\"xref\">claf.tokens.embedding.cove_embedding</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.elmo_embedding\"><code class=\"xref\">claf.tokens.embedding.elmo_embedding</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.frequent_word_embedding\"><code class=\"xref\">claf.tokens.embedding.frequent_word_embedding</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.sparse_feature\"><code class=\"xref\">claf.tokens.embedding.sparse_feature</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.embedding.html#module-claf.tokens.embedding.word_embedding\"><code class=\"xref\">claf.tokens.embedding.word_embedding</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.html#module-claf.tokens.hangul\"><code class=\"xref\">claf.tokens.hangul</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer\"><code class=\"xref\">claf.tokens.indexer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.base\"><code class=\"xref\">claf.tokens.indexer.base</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.bert_indexer\"><code class=\"xref\">claf.tokens.indexer.bert_indexer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.char_indexer\"><code class=\"xref\">claf.tokens.indexer.char_indexer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.elmo_indexer\"><code class=\"xref\">claf.tokens.indexer.elmo_indexer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.exact_match_indexer\"><code class=\"xref\">claf.tokens.indexer.exact_match_indexer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.linguistic_indexer\"><code class=\"xref\">claf.tokens.indexer.linguistic_indexer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.indexer.html#module-claf.tokens.indexer.word_indexer\"><code class=\"xref\">claf.tokens.indexer.word_indexer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.html#module-claf.tokens.linguistic\"><code class=\"xref\">claf.tokens.linguistic</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.html#module-claf.tokens.text_handler\"><code class=\"xref\">claf.tokens.text_handler</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder\"><code class=\"xref\">claf.tokens.token_embedder</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder.base\"><code class=\"xref\">claf.tokens.token_embedder.base</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder.basic_embedder\"><code class=\"xref\">claf.tokens.token_embedder.basic_embedder</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.token_embedder.html#module-claf.tokens.token_embedder.reading_comprehension_embedder\"><code class=\"xref\">claf.tokens.token_embedder.reading_comprehension_embedder</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.html#module-claf.tokens.token_maker\"><code class=\"xref\">claf.tokens.token_maker</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer\"><code class=\"xref\">claf.tokens.tokenizer</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.base\"><code class=\"xref\">claf.tokens.tokenizer.base</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.char\"><code class=\"xref\">claf.tokens.tokenizer.char</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.pass_text\"><code class=\"xref\">claf.tokens.tokenizer.pass_text</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.sent\"><code class=\"xref\">claf.tokens.tokenizer.sent</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.subword\"><code class=\"xref\">claf.tokens.tokenizer.subword</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.utils\"><code class=\"xref\">claf.tokens.tokenizer.utils</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.tokenizer.html#module-claf.tokens.tokenizer.word\"><code class=\"xref\">claf.tokens.tokenizer.word</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.tokens.html#module-claf.tokens.vocabulary\"><code class=\"xref\">claf.tokens.vocabulary</code></a></td><td>\n       <em></em></td></tr>\n     <tr class=\"cg-1\">\n       <td></td>\n       <td>&#160;&#160;&#160;\n       <a href=\"claf.html#module-claf.utils\"><code class=\"xref\">claf.utils</code></a></td><td>\n       <em></em></td></tr>\n   </table>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/references.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>References &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"prev\" title=\"Reading Comprehension\" href=\"summary/reading_comprehension.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>References</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"_sources/references.md.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"references\">\n<h1>References<a class=\"headerlink\" href=\"#references\" title=\"Permalink to this headline\">¶</a></h1>\n<ul class=\"simple\">\n<li><p><strong>Dataset</strong></p>\n<ul>\n<li><p>Pranav Rajpurkar, Jian Zhang, Konstantin Lopyrev and Percy Liang. 2016, <a class=\"reference external\" href=\"https://arxiv.org/abs/1606.05250\">SQuAD: 100,000+ Questions for Machine Comprehension of Text</a></p></li>\n<li><p>Pranav Rajpurkar, Robin Jia and Percy Liang. 2018, <a class=\"reference external\" href=\"https://arxiv.org/abs/1806.03822\">Know What You Don’t Know: Unanswerable Questions for SQuAD</a></p></li>\n<li><p>Victor Zhong, Caiming Xiong, and Richard Socher. 2017, <a class=\"reference external\" href=\"http://arxiv.org/abs/1709.00103\">Seq2SQL: Generating Structured Queries from Natural Language using Reinforcement Learning</a></p></li>\n</ul>\n</li>\n<li><p><strong>Model</strong></p>\n<ul>\n<li><p>Minjoon Seo, Aniruddha Kembhavi, Ali Farhadi and Hannaneh Hajishirzi. 2016, <a class=\"reference external\" href=\"https://arxiv.org/abs/1611.01603\">Bidirectional Attention Flow for Machine Comprehension</a></p></li>\n<li><p>Danqi Chen, Adam Fisch, Jason Weston and Antoine Bordes. 2017, <a class=\"reference external\" href=\"https://arxiv.org/abs/1704.00051\">Reading Wikipedia to Answer Open-Domain Questions</a></p></li>\n<li><p>Christopher Clark and Matt Gardner. 2017, <a class=\"reference external\" href=\"https://arxiv.org/abs/1710.10723\">Simple and Effective Multi-Paragraph Reading Comprehension</a></p></li>\n<li><p>Adams Wei Yu, David Dohan, Minh-Thang Luong, Rui Zhao, Kai Chen, Mohammad Norouzi and Quoc V. Le. 2018, <a class=\"reference external\" href=\"https://arxiv.org/abs/1804.09541\">QANet: Combining Local Convolution with Global Self-Attention for Reading Comprehension</a></p></li>\n<li><p>Jacob Devlin, Ming-Wei Chang, Kenton Lee and Kristina Toutanova. 2018, <a class=\"reference external\" href=\"https://arxiv.org/abs/1810.04805\">BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding</a></p></li>\n<li><p>Xiaojun Xu, Chang Liu and Dawn Song. 2017, <a class=\"reference external\" href=\"https://arxiv.org/abs/1711.04436\">SQLNet: Generating Structured Queries From Natural Language Without Reinforcement Learning</a></p></li>\n</ul>\n</li>\n<li><p><strong>Token</strong></p>\n<ul>\n<li><p>Yoon Kim,. 2014, <a class=\"reference external\" href=\"https://arxiv.org/abs/1408.5882\">Convolutional Neural Networks for Sentence Classification</a></p></li>\n<li><p>B. McCann, J. Bradbury, C. Xiong, R. Socher, <a class=\"reference external\" href=\"http://papers.nips.cc/paper/7209-learned-in-translation-contextualized-word-vectors.pdf\">Learned in Translation: Contextualized Word Vectors</a></p></li>\n<li><p>P. Bojanowski, E. Grave, A. Joulin, T. Mikolov, <a class=\"reference external\" href=\"https://arxiv.org/abs/1607.04606\">Enriching Word Vectors with Subword Information</a></p></li>\n<li><p>Matthew E. Peters, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee and Luke Zettlemoyer. 2018, <a class=\"reference external\" href=\"https://arxiv.org/abs/1802.05365\">Deep contextualized word representations</a></p></li>\n</ul>\n</li>\n<li><p><strong>Other Framework</strong></p>\n<ul>\n<li><p>Matt Gardner, Joel Grus, Mark Neumann, Oyvind Tafjord, Pradeep Dasigi, Nelson F. Liu, Matthew Peters, Michael Schmitz and Luke S. Zettlemoyer. 2017, <a class=\"reference external\" href=\"https://www.semanticscholar.org/paper/AllenNLP%3A-A-Deep-Semantic-Natural-Language-Platform-Gardner-Grus/a5502187140cdd98d76ae711973dbcdaf1fef46d\">AllenNLP: A Deep Semantic Natural Language Processing Platform</a></p></li>\n<li><p>Guillaume Klein, Yoon Kim, Yuntian Deng, Vincent Nguyen, Jean Senellart and Alexander M. Rush <a class=\"reference external\" href=\"https://arxiv.org/pdf/1805.11462\">OpenNMT: Neural Machine Translation Toolkit</a></p></li>\n</ul>\n</li>\n</ul>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n      \n        <a href=\"summary/reading_comprehension.html\" class=\"btn btn-neutral\" title=\"Reading Comprehension\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/reports/glue.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>GLUE &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"HistoryQA\" href=\"historyqa.html\" />\n    <link rel=\"prev\" title=\"claf.tokens.tokenizer package\" href=\"../claf.tokens.tokenizer.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">GLUE</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#results\">Results</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#dev-set\">Dev Set</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n      <li>GLUE</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"../_sources/reports/glue.md.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"glue\">\n<h1>GLUE<a class=\"headerlink\" href=\"#glue\" title=\"Permalink to this headline\">¶</a></h1>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://gluebenchmark.com/\"><code class=\"docutils literal notranslate\"><span class=\"pre\">GLUE</span></code></a>: The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems.</p></li>\n</ul>\n<hr class=\"docutils\" />\n<div class=\"section\" id=\"results\">\n<h2>Results<a class=\"headerlink\" href=\"#results\" title=\"Permalink to this headline\">¶</a></h2>\n<div class=\"section\" id=\"dev-set\">\n<h3>Dev Set<a class=\"headerlink\" href=\"#dev-set\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p><strong>Base</strong> Size : 12-layer, 768-hidden, 12-heads, 110M parameters</p></li>\n</ul>\n<table border=\"1\" class=\"docutils\">\n<thead>\n<tr>\n<th>Task (Metric)</th>\n<th>Model</th>\n<th>CLaF Result</th>\n<th>Official Result</th>\n<th>BaseConfig</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>CoLA</strong> (<strong>Matthew's Corr</strong>)</td>\n<td>BERT-Base</td>\n<td>59.393</td>\n<td>52.1 (Test set)</td>\n<td>glue/cola_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Base</td>\n<td>54.658</td>\n<td>-</td>\n<td>1. multi_task/bert_base_glue.json <br/> 2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Base</td>\n<td>64.828</td>\n<td>63.6</td>\n<td>glue/cola_roberta.json</td>\n</tr>\n<tr>\n<td><strong>MNLI m/mm</strong> (<strong>Accuracy</strong>)</td>\n<td>BERT-Base</td>\n<td>83.923/84.306</td>\n<td>84.6/83.4 (Test set)</td>\n<td>glue/mnli{m/mm}_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Base</td>\n<td>84.452/84.225</td>\n<td>-</td>\n<td>1. multi_task/bert_base_glue.json <br/> 2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Base</td>\n<td>87.305/87.236</td>\n<td>87.6/-</td>\n<td>glue/mnli{m/mm}_roberta.json</td>\n</tr>\n<tr>\n<td><strong>MRPC</strong> (<strong>Accuracy/F1</strong>)</td>\n<td>BERT-Base</td>\n<td>87.5/91.282</td>\n<td>88.9 (Test set)</td>\n<td>glue/mrpc_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Base</td>\n<td>87.5/91.005</td>\n<td>-</td>\n<td>1. multi_task/bert_base_glue.json <br/> 2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Base</td>\n<td>88.480/91.681</td>\n<td>90.2</td>\n<td>glue/mrpc_roberta.json</td>\n</tr>\n<tr>\n<td><strong>QNLI</strong> (<strong>Accuracy</strong>)</td>\n<td>BERT-Base</td>\n<td>88.521</td>\n<td>90.5 (Test set)</td>\n<td>glue/qnli_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Base</td>\n<td>-</td>\n<td>-</td>\n<td>1. multi_task/bert_base_glue.json <br/> 2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Base</td>\n<td>90.823</td>\n<td>92.8</td>\n<td>glue/qnli_roberta.json</td>\n</tr>\n<tr>\n<td><strong>QQP</strong> (<strong>Accuracy/F1</strong>)</td>\n<td>BERT-Base</td>\n<td>90.378/87.171</td>\n<td>71.2 (Test set)</td>\n<td>glue/qqp_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Base</td>\n<td>91.261/88.219</td>\n<td>-</td>\n<td>1. multi_task/bert_base_glue.json <br/> 2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Base</td>\n<td>91.541/88.768</td>\n<td>91.9</td>\n<td>glue/qqp_roberta.json</td>\n</tr>\n<tr>\n<td><strong>RTE</strong> (<strong>Accuracy</strong>)</td>\n<td>BERT-Base</td>\n<td>69.314</td>\n<td>66.4 (Test set)</td>\n<td>glue/rte_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Base</td>\n<td>79.422</td>\n<td>-</td>\n<td>1. multi_task/bert_base_glue.json <br/> 2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Base</td>\n<td>73.646</td>\n<td>78.7</td>\n<td>glue/rte_roberta.json</td>\n</tr>\n<tr>\n<td><strong>SST-2</strong> (<strong>Accuracy</strong>)</td>\n<td>BERT-Base</td>\n<td>92.546</td>\n<td>93.5 (Test set)</td>\n<td>glue/sst_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Base</td>\n<td>93.005</td>\n<td>-</td>\n<td>1. multi_task/bert_base_glue.json <br/> 2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Base</td>\n<td>94.495</td>\n<td>94.8</td>\n<td>glue/sst_roberta.json</td>\n</tr>\n<tr>\n<td><strong>STS-B</strong> (<strong>Pearson/Spearman</strong>)</td>\n<td>BERT-Base</td>\n<td>88.070/87.881</td>\n<td>85.8 (Test set)</td>\n<td>glue/stsb_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Base</td>\n<td>88.444/88.807</td>\n<td>-</td>\n<td>1. multi_task/bert_base_glue.json <br/> 2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Base</td>\n<td>89.003/89.094</td>\n<td>91.2</td>\n<td>glue/stsb_roberta.json</td>\n</tr>\n<tr>\n<td><strong>WNLI</strong> (<strong>Accuracy</strong>)</td>\n<td>BERT-Base</td>\n<td>56.338</td>\n<td>65.1 (Test set)</td>\n<td>glue/wnli_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Base</td>\n<td>57.746</td>\n<td>-</td>\n<td>1. multi_task/bert_base_glue.json <br/> 2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Base</td>\n<td>60.563</td>\n<td>-</td>\n<td>glue/wnli_roberta.json</td>\n</tr>\n</tbody>\n</table><ul class=\"simple\">\n<li><p><strong>Large</strong> Size : 24-layer, 1024-hidden, 16-heads, 340M parameters</p></li>\n</ul>\n<table border=\"1\" class=\"docutils\">\n<thead>\n<tr>\n<th>Task (Metric)</th>\n<th>Model</th>\n<th>CLaF Result</th>\n<th>Official Result</th>\n<th>BaseConfig</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>CoLA</strong> (<strong>Matthew's Corr</strong>)</td>\n<td>BERT-Large</td>\n<td>61.151</td>\n<td>60.6</td>\n<td>glue/cola_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Large</td>\n<td>-</td>\n<td>63.5</td>\n<td>1. multi_task/bert_large_glue.json <br/>  2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Large</td>\n<td>-</td>\n<td>68.0</td>\n<td>glue/cola_roberta.json</td>\n</tr>\n<tr>\n<td><strong>MNLI m/mm</strong> (<strong>Accuracy</strong>)</td>\n<td>BERT-Large</td>\n<td>-</td>\n<td>86.6/-</td>\n<td>glue/mnli{m/mm}_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Large</td>\n<td>-</td>\n<td>87.1/86.7</td>\n<td>1. multi_task/bert_large_glue.json <br/>  2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Large</td>\n<td>-</td>\n<td>90.2/90.2</td>\n<td>glue/mnli{m/mm}_roberta.json</td>\n</tr>\n<tr>\n<td><strong>MRPC</strong> (<strong>Accuracy/F1</strong>)</td>\n<td>BERT-Large</td>\n<td>87.255/90.845</td>\n<td>88.0</td>\n<td>glue/mrpc_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Large</td>\n<td>-</td>\n<td>91.0/87.5</td>\n<td>1. multi_task/bert_large_glue.json <br/>  2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Large</td>\n<td>90.686/93.214</td>\n<td>90.9</td>\n<td>glue/mrpc_roberta.json</td>\n</tr>\n<tr>\n<td><strong>QNLI</strong> (<strong>Accuracy</strong>)</td>\n<td>BERT-Large</td>\n<td>90.440</td>\n<td>92.3</td>\n<td>glue/qnli_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Large</td>\n<td>-</td>\n<td>87.1/86.7</td>\n<td>1. multi_task/bert_large_glue.json <br/>  2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Large</td>\n<td>-</td>\n<td>94.7</td>\n<td>glue/qnli_roberta.json</td>\n</tr>\n<tr>\n<td><strong>QQP</strong> (<strong>Accuracy/F1</strong>)</td>\n<td>BERT-Large</td>\n<td>91.640/88.745</td>\n<td>91.3</td>\n<td>glue/qqp_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Large</td>\n<td>-</td>\n<td>87.1/86.7</td>\n<td>1. multi_task/bert_large_glue.json <br/>  2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Large</td>\n<td>91.848/89.031</td>\n<td>92.2</td>\n<td>glue/qqp_roberta.json</td>\n</tr>\n<tr>\n<td><strong>RTE</strong> (<strong>Accuracy</strong>)</td>\n<td>BERT-Large</td>\n<td>69.675</td>\n<td>70.4</td>\n<td>glue/rte_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Large</td>\n<td>-</td>\n<td>83.4</td>\n<td>1. multi_task/bert_large_glue.json <br/>  2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Large</td>\n<td>84.838</td>\n<td>86.6</td>\n<td>glue/rte_roberta.json</td>\n</tr>\n<tr>\n<td><strong>SST-2</strong> (<strong>Accuracy</strong>)</td>\n<td>BERT-Large</td>\n<td>93.349</td>\n<td>93.2</td>\n<td>glue/sst_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Large</td>\n<td>-</td>\n<td>94.3</td>\n<td>1. multi_task/bert_large_glue.json <br/>  2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Large</td>\n<td>95.642</td>\n<td>96.4</td>\n<td>glue/sst_roberta.json</td>\n</tr>\n<tr>\n<td><strong>STS-B</strong> (<strong>Pearson/Spearman</strong>)</td>\n<td>BERT-Large</td>\n<td>90.041/89735</td>\n<td>90.0</td>\n<td>glue/stsb_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Large</td>\n<td>-</td>\n<td>90.7/90.6</td>\n<td>1. multi_task/bert_large_glue.json <br/>  2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Large</td>\n<td>91.980/91.764</td>\n<td>92.4</td>\n<td>glue/stsb_roberta.json</td>\n</tr>\n<tr>\n<td><strong>WNLI</strong> (<strong>Accuracy</strong>)</td>\n<td>BERT-Large</td>\n<td>59.155</td>\n<td>-</td>\n<td>glue/wnli_bert.json</td>\n</tr>\n<tr>\n<td></td>\n<td>MT-DNN (BERT) Large</td>\n<td>-</td>\n<td>-</td>\n<td>1. multi_task/bert_large_glue.json <br/>  2. <code>fine-fune</code></td>\n</tr>\n<tr>\n<td></td>\n<td>RoBERTa-Large</td>\n<td>-</td>\n<td>91.3</td>\n<td>-</td>\n</tr>\n</tbody>\n</table></div>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"historyqa.html\" class=\"btn btn-neutral float-right\" title=\"HistoryQA\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"../claf.tokens.tokenizer.html\" class=\"btn btn-neutral\" title=\"claf.tokens.tokenizer package\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/reports/historyqa.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>HistoryQA &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"KorQuAD\" href=\"korquad.html\" />\n    <link rel=\"prev\" title=\"GLUE\" href=\"glue.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"glue.html\">GLUE</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">HistoryQA</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#results\">Results</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n      <li>HistoryQA</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"../_sources/reports/historyqa.md.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"historyqa\">\n<h1>HistoryQA<a class=\"headerlink\" href=\"#historyqa\" title=\"Permalink to this headline\">¶</a></h1>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Span</span> <span class=\"pre\">Detector</span></code></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">HistoryQA</span></code>: Joseon History Question Answering Dataset</p>\n<ul>\n<li><p>Train: 31901 / Dev: 3067</p></li>\n</ul>\n</li>\n</ul>\n<hr class=\"docutils\" />\n<div class=\"section\" id=\"results\">\n<h2>Results<a class=\"headerlink\" href=\"#results\" title=\"Permalink to this headline\">¶</a></h2>\n<ul class=\"simple\">\n<li><p>Dev Set</p></li>\n</ul>\n<table border=\"1\" class=\"docutils\">\n<thead>\n<tr>\n<th>Model</th>\n<th>EM</th>\n<th>F1</th>\n<th>BaseConfig</th>\n<th>Note</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>BiDAF</strong></td>\n<td>81.709</td>\n<td>84.743</td>\n<td>history/bidaf.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>DocQA</strong></td>\n<td>85.099</td>\n<td>87.789</td>\n<td>history/docqa.json</td>\n<td>-</td>\n</tr>\n</tbody>\n</table></div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"korquad.html\" class=\"btn btn-neutral float-right\" title=\"KorQuAD\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"glue.html\" class=\"btn btn-neutral\" title=\"GLUE\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/reports/korquad.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>KorQuAD &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"SQuAD\" href=\"squad.html\" />\n    <link rel=\"prev\" title=\"HistoryQA\" href=\"historyqa.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">KorQuAD</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#results\">Results</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n      <li>KorQuAD</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"../_sources/reports/korquad.md.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"korquad\">\n<h1>KorQuAD<a class=\"headerlink\" href=\"#korquad\" title=\"Permalink to this headline\">¶</a></h1>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Span</span> <span class=\"pre\">Detector</span></code></p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://korquad.github.io/\"><code class=\"docutils literal notranslate\"><span class=\"pre\">KorQuAD</span></code></a>: KorQuAD는 한국어 Machine Reading Comprehension을 위해 만든 데이터셋입니다. 모든 질의에 대한 답변은 해당 Wikipedia 아티클 문단의 일부 하위 영역으로 이루어집니다. Stanford Question Answering Dataset(SQuAD) v1.0과 동일한 방식으로 구성되었습니다.</p>\n<ul>\n<li><p>v1.0</p>\n<ul>\n<li><p>Train: 60359 / Dev: 5774</p></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<hr class=\"docutils\" />\n<div class=\"section\" id=\"results\">\n<h2>Results<a class=\"headerlink\" href=\"#results\" title=\"Permalink to this headline\">¶</a></h2>\n<ul class=\"simple\">\n<li><p>Dev Set</p></li>\n</ul>\n<table border=\"1\" class=\"docutils\">\n<thead>\n<tr>\n<th>Model</th>\n<th>EM</th>\n<th>F1</th>\n<th>BaseConfig</th>\n<th>Note</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>BiDAF</strong></td>\n<td>75.476</td>\n<td>85.915</td>\n<td>korquad/bidaf.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>DocQA</strong></td>\n<td>77.693</td>\n<td>88.115</td>\n<td>korquad/docqa.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>BERT</strong>-Base, Multilingual Uncased</td>\n<td>81.573</td>\n<td>90.679</td>\n<td>korquad/bert_base_multilingual_uncased.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>BERT</strong>-Base, Multilingual Cased</td>\n<td>82.542</td>\n<td>91.692</td>\n<td>korquad/bert_base_multilingual_cased.json</td>\n<td>-</td>\n</tr>\n</tbody>\n</table></div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"squad.html\" class=\"btn btn-neutral float-right\" title=\"SQuAD\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"historyqa.html\" class=\"btn btn-neutral\" title=\"HistoryQA\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/reports/squad.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>SQuAD &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"WikiSQL\" href=\"wikisql.html\" />\n    <link rel=\"prev\" title=\"KorQuAD\" href=\"korquad.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">SQuAD</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#results-v1-1\">Results (v1.1)</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#results-v2-0\">Results (v2.0)</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n      <li>SQuAD</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"../_sources/reports/squad.md.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"squad\">\n<h1>SQuAD<a class=\"headerlink\" href=\"#squad\" title=\"Permalink to this headline\">¶</a></h1>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Span</span> <span class=\"pre\">Detector</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">No</span> <span class=\"pre\">Answer</span></code></p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://rajpurkar.github.io/SQuAD-explorer/\"><code class=\"docutils literal notranslate\"><span class=\"pre\">SQuAD</span></code></a>: Stanford Question Answering Dataset (SQuAD), a new reading comprehension dataset consisting of 100,000+ questions posed by crowdworkers on a set of Wikipedia articles, where the answer to each question is a segment of text from the corresponding reading passage.</p>\n<ul>\n<li><p>v1.1</p>\n<ul>\n<li><p>Train: 87599 / Dev: 10570 / Test: 9533</p></li>\n</ul>\n</li>\n<li><p>v2.0 + no_answer</p>\n<ul>\n<li><p>Train : 130319 / Dev: 11873 / Test: 8862</p></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<hr class=\"docutils\" />\n<div class=\"section\" id=\"results-v1-1\">\n<h2>Results (v1.1)<a class=\"headerlink\" href=\"#results-v1-1\" title=\"Permalink to this headline\">¶</a></h2>\n<ul class=\"simple\">\n<li><p>Dev Set</p></li>\n</ul>\n<table border=\"1\" class=\"docutils\">\n<thead>\n<tr>\n<th>Model</th>\n<th>EM (official)</th>\n<th>F1 (official)</th>\n<th>BaseConfig</th>\n<th>Note</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>BiDAF</strong></td>\n<td>68.108 (67.7)</td>\n<td>77.780 (77.3)</td>\n<td>squad/bidaf.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>BiDAF + ELMo</strong></td>\n<td>74.295</td>\n<td>82.727</td>\n<td>squad/bidaf+elmo.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>DrQA</strong></td>\n<td>68.316 (68.8)</td>\n<td>77.493 (78.0)</td>\n<td>squad/drqa.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>DocQA</strong></td>\n<td>71.760 (71.513)</td>\n<td>80.635 (80.422)</td>\n<td>squad/docqa.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>DocQA + ELMo</strong></td>\n<td>76.244 (77.5)</td>\n<td>84.372 (84.5)</td>\n<td>squad/docqa+elmo.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>QANet</strong></td>\n<td>70.918 (73.6)</td>\n<td>79.800 (82.7)</td>\n<td>squad/qanet.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>BERT</strong>-Base Uncased</td>\n<td>79.508 (80.8)</td>\n<td>87.642 (88.5)</td>\n<td>squad/bert_base_uncased.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>BERT</strong>-Large Uncased</td>\n<td>83.254 (84.1)</td>\n<td>90.440 (90.9)</td>\n<td>squad/bert_large_uncased.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>RoBERTa</strong>-Base</td>\n<td>82.980</td>\n<td>90.459</td>\n<td>roberta_base.json/bert_base_uncased.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>RoBERTa</strong>-Large</td>\n<td>88.061 (88.9)</td>\n<td>94.034 (94.6)</td>\n<td>squad/roberta_large.json</td>\n<td>-</td>\n</tr>\n</tbody>\n</table></div>\n<hr class=\"docutils\" />\n<div class=\"section\" id=\"results-v2-0\">\n<h2>Results (v2.0)<a class=\"headerlink\" href=\"#results-v2-0\" title=\"Permalink to this headline\">¶</a></h2>\n<ul class=\"simple\">\n<li><p>Dev Set</p></li>\n</ul>\n<table border=\"1\" class=\"docutils\">\n<thead>\n<tr>\n<th>Model</th>\n<th>EM (official)</th>\n<th>F1 (official)</th>\n<th>BaseConfig</th>\n<th>Note</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>BiDAF</strong></td>\n<td>62.570</td>\n<td>65.461</td>\n<td>squad/bidaf_no_answer.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>DocQA</strong></td>\n<td>61.728</td>\n<td>64.489</td>\n<td>squad/docqa_no_answer.json</td>\n<td>-</td>\n</tr>\n</tbody>\n</table></div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"wikisql.html\" class=\"btn btn-neutral float-right\" title=\"WikiSQL\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"korquad.html\" class=\"btn btn-neutral\" title=\"KorQuAD\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/reports/wikisql.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>WikiSQL &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"Reading Comprehension\" href=\"../summary/reading_comprehension.html\" />\n    <link rel=\"prev\" title=\"SQuAD\" href=\"squad.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">WikiSQL</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#results\">Results</a></li>\n</ul>\n</li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n      <li>WikiSQL</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"../_sources/reports/wikisql.md.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"wikisql\">\n<h1>WikiSQL<a class=\"headerlink\" href=\"#wikisql\" title=\"Permalink to this headline\">¶</a></h1>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Semantic</span> <span class=\"pre\">Parsing</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">NL2SQL</span></code></p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">WikiSQL</span></code>: A large crowd-sourced dataset for developing natural language interfaces for relational databases.</p></li>\n</ul>\n<hr class=\"docutils\" />\n<div class=\"section\" id=\"results\">\n<h2>Results<a class=\"headerlink\" href=\"#results\" title=\"Permalink to this headline\">¶</a></h2>\n<ul class=\"simple\">\n<li><p>Column details</p>\n<ul>\n<li><p>Agg: Aggregator</p></li>\n<li><p>Sel: SELECT Column</p></li>\n<li><p>Cond: Where clause</p></li>\n<li><p>LF: Logical Form</p></li>\n<li><p>EX: Execution</p></li>\n<li><p>(): Paper result</p></li>\n</ul>\n</li>\n</ul>\n<table border=\"1\" class=\"docutils\">\n<thead>\n<tr>\n<th>Model</th>\n<th>Agg</th>\n<th>Sel</th>\n<th>Cond</th>\n<th>LF</th>\n<th>EX</th>\n<th>BaseConfig</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>SQLNet</strong></td>\n<td>(90.1)</td>\n<td>(91.1)</td>\n<td>(72.1)</td>\n<td>-</td>\n<td>(69.8)</td>\n<td>wikisql/sqlnet.json</td>\n</tr>\n</tbody>\n</table></div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"../summary/reading_comprehension.html\" class=\"btn btn-neutral float-right\" title=\"Reading Comprehension\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"squad.html\" class=\"btn btn-neutral\" title=\"SQuAD\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/search.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>Search &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"./\" src=\"_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/language_data.js\"></script>\n        <script type=\"text/javascript\" src=\"_static/searchtools.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"#\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"index.html\">\n          \n\n          \n            \n            <img src=\"_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"#\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"summary/reading_comprehension.html\">Reading Comprehension</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"index.html\">Docs</a> &raquo;</li>\n        \n      <li>Search</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <noscript>\n  <div id=\"fallback\" class=\"admonition warning\">\n    <p class=\"last\">\n      Please activate JavaScript to enable the search\n      functionality.\n    </p>\n  </div>\n  </noscript>\n\n  \n  <div id=\"search-results\">\n  \n  </div>\n\n           </div>\n           \n          </div>\n          <footer>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n  \n  <script type=\"text/javascript\">\n    jQuery(function() { Search.loadIndex(\"searchindex.js\"); });\n  </script>\n  \n  <script type=\"text/javascript\" id=\"searchindexloader\"></script>\n   \n\n\n</body>\n</html>"
  },
  {
    "path": "docs/_build/html/searchindex.js",
    "content": "Search.setIndex({docnames:[\"claf\",\"claf.config\",\"claf.config.factory\",\"claf.data\",\"claf.data.dataset\",\"claf.data.reader\",\"claf.data.reader.bert\",\"claf.decorator\",\"claf.learn\",\"claf.machine\",\"claf.machine.components\",\"claf.machine.components.retrieval\",\"claf.metric\",\"claf.model\",\"claf.model.reading_comprehension\",\"claf.model.semantic_parsing\",\"claf.model.sequence_classification\",\"claf.model.token_classification\",\"claf.modules\",\"claf.modules.attention\",\"claf.modules.conv\",\"claf.modules.encoder\",\"claf.modules.layer\",\"claf.tokens\",\"claf.tokens.embedding\",\"claf.tokens.indexer\",\"claf.tokens.token_embedder\",\"claf.tokens.tokenizer\",\"contents/dataset_and_model\",\"contents/pretrained_vector\",\"contents/tokens\",\"index\",\"modules\",\"references\",\"reports/glue\",\"reports/historyqa\",\"reports/korquad\",\"reports/squad\",\"reports/wikisql\",\"summary/reading_comprehension\"],envversion:{\"sphinx.domains.c\":1,\"sphinx.domains.changeset\":1,\"sphinx.domains.citation\":1,\"sphinx.domains.cpp\":1,\"sphinx.domains.javascript\":1,\"sphinx.domains.math\":2,\"sphinx.domains.python\":1,\"sphinx.domains.rst\":1,\"sphinx.domains.std\":1,\"sphinx.ext.intersphinx\":1,\"sphinx.ext.viewcode\":1,sphinx:56},filenames:[\"claf.rst\",\"claf.config.rst\",\"claf.config.factory.rst\",\"claf.data.rst\",\"claf.data.dataset.rst\",\"claf.data.reader.rst\",\"claf.data.reader.bert.rst\",\"claf.decorator.rst\",\"claf.learn.rst\",\"claf.machine.rst\",\"claf.machine.components.rst\",\"claf.machine.components.retrieval.rst\",\"claf.metric.rst\",\"claf.model.rst\",\"claf.model.reading_comprehension.rst\",\"claf.model.semantic_parsing.rst\",\"claf.model.sequence_classification.rst\",\"claf.model.token_classification.rst\",\"claf.modules.rst\",\"claf.modules.attention.rst\",\"claf.modules.conv.rst\",\"claf.modules.encoder.rst\",\"claf.modules.layer.rst\",\"claf.tokens.rst\",\"claf.tokens.embedding.rst\",\"claf.tokens.indexer.rst\",\"claf.tokens.token_embedder.rst\",\"claf.tokens.tokenizer.rst\",\"contents/dataset_and_model.md\",\"contents/pretrained_vector.md\",\"contents/tokens.md\",\"index.rst\",\"modules.rst\",\"references.md\",\"reports/glue.md\",\"reports/historyqa.md\",\"reports/korquad.md\",\"reports/squad.md\",\"reports/wikisql.md\",\"summary/reading_comprehension.md\"],objects:{\"\":{claf:[0,0,0,\"-\"]},\"claf.config\":{args:[1,0,0,\"-\"],factory:[2,0,0,\"-\"],namespace:[1,0,0,\"-\"],pattern:[1,0,0,\"-\"],registry:[1,0,0,\"-\"],utils:[1,0,0,\"-\"]},\"claf.config.args\":{arg_str2bool:[1,1,1,\"\"],base_config:[1,1,1,\"\"],config:[1,1,1,\"\"],data:[1,1,1,\"\"],evaluate:[1,1,1,\"\"],general:[1,1,1,\"\"],get_input_arguments:[1,1,1,\"\"],machine:[1,1,1,\"\"],model:[1,1,1,\"\"],nsml_for_internal:[1,1,1,\"\"],optimize_config:[1,1,1,\"\"],predict:[1,1,1,\"\"],set_batch_size:[1,1,1,\"\"],set_gpu_env:[1,1,1,\"\"],token:[1,1,1,\"\"],train_config:[1,1,1,\"\"],trainer:[1,1,1,\"\"]},\"claf.config.factory\":{DataLoaderFactory:[2,2,1,\"\"],DataReaderFactory:[2,2,1,\"\"],ModelFactory:[2,2,1,\"\"],OptimizerFactory:[2,2,1,\"\"],TokenMakersFactory:[2,2,1,\"\"],base:[2,0,0,\"-\"],data_loader:[2,0,0,\"-\"],data_reader:[2,0,0,\"-\"],model:[2,0,0,\"-\"],optimizer:[2,0,0,\"-\"],tokens:[2,0,0,\"-\"]},\"claf.config.factory.DataLoaderFactory\":{create:[2,3,1,\"\"]},\"claf.config.factory.DataReaderFactory\":{create:[2,3,1,\"\"]},\"claf.config.factory.ModelFactory\":{create:[2,3,1,\"\"],create_token_embedder:[2,3,1,\"\"]},\"claf.config.factory.OptimizerFactory\":{create:[2,3,1,\"\"],set_warmup_steps:[2,3,1,\"\"]},\"claf.config.factory.TokenMakersFactory\":{LANGS:[2,4,1,\"\"],create:[2,3,1,\"\"]},\"claf.config.factory.base\":{Factory:[2,2,1,\"\"]},\"claf.config.factory.base.Factory\":{create:[2,3,1,\"\"]},\"claf.config.factory.data_loader\":{DataLoaderFactory:[2,2,1,\"\"],make_data_loader:[2,1,1,\"\"]},\"claf.config.factory.data_loader.DataLoaderFactory\":{create:[2,3,1,\"\"]},\"claf.config.factory.data_reader\":{DataReaderFactory:[2,2,1,\"\"]},\"claf.config.factory.data_reader.DataReaderFactory\":{create:[2,3,1,\"\"]},\"claf.config.factory.model\":{ModelFactory:[2,2,1,\"\"]},\"claf.config.factory.model.ModelFactory\":{create:[2,3,1,\"\"],create_token_embedder:[2,3,1,\"\"]},\"claf.config.factory.optimizer\":{OptimizerFactory:[2,2,1,\"\"]},\"claf.config.factory.optimizer.OptimizerFactory\":{create:[2,3,1,\"\"],set_warmup_steps:[2,3,1,\"\"]},\"claf.config.factory.tokens\":{TokenMakersFactory:[2,2,1,\"\"],make_all_tokenizers:[2,1,1,\"\"],make_tokenizer:[2,1,1,\"\"]},\"claf.config.factory.tokens.TokenMakersFactory\":{LANGS:[2,4,1,\"\"],create:[2,3,1,\"\"]},\"claf.config.namespace\":{NestedNamespace:[1,2,1,\"\"]},\"claf.config.namespace.NestedNamespace\":{delete_unselected:[1,3,1,\"\"],load_from_json:[1,3,1,\"\"],overwrite:[1,3,1,\"\"]},\"claf.config.pattern\":{Singleton:[1,2,1,\"\"]},\"claf.config.registry\":{Registry:[1,2,1,\"\"]},\"claf.config.registry.Registry\":{add:[1,3,1,\"\"],get:[1,3,1,\"\"]},\"claf.config.utils\":{convert_config2dict:[1,1,1,\"\"],pretty_json_dumps:[1,1,1,\"\"],remove_none:[1,1,1,\"\"],set_global_seed:[1,1,1,\"\"]},\"claf.data\":{collate:[3,0,0,\"-\"],data_handler:[3,0,0,\"-\"],dataset:[4,0,0,\"-\"],reader:[5,0,0,\"-\"],utils:[3,0,0,\"-\"]},\"claf.data.collate\":{FeatLabelPadCollator:[3,2,1,\"\"],PadCollator:[3,2,1,\"\"]},\"claf.data.collate.FeatLabelPadCollator\":{collate:[3,3,1,\"\"]},\"claf.data.collate.PadCollator\":{collate:[3,3,1,\"\"]},\"claf.data.data_handler\":{CachePath:[3,2,1,\"\"],DataHandler:[3,2,1,\"\"]},\"claf.data.data_handler.CachePath\":{DATASET:[3,4,1,\"\"],MACHINE:[3,4,1,\"\"],PRETRAINED_VECTOR:[3,4,1,\"\"],ROOT:[3,4,1,\"\"],TOKEN_COUNTER:[3,4,1,\"\"],VOCAB:[3,4,1,\"\"]},\"claf.data.data_handler.DataHandler\":{cache_token_counter:[3,3,1,\"\"],convert_cache_path:[3,3,1,\"\"],dump:[3,3,1,\"\"],load:[3,3,1,\"\"],read:[3,3,1,\"\"],read_embedding:[3,3,1,\"\"]},\"claf.data.dataset\":{MultiTaskBertDataset:[4,2,1,\"\"],RegressionBertDataset:[4,2,1,\"\"],SQuADBertDataset:[4,2,1,\"\"],SQuADDataset:[4,2,1,\"\"],SeqClsBertDataset:[4,2,1,\"\"],SeqClsDataset:[4,2,1,\"\"],TokClsBertDataset:[4,2,1,\"\"],WikiSQLDataset:[4,2,1,\"\"],base:[4,0,0,\"-\"],seq_cls:[4,0,0,\"-\"],squad:[4,0,0,\"-\"],wikisql:[4,0,0,\"-\"]},\"claf.data.dataset.MultiTaskBertDataset\":{collate_fn:[4,3,1,\"\"],init_iterators:[4,3,1,\"\"]},\"claf.data.dataset.RegressionBertDataset\":{collate_fn:[4,3,1,\"\"],get_ground_truth:[4,3,1,\"\"],get_id:[4,3,1,\"\"],sequence_maxlen:[4,3,1,\"\"]},\"claf.data.dataset.SQuADBertDataset\":{bert_input_maxlen:[4,3,1,\"\"],collate_fn:[4,3,1,\"\"],get_bert_tokens:[4,3,1,\"\"],get_context:[4,3,1,\"\"],get_ground_truths:[4,3,1,\"\"],get_id:[4,3,1,\"\"],get_predict:[4,3,1,\"\"],get_qid:[4,3,1,\"\"],get_qid_index:[4,3,1,\"\"],get_text_with_index:[4,3,1,\"\"]},\"claf.data.dataset.SQuADDataset\":{collate_fn:[4,3,1,\"\"],context_maxlen:[4,3,1,\"\"],get_context:[4,3,1,\"\"],get_ground_truths:[4,3,1,\"\"],get_predict:[4,3,1,\"\"],get_qid:[4,3,1,\"\"],get_text_span:[4,3,1,\"\"],get_text_with_index:[4,3,1,\"\"],question_maxlen:[4,3,1,\"\"]},\"claf.data.dataset.SeqClsBertDataset\":{collate_fn:[4,3,1,\"\"],get_class_text_with_idx:[4,3,1,\"\"],get_ground_truth:[4,3,1,\"\"],get_id:[4,3,1,\"\"],num_classes:[4,3,1,\"\"],sequence_maxlen:[4,3,1,\"\"]},\"claf.data.dataset.SeqClsDataset\":{collate_fn:[4,3,1,\"\"],get_class_text_with_idx:[4,3,1,\"\"],get_ground_truth:[4,3,1,\"\"],get_id:[4,3,1,\"\"],num_classes:[4,3,1,\"\"],sequence_maxlen:[4,3,1,\"\"]},\"claf.data.dataset.TokClsBertDataset\":{collate_fn:[4,3,1,\"\"],get_ground_truth:[4,3,1,\"\"],get_id:[4,3,1,\"\"],get_tag_text_with_idx:[4,3,1,\"\"],get_tag_texts_with_idxs:[4,3,1,\"\"],num_tags:[4,3,1,\"\"],sequence_maxlen:[4,3,1,\"\"]},\"claf.data.dataset.WikiSQLDataset\":{collate_fn:[4,3,1,\"\"],get_ground_truth:[4,3,1,\"\"],get_id:[4,3,1,\"\"],get_table_id:[4,3,1,\"\"],get_tokenized_question:[4,3,1,\"\"],question_maxlen:[4,3,1,\"\"]},\"claf.data.dataset.base\":{DatasetBase:[4,2,1,\"\"]},\"claf.data.dataset.base.DatasetBase\":{collate_fn:[4,3,1,\"\"],get_ground_truth:[4,3,1,\"\"],get_ground_truths:[4,3,1,\"\"],get_predict:[4,3,1,\"\"],lazy_evaluation:[4,3,1,\"\"]},\"claf.data.dataset.seq_cls\":{SeqClsDataset:[4,2,1,\"\"]},\"claf.data.dataset.seq_cls.SeqClsDataset\":{collate_fn:[4,3,1,\"\"],get_class_text_with_idx:[4,3,1,\"\"],get_ground_truth:[4,3,1,\"\"],get_id:[4,3,1,\"\"],num_classes:[4,3,1,\"\"],sequence_maxlen:[4,3,1,\"\"]},\"claf.data.dataset.squad\":{SQuADDataset:[4,2,1,\"\"]},\"claf.data.dataset.squad.SQuADDataset\":{collate_fn:[4,3,1,\"\"],context_maxlen:[4,3,1,\"\"],get_context:[4,3,1,\"\"],get_ground_truths:[4,3,1,\"\"],get_predict:[4,3,1,\"\"],get_qid:[4,3,1,\"\"],get_text_span:[4,3,1,\"\"],get_text_with_index:[4,3,1,\"\"],question_maxlen:[4,3,1,\"\"]},\"claf.data.dataset.wikisql\":{WikiSQLDataset:[4,2,1,\"\"]},\"claf.data.dataset.wikisql.WikiSQLDataset\":{collate_fn:[4,3,1,\"\"],get_ground_truth:[4,3,1,\"\"],get_id:[4,3,1,\"\"],get_table_id:[4,3,1,\"\"],get_tokenized_question:[4,3,1,\"\"],question_maxlen:[4,3,1,\"\"]},\"claf.data.reader\":{CoLABertReader:[5,2,1,\"\"],CoLAReader:[5,2,1,\"\"],CoNLL2003BertReader:[5,2,1,\"\"],MNLIBertReader:[5,2,1,\"\"],MRPCBertReader:[5,2,1,\"\"],MultiTaskBertReader:[5,2,1,\"\"],QNLIBertReader:[5,2,1,\"\"],QQPBertReader:[5,2,1,\"\"],RTEBertReader:[5,2,1,\"\"],RegressionBertReader:[5,2,1,\"\"],SQuADBertReader:[5,2,1,\"\"],SQuADReader:[5,2,1,\"\"],SSTBertReader:[5,2,1,\"\"],STSBBertReader:[5,2,1,\"\"],SeqClsBertReader:[5,2,1,\"\"],SeqClsReader:[5,2,1,\"\"],TokClsBertReader:[5,2,1,\"\"],WNLIBertReader:[5,2,1,\"\"],WikiSQLReader:[5,2,1,\"\"],base:[5,0,0,\"-\"],bert:[6,0,0,\"-\"],cola:[5,0,0,\"-\"],seq_cls:[5,0,0,\"-\"],squad:[5,0,0,\"-\"],wikisql:[5,0,0,\"-\"]},\"claf.data.reader.CoLABertReader\":{CLASS_DATA:[5,4,1,\"\"],METRIC_KEY:[5,4,1,\"\"]},\"claf.data.reader.CoLAReader\":{CLASS_DATA:[5,4,1,\"\"]},\"claf.data.reader.MNLIBertReader\":{CLASS_DATA:[5,4,1,\"\"],METRIC_KEY:[5,4,1,\"\"]},\"claf.data.reader.MRPCBertReader\":{CLASS_DATA:[5,4,1,\"\"],METRIC_KEY:[5,4,1,\"\"]},\"claf.data.reader.MultiTaskBertReader\":{CLASS_DATA:[5,4,1,\"\"],make_data_reader:[5,3,1,\"\"],make_task_by_reader:[5,3,1,\"\"],read_one_example:[5,3,1,\"\"]},\"claf.data.reader.QNLIBertReader\":{CLASS_DATA:[5,4,1,\"\"],METRIC_KEY:[5,4,1,\"\"]},\"claf.data.reader.QQPBertReader\":{CLASS_DATA:[5,4,1,\"\"],METRIC_KEY:[5,4,1,\"\"]},\"claf.data.reader.RTEBertReader\":{CLASS_DATA:[5,4,1,\"\"],METRIC_KEY:[5,4,1,\"\"]},\"claf.data.reader.RegressionBertReader\":{METRIC_KEY:[5,4,1,\"\"],read_one_example:[5,3,1,\"\"]},\"claf.data.reader.SQuADBertReader\":{METRIC_KEY:[5,4,1,\"\"],read_one_example:[5,3,1,\"\"]},\"claf.data.reader.SQuADReader\":{read_one_example:[5,3,1,\"\"]},\"claf.data.reader.SSTBertReader\":{CLASS_DATA:[5,4,1,\"\"],METRIC_KEY:[5,4,1,\"\"]},\"claf.data.reader.STSBBertReader\":{METRIC_KEY:[5,4,1,\"\"]},\"claf.data.reader.SeqClsBertReader\":{CLASS_DATA:[5,4,1,\"\"],METRIC_KEY:[5,4,1,\"\"],read_one_example:[5,3,1,\"\"]},\"claf.data.reader.SeqClsReader\":{CLASS_DATA:[5,4,1,\"\"],read_one_example:[5,3,1,\"\"]},\"claf.data.reader.TokClsBertReader\":{read_one_example:[5,3,1,\"\"]},\"claf.data.reader.WNLIBertReader\":{CLASS_DATA:[5,4,1,\"\"],METRIC_KEY:[5,4,1,\"\"]},\"claf.data.reader.WikiSQLReader\":{get_coditions_value_position:[5,3,1,\"\"],load_data:[5,3,1,\"\"],read_one_example:[5,3,1,\"\"]},\"claf.data.reader.base\":{DataReader:[5,2,1,\"\"]},\"claf.data.reader.base.DataReader\":{convert_to_dataset:[5,3,1,\"\"],filter_texts:[5,3,1,\"\"],read:[5,3,1,\"\"],read_one_example:[5,3,1,\"\"]},\"claf.data.reader.bert\":{conll2003:[6,0,0,\"-\"],seq_cls:[6,0,0,\"-\"],squad:[6,0,0,\"-\"],tok_cls:[6,0,0,\"-\"]},\"claf.data.reader.bert.conll2003\":{CoNLL2003BertReader:[6,2,1,\"\"]},\"claf.data.reader.bert.seq_cls\":{SeqClsBertReader:[6,2,1,\"\"]},\"claf.data.reader.bert.seq_cls.SeqClsBertReader\":{CLASS_DATA:[6,4,1,\"\"],METRIC_KEY:[6,4,1,\"\"],read_one_example:[6,3,1,\"\"]},\"claf.data.reader.bert.squad\":{SQuADBertReader:[6,2,1,\"\"],Token:[6,2,1,\"\"]},\"claf.data.reader.bert.squad.SQuADBertReader\":{METRIC_KEY:[6,4,1,\"\"],read_one_example:[6,3,1,\"\"]},\"claf.data.reader.bert.tok_cls\":{TokClsBertReader:[6,2,1,\"\"]},\"claf.data.reader.bert.tok_cls.TokClsBertReader\":{read_one_example:[6,3,1,\"\"]},\"claf.data.reader.cola\":{CoLAReader:[5,2,1,\"\"]},\"claf.data.reader.cola.CoLAReader\":{CLASS_DATA:[5,4,1,\"\"]},\"claf.data.reader.seq_cls\":{SeqClsReader:[5,2,1,\"\"]},\"claf.data.reader.seq_cls.SeqClsReader\":{CLASS_DATA:[5,4,1,\"\"],read_one_example:[5,3,1,\"\"]},\"claf.data.reader.squad\":{SQuADReader:[5,2,1,\"\"]},\"claf.data.reader.squad.SQuADReader\":{read_one_example:[5,3,1,\"\"]},\"claf.data.reader.wikisql\":{WikiSQLReader:[5,2,1,\"\"]},\"claf.data.reader.wikisql.WikiSQLReader\":{get_coditions_value_position:[5,3,1,\"\"],load_data:[5,3,1,\"\"],read_one_example:[5,3,1,\"\"]},\"claf.data.utils\":{get_is_head_of_word:[3,1,1,\"\"],get_sequence_a:[3,1,1,\"\"],get_token_dim:[3,1,1,\"\"],get_token_type:[3,1,1,\"\"],is_lazy:[3,1,1,\"\"],make_batch:[3,1,1,\"\"],make_bert_input:[3,1,1,\"\"],make_bert_token_type:[3,1,1,\"\"],make_bert_token_types:[3,1,1,\"\"],padding_tokens:[3,1,1,\"\"],sanity_check_iob:[3,1,1,\"\"],transpose:[3,1,1,\"\"]},\"claf.decorator\":{arguments:[7,0,0,\"-\"],arguments_required:[7,2,1,\"\"],register:[7,0,0,\"-\"]},\"claf.decorator.arguments\":{arguments_required:[7,2,1,\"\"]},\"claf.decorator.register\":{register:[7,2,1,\"\"]},\"claf.learn\":{experiment:[8,0,0,\"-\"],mode:[8,0,0,\"-\"],tensorboard:[8,0,0,\"-\"],trainer:[8,0,0,\"-\"],utils:[8,0,0,\"-\"]},\"claf.learn.experiment\":{Experiment:[8,2,1,\"\"]},\"claf.learn.experiment.Experiment\":{common_setting:[8,3,1,\"\"],load_setting:[8,3,1,\"\"],predict:[8,3,1,\"\"],set_eval_inference_latency_mode:[8,3,1,\"\"],set_eval_mode:[8,3,1,\"\"],set_predict_mode:[8,3,1,\"\"],set_train_mode:[8,3,1,\"\"],set_trainer:[8,3,1,\"\"]},\"claf.learn.mode\":{Mode:[8,2,1,\"\"]},\"claf.learn.mode.Mode\":{EVAL:[8,4,1,\"\"],INFER_EVAL:[8,4,1,\"\"],MACHINE:[8,4,1,\"\"],PREDICT:[8,4,1,\"\"],TRAIN:[8,4,1,\"\"]},\"claf.learn.tensorboard\":{TensorBoard:[8,2,1,\"\"]},\"claf.learn.tensorboard.TensorBoard\":{embedding_summary:[8,3,1,\"\"],graph_summary:[8,3,1,\"\"],histogram_summary:[8,3,1,\"\"],image_summary:[8,3,1,\"\"],scalar_summaries:[8,3,1,\"\"],scalar_summary:[8,3,1,\"\"]},\"claf.learn.trainer\":{Trainer:[8,2,1,\"\"]},\"claf.learn.trainer.Trainer\":{evaluate:[8,3,1,\"\"],evaluate_inference_latency:[8,3,1,\"\"],predict:[8,3,1,\"\"],save:[8,3,1,\"\"],set_model_base_properties:[8,3,1,\"\"],train:[8,3,1,\"\"],train_and_evaluate:[8,3,1,\"\"]},\"claf.learn.utils\":{TrainCounter:[8,2,1,\"\"],bind_nsml:[8,1,1,\"\"],get_session_name:[8,1,1,\"\"],get_sorted_path:[8,1,1,\"\"],load_model_checkpoint:[8,1,1,\"\"],load_optimizer_checkpoint:[8,1,1,\"\"],load_vocabs:[8,1,1,\"\"],logger:[8,5,1,\"\"],save_checkpoint:[8,1,1,\"\"],send_message_to_slack:[8,1,1,\"\"]},\"claf.learn.utils.TrainCounter\":{epoch:[8,4,1,\"\"],get_display:[8,3,1,\"\"],global_step:[8,4,1,\"\"]},\"claf.machine\":{NLU:[9,2,1,\"\"],OpenQA:[9,2,1,\"\"],base:[9,0,0,\"-\"],components:[10,0,0,\"-\"],module:[9,0,0,\"-\"],nlu:[9,0,0,\"-\"],open_qa:[9,0,0,\"-\"]},\"claf.machine.NLU\":{intent_classification:[9,3,1,\"\"],load:[9,3,1,\"\"],slot_filling:[9,3,1,\"\"]},\"claf.machine.OpenQA\":{load:[9,3,1,\"\"],machine_reading:[9,3,1,\"\"],search_documents:[9,3,1,\"\"]},\"claf.machine.base\":{Machine:[9,2,1,\"\"]},\"claf.machine.base.Machine\":{load:[9,3,1,\"\"],load_from_config:[9,3,1,\"\"],make_module:[9,3,1,\"\"]},\"claf.machine.components\":{TFIDF:[10,2,1,\"\"],retrieval:[11,0,0,\"-\"]},\"claf.machine.components.TFIDF\":{INDEX_FNAME:[10,4,1,\"\"],TFIDF_FNAME:[10,4,1,\"\"],VOCAB_FNAME:[10,4,1,\"\"],get_closest:[10,3,1,\"\"],init:[10,3,1,\"\"],init_model:[10,3,1,\"\"],load:[10,3,1,\"\"],parse:[10,3,1,\"\"],save:[10,3,1,\"\"],text_to_tfidf:[10,3,1,\"\"]},\"claf.machine.components.retrieval\":{tfidf:[11,0,0,\"-\"]},\"claf.machine.components.retrieval.tfidf\":{TFIDF:[11,2,1,\"\"]},\"claf.machine.components.retrieval.tfidf.TFIDF\":{INDEX_FNAME:[11,4,1,\"\"],TFIDF_FNAME:[11,4,1,\"\"],VOCAB_FNAME:[11,4,1,\"\"],get_closest:[11,3,1,\"\"],init:[11,3,1,\"\"],init_model:[11,3,1,\"\"],load:[11,3,1,\"\"],parse:[11,3,1,\"\"],save:[11,3,1,\"\"],text_to_tfidf:[11,3,1,\"\"]},\"claf.machine.module\":{Module:[9,2,1,\"\"]},\"claf.machine.module.Module\":{COMPONENT:[9,4,1,\"\"],EXPERIMENT:[9,4,1,\"\"],KNOWLEDGE_BASE:[9,4,1,\"\"]},\"claf.machine.nlu\":{NLU:[9,2,1,\"\"]},\"claf.machine.nlu.NLU\":{intent_classification:[9,3,1,\"\"],load:[9,3,1,\"\"],slot_filling:[9,3,1,\"\"]},\"claf.machine.open_qa\":{OpenQA:[9,2,1,\"\"]},\"claf.machine.open_qa.OpenQA\":{load:[9,3,1,\"\"],machine_reading:[9,3,1,\"\"],search_documents:[9,3,1,\"\"]},\"claf.metric\":{classification:[12,0,0,\"-\"],squad_v1_official:[12,0,0,\"-\"],squad_v2_official:[12,0,0,\"-\"],wikisql_official:[12,0,0,\"-\"]},\"claf.metric.classification\":{f1:[12,1,1,\"\"],macro_f1:[12,1,1,\"\"],macro_precision:[12,1,1,\"\"],macro_recall:[12,1,1,\"\"],precision:[12,1,1,\"\"],recall:[12,1,1,\"\"]},\"claf.metric.squad_v1_official\":{evaluate:[12,1,1,\"\"],exact_match_score:[12,1,1,\"\"],f1_score:[12,1,1,\"\"],metric_max_over_ground_truths:[12,1,1,\"\"],normalize_answer:[12,1,1,\"\"]},\"claf.metric.squad_v2_official\":{apply_no_ans_threshold:[12,1,1,\"\"],compute_exact:[12,1,1,\"\"],compute_f1:[12,1,1,\"\"],evaluate:[12,1,1,\"\"],find_all_best_thresh:[12,1,1,\"\"],find_best_thresh:[12,1,1,\"\"],get_raw_scores:[12,1,1,\"\"],get_tokens:[12,1,1,\"\"],histogram_na_prob:[12,1,1,\"\"],main:[12,1,1,\"\"],make_eval_dict:[12,1,1,\"\"],make_precision_recall_eval:[12,1,1,\"\"],make_qid_to_has_ans:[12,1,1,\"\"],merge_eval:[12,1,1,\"\"],normalize_answer:[12,1,1,\"\"],parse_args:[12,1,1,\"\"],plot_pr_curve:[12,1,1,\"\"],run_precision_recall_analysis:[12,1,1,\"\"]},\"claf.metric.wikisql_official\":{count_lines:[12,1,1,\"\"],evaluate:[12,1,1,\"\"]},\"claf.model\":{base:[13,0,0,\"-\"],cls_utils:[13,0,0,\"-\"],reading_comprehension:[14,0,0,\"-\"],semantic_parsing:[15,0,0,\"-\"],sequence_classification:[16,0,0,\"-\"],token_classification:[17,0,0,\"-\"]},\"claf.model.base\":{ModelBase:[13,2,1,\"\"],ModelWithTokenEmbedder:[13,2,1,\"\"],ModelWithoutTokenEmbedder:[13,2,1,\"\"]},\"claf.model.base.ModelBase\":{config:[13,3,1,\"\"],dataset:[13,3,1,\"\"],forward:[13,3,1,\"\"],is_ready:[13,3,1,\"\"],log_dir:[13,3,1,\"\"],make_metrics:[13,3,1,\"\"],make_predictions:[13,3,1,\"\"],metrics:[13,3,1,\"\"],predict:[13,3,1,\"\"],print_examples:[13,3,1,\"\"],train_counter:[13,3,1,\"\"],vocabs:[13,3,1,\"\"],write_predictions:[13,3,1,\"\"]},\"claf.model.cls_utils\":{get_tag_dict:[13,1,1,\"\"],write_confusion_matrix_to_csv:[13,1,1,\"\"]},\"claf.model.reading_comprehension\":{BertForQA:[14,2,1,\"\"],BiDAF:[14,2,1,\"\"],BiDAF_No_Answer:[14,2,1,\"\"],DocQA:[14,2,1,\"\"],DocQA_No_Answer:[14,2,1,\"\"],DrQA:[14,2,1,\"\"],QANet:[14,2,1,\"\"],RoBertaForQA:[14,2,1,\"\"],bidaf:[14,0,0,\"-\"],bidaf_no_answer:[14,0,0,\"-\"],docqa:[14,0,0,\"-\"],docqa_no_answer:[14,0,0,\"-\"],drqa:[14,0,0,\"-\"],mixin:[14,0,0,\"-\"],qanet:[14,0,0,\"-\"]},\"claf.model.reading_comprehension.BertForQA\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.BiDAF\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.BiDAF_No_Answer\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.DocQA\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.DocQA_No_Answer\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.DrQA\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.QANet\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.RoBertaForQA\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.bidaf\":{BiDAF:[14,2,1,\"\"]},\"claf.model.reading_comprehension.bidaf.BiDAF\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.bidaf_no_answer\":{BiDAF_No_Answer:[14,2,1,\"\"]},\"claf.model.reading_comprehension.bidaf_no_answer.BiDAF_No_Answer\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.docqa\":{DocQA:[14,2,1,\"\"],SelfAttention:[14,2,1,\"\"]},\"claf.model.reading_comprehension.docqa.DocQA\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.docqa.SelfAttention\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.docqa_no_answer\":{DocQA_No_Answer:[14,2,1,\"\"],NoAnswer:[14,2,1,\"\"],SelfAttention:[14,2,1,\"\"]},\"claf.model.reading_comprehension.docqa_no_answer.DocQA_No_Answer\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.docqa_no_answer.NoAnswer\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.docqa_no_answer.SelfAttention\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.drqa\":{DrQA:[14,2,1,\"\"]},\"claf.model.reading_comprehension.drqa.DrQA\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.mixin\":{ReadingComprehension:[14,2,1,\"\"],SQuADv1:[14,2,1,\"\"],SQuADv1ForBert:[14,2,1,\"\"],SQuADv2:[14,2,1,\"\"]},\"claf.model.reading_comprehension.mixin.ReadingComprehension\":{get_best_span:[14,3,1,\"\"],make_predictions:[14,3,1,\"\"],predict:[14,3,1,\"\"],print_examples:[14,3,1,\"\"],write_predictions:[14,3,1,\"\"]},\"claf.model.reading_comprehension.mixin.SQuADv1\":{make_metrics:[14,3,1,\"\"]},\"claf.model.reading_comprehension.mixin.SQuADv1ForBert\":{make_metrics:[14,3,1,\"\"],predict:[14,3,1,\"\"]},\"claf.model.reading_comprehension.mixin.SQuADv2\":{make_metrics:[14,3,1,\"\"]},\"claf.model.reading_comprehension.qanet\":{EncoderBlock:[14,2,1,\"\"],QANet:[14,2,1,\"\"]},\"claf.model.reading_comprehension.qanet.EncoderBlock\":{forward:[14,3,1,\"\"]},\"claf.model.reading_comprehension.qanet.QANet\":{forward:[14,3,1,\"\"]},\"claf.model.semantic_parsing\":{SQLNet:[15,2,1,\"\"],mixin:[15,0,0,\"-\"],sqlnet:[15,0,0,\"-\"],utils:[15,0,0,\"-\"]},\"claf.model.semantic_parsing.SQLNet\":{forward:[15,3,1,\"\"]},\"claf.model.semantic_parsing.mixin\":{WikiSQL:[15,2,1,\"\"]},\"claf.model.semantic_parsing.mixin.WikiSQL\":{AGG_OPS:[15,4,1,\"\"],COND_OPS:[15,4,1,\"\"],decode_pointer:[15,3,1,\"\"],generate_queries:[15,3,1,\"\"],make_metrics:[15,3,1,\"\"],make_predictions:[15,3,1,\"\"],merge_tokens:[15,3,1,\"\"],predict:[15,3,1,\"\"],print_examples:[15,3,1,\"\"]},\"claf.model.semantic_parsing.sqlnet\":{AggPredictor:[15,2,1,\"\"],CondsColPredictor:[15,2,1,\"\"],CondsNumPredictor:[15,2,1,\"\"],CondsOpPredictor:[15,2,1,\"\"],CondsPredictor:[15,2,1,\"\"],CondsValuePointer:[15,2,1,\"\"],SQLNet:[15,2,1,\"\"],SelPredictor:[15,2,1,\"\"]},\"claf.model.semantic_parsing.sqlnet.AggPredictor\":{forward:[15,3,1,\"\"]},\"claf.model.semantic_parsing.sqlnet.CondsColPredictor\":{forward:[15,3,1,\"\"]},\"claf.model.semantic_parsing.sqlnet.CondsNumPredictor\":{forward:[15,3,1,\"\"]},\"claf.model.semantic_parsing.sqlnet.CondsOpPredictor\":{forward:[15,3,1,\"\"]},\"claf.model.semantic_parsing.sqlnet.CondsPredictor\":{forward:[15,3,1,\"\"]},\"claf.model.semantic_parsing.sqlnet.CondsValuePointer\":{concat_start_and_end_zero_padding:[15,3,1,\"\"],decode_then_output:[15,3,1,\"\"],forward:[15,3,1,\"\"]},\"claf.model.semantic_parsing.sqlnet.SQLNet\":{forward:[15,3,1,\"\"]},\"claf.model.semantic_parsing.sqlnet.SelPredictor\":{forward:[15,3,1,\"\"]},\"claf.model.semantic_parsing.utils\":{convert_position_to_decoder_input:[15,1,1,\"\"],encode_column:[15,1,1,\"\"],filter_used_column:[15,1,1,\"\"],get_column_lengths:[15,1,1,\"\"]},\"claf.model.sequence_classification\":{BertForSeqCls:[16,2,1,\"\"],RobertaForSeqCls:[16,2,1,\"\"],StructuredSelfAttention:[16,2,1,\"\"],mixin:[16,0,0,\"-\"],structured_self_attention:[16,0,0,\"-\"]},\"claf.model.sequence_classification.BertForSeqCls\":{forward:[16,3,1,\"\"],print_examples:[16,3,1,\"\"]},\"claf.model.sequence_classification.RobertaForSeqCls\":{forward:[16,3,1,\"\"],print_examples:[16,3,1,\"\"]},\"claf.model.sequence_classification.StructuredSelfAttention\":{forward:[16,3,1,\"\"],penalty:[16,3,1,\"\"]},\"claf.model.sequence_classification.mixin\":{SequenceClassification:[16,2,1,\"\"]},\"claf.model.sequence_classification.mixin.SequenceClassification\":{make_metrics:[16,3,1,\"\"],make_predictions:[16,3,1,\"\"],predict:[16,3,1,\"\"],print_examples:[16,3,1,\"\"],write_predictions:[16,3,1,\"\"]},\"claf.model.sequence_classification.structured_self_attention\":{StructuredSelfAttention:[16,2,1,\"\"]},\"claf.model.sequence_classification.structured_self_attention.StructuredSelfAttention\":{forward:[16,3,1,\"\"],penalty:[16,3,1,\"\"]},\"claf.model.token_classification\":{BertForTokCls:[17,2,1,\"\"],mixin:[17,0,0,\"-\"]},\"claf.model.token_classification.BertForTokCls\":{forward:[17,3,1,\"\"],print_examples:[17,3,1,\"\"]},\"claf.model.token_classification.mixin\":{TokenClassification:[17,2,1,\"\"]},\"claf.model.token_classification.mixin.TokenClassification\":{make_metrics:[17,3,1,\"\"],make_predictions:[17,3,1,\"\"],predict:[17,3,1,\"\"],print_examples:[17,3,1,\"\"],write_predictions:[17,3,1,\"\"]},\"claf.modules\":{activation:[18,0,0,\"-\"],attention:[19,0,0,\"-\"],conv:[20,0,0,\"-\"],encoder:[21,0,0,\"-\"],functional:[18,0,0,\"-\"],initializer:[18,0,0,\"-\"],layer:[22,0,0,\"-\"]},\"claf.modules.activation\":{get_activation_fn:[18,1,1,\"\"]},\"claf.modules.attention\":{BiAttention:[19,2,1,\"\"],BilinearSeqAttn:[19,2,1,\"\"],CoAttention:[19,2,1,\"\"],DocQAAttention:[19,2,1,\"\"],LinearSeqAttn:[19,2,1,\"\"],MultiHeadAttention:[19,2,1,\"\"],SeqAttnMatch:[19,2,1,\"\"],bi_attention:[19,0,0,\"-\"],co_attention:[19,0,0,\"-\"],docqa_attention:[19,0,0,\"-\"],multi_head_attention:[19,0,0,\"-\"],seq_attention:[19,0,0,\"-\"]},\"claf.modules.attention.BiAttention\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.BilinearSeqAttn\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.CoAttention\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.DocQAAttention\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.LinearSeqAttn\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.MultiHeadAttention\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.SeqAttnMatch\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.bi_attention\":{BiAttention:[19,2,1,\"\"]},\"claf.modules.attention.bi_attention.BiAttention\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.co_attention\":{CoAttention:[19,2,1,\"\"]},\"claf.modules.attention.co_attention.CoAttention\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.docqa_attention\":{DocQAAttention:[19,2,1,\"\"]},\"claf.modules.attention.docqa_attention.DocQAAttention\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.multi_head_attention\":{MultiHeadAttention:[19,2,1,\"\"]},\"claf.modules.attention.multi_head_attention.MultiHeadAttention\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.seq_attention\":{BilinearSeqAttn:[19,2,1,\"\"],LinearSeqAttn:[19,2,1,\"\"],SeqAttnMatch:[19,2,1,\"\"]},\"claf.modules.attention.seq_attention.BilinearSeqAttn\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.seq_attention.LinearSeqAttn\":{forward:[19,3,1,\"\"]},\"claf.modules.attention.seq_attention.SeqAttnMatch\":{forward:[19,3,1,\"\"]},\"claf.modules.conv\":{DepSepConv:[20,2,1,\"\"],PointwiseConv:[20,2,1,\"\"],depthwise_separable_conv:[20,0,0,\"-\"],pointwise_conv:[20,0,0,\"-\"]},\"claf.modules.conv.DepSepConv\":{forward:[20,3,1,\"\"]},\"claf.modules.conv.PointwiseConv\":{forward:[20,3,1,\"\"]},\"claf.modules.conv.depthwise_separable_conv\":{DepSepConv:[20,2,1,\"\"]},\"claf.modules.conv.depthwise_separable_conv.DepSepConv\":{forward:[20,3,1,\"\"]},\"claf.modules.conv.pointwise_conv\":{PointwiseConv:[20,2,1,\"\"]},\"claf.modules.conv.pointwise_conv.PointwiseConv\":{forward:[20,3,1,\"\"]},\"claf.modules.encoder\":{LstmCellWithProjection:[21,2,1,\"\"],PositionalEncoding:[21,2,1,\"\"],lstm_cell_with_projection:[21,0,0,\"-\"],positional:[21,0,0,\"-\"]},\"claf.modules.encoder.LstmCellWithProjection\":{forward:[21,3,1,\"\"],reset_parameters:[21,3,1,\"\"]},\"claf.modules.encoder.PositionalEncoding\":{forward:[21,3,1,\"\"]},\"claf.modules.encoder.lstm_cell_with_projection\":{LstmCellWithProjection:[21,2,1,\"\"],block_orthogonal:[21,1,1,\"\"],get_dropout_mask:[21,1,1,\"\"],sort_batch_by_length:[21,1,1,\"\"]},\"claf.modules.encoder.lstm_cell_with_projection.LstmCellWithProjection\":{forward:[21,3,1,\"\"],reset_parameters:[21,3,1,\"\"]},\"claf.modules.encoder.positional\":{PositionalEncoding:[21,2,1,\"\"]},\"claf.modules.encoder.positional.PositionalEncoding\":{forward:[21,3,1,\"\"]},\"claf.modules.functional\":{add_masked_value:[18,1,1,\"\"],forward_rnn_with_pack:[18,1,1,\"\"],get_mask_from_tokens:[18,1,1,\"\"],get_sorted_seq_config:[18,1,1,\"\"],last_dim_masked_softmax:[18,1,1,\"\"],masked_log_softmax:[18,1,1,\"\"],masked_softmax:[18,1,1,\"\"],masked_zero:[18,1,1,\"\"],weighted_sum:[18,1,1,\"\"]},\"claf.modules.initializer\":{weight:[18,1,1,\"\"]},\"claf.modules.layer\":{Highway:[22,2,1,\"\"],PositionwiseFeedForward:[22,2,1,\"\"],ResidualConnection:[22,2,1,\"\"],ScalarMix:[22,2,1,\"\"],highway:[22,0,0,\"-\"],normalization:[22,0,0,\"-\"],positionwise:[22,0,0,\"-\"],residual:[22,0,0,\"-\"],scalar_mix:[22,0,0,\"-\"]},\"claf.modules.layer.Highway\":{forward:[22,3,1,\"\"]},\"claf.modules.layer.PositionwiseFeedForward\":{forward:[22,3,1,\"\"]},\"claf.modules.layer.ResidualConnection\":{forward:[22,3,1,\"\"]},\"claf.modules.layer.ScalarMix\":{forward:[22,3,1,\"\"]},\"claf.modules.layer.highway\":{Highway:[22,2,1,\"\"]},\"claf.modules.layer.highway.Highway\":{forward:[22,3,1,\"\"]},\"claf.modules.layer.normalization\":{LayerNorm:[22,2,1,\"\"]},\"claf.modules.layer.normalization.LayerNorm\":{forward:[22,3,1,\"\"]},\"claf.modules.layer.positionwise\":{PositionwiseFeedForward:[22,2,1,\"\"]},\"claf.modules.layer.positionwise.PositionwiseFeedForward\":{forward:[22,3,1,\"\"]},\"claf.modules.layer.residual\":{ResidualConnection:[22,2,1,\"\"]},\"claf.modules.layer.residual.ResidualConnection\":{forward:[22,3,1,\"\"]},\"claf.modules.layer.scalar_mix\":{ScalarMix:[22,2,1,\"\"]},\"claf.modules.layer.scalar_mix.ScalarMix\":{forward:[22,3,1,\"\"]},\"claf.tokens\":{BertTokenMaker:[23,2,1,\"\"],CharTokenMaker:[23,2,1,\"\"],CoveTokenMaker:[23,2,1,\"\"],ElmoTokenMaker:[23,2,1,\"\"],ExactMatchTokenMaker:[23,2,1,\"\"],FeatureTokenMaker:[23,2,1,\"\"],FrequentWordTokenMaker:[23,2,1,\"\"],LinguisticTokenMaker:[23,2,1,\"\"],WordTokenMaker:[23,2,1,\"\"],basic_embedding_fn:[23,1,1,\"\"],cove:[23,0,0,\"-\"],elmo:[23,0,0,\"-\"],embedding:[24,0,0,\"-\"],hangul:[23,0,0,\"-\"],indexer:[25,0,0,\"-\"],linguistic:[23,0,0,\"-\"],text_handler:[23,0,0,\"-\"],token_embedder:[26,0,0,\"-\"],token_maker:[23,0,0,\"-\"],tokenizer:[27,0,0,\"-\"],vocabulary:[23,0,0,\"-\"]},\"claf.tokens.cove\":{MTLSTM:[23,2,1,\"\"]},\"claf.tokens.cove.MTLSTM\":{forward:[23,3,1,\"\"]},\"claf.tokens.elmo\":{Elmo:[23,2,1,\"\"],ElmoLstm:[23,2,1,\"\"],add_sentence_boundary_token_ids:[23,1,1,\"\"],remove_sentence_boundaries:[23,1,1,\"\"]},\"claf.tokens.elmo.Elmo\":{forward:[23,3,1,\"\"],from_params:[23,3,1,\"\"],get_output_dim:[23,3,1,\"\"]},\"claf.tokens.elmo.ElmoLstm\":{forward:[23,3,1,\"\"],load_weights:[23,3,1,\"\"]},\"claf.tokens.embedding\":{BertEmbedding:[24,2,1,\"\"],CharEmbedding:[24,2,1,\"\"],CoveEmbedding:[24,2,1,\"\"],ELMoEmbedding:[24,2,1,\"\"],FrequentTuningWordEmbedding:[24,2,1,\"\"],SparseFeature:[24,2,1,\"\"],WordEmbedding:[24,2,1,\"\"],base:[24,0,0,\"-\"],bert_embedding:[24,0,0,\"-\"],char_embedding:[24,0,0,\"-\"],cove_embedding:[24,0,0,\"-\"],elmo_embedding:[24,0,0,\"-\"],frequent_word_embedding:[24,0,0,\"-\"],sparse_feature:[24,0,0,\"-\"],word_embedding:[24,0,0,\"-\"]},\"claf.tokens.embedding.BertEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"],remove_cls_sep_token:[24,3,1,\"\"]},\"claf.tokens.embedding.CharEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.CoveEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.ELMoEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.FrequentTuningWordEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.SparseFeature\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.WordEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.base\":{TokenEmbedding:[24,2,1,\"\"]},\"claf.tokens.embedding.base.TokenEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"],get_vocab_size:[24,3,1,\"\"]},\"claf.tokens.embedding.bert_embedding\":{BertEmbedding:[24,2,1,\"\"]},\"claf.tokens.embedding.bert_embedding.BertEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"],remove_cls_sep_token:[24,3,1,\"\"]},\"claf.tokens.embedding.char_embedding\":{CharEmbedding:[24,2,1,\"\"]},\"claf.tokens.embedding.char_embedding.CharEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.cove_embedding\":{CoveEmbedding:[24,2,1,\"\"]},\"claf.tokens.embedding.cove_embedding.CoveEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.elmo_embedding\":{ELMoEmbedding:[24,2,1,\"\"]},\"claf.tokens.embedding.elmo_embedding.ELMoEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.frequent_word_embedding\":{FrequentTuningWordEmbedding:[24,2,1,\"\"]},\"claf.tokens.embedding.frequent_word_embedding.FrequentTuningWordEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.sparse_feature\":{OneHotEncoding:[24,2,1,\"\"],SparseFeature:[24,2,1,\"\"],SparseToEmbedding:[24,2,1,\"\"]},\"claf.tokens.embedding.sparse_feature.OneHotEncoding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.sparse_feature.SparseFeature\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.sparse_feature.SparseToEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.embedding.word_embedding\":{WordEmbedding:[24,2,1,\"\"]},\"claf.tokens.embedding.word_embedding.WordEmbedding\":{forward:[24,3,1,\"\"],get_output_dim:[24,3,1,\"\"]},\"claf.tokens.hangul\":{NotHangulException:[23,6,1,\"\"],NotLetterException:[23,6,1,\"\"],NotWordException:[23,6,1,\"\"],add_ryul:[23,1,1,\"\"],compose:[23,1,1,\"\"],decompose:[23,1,1,\"\"],has_approximant:[23,1,1,\"\"],has_batchim:[23,1,1,\"\"],has_jongsung:[23,1,1,\"\"],ili:[23,1,1,\"\"],is_all_hangul:[23,1,1,\"\"],is_hangul:[23,1,1,\"\"],josa_eg:[23,1,1,\"\"],josa_el:[23,1,1,\"\"],josa_en:[23,1,1,\"\"],josa_gwa:[23,1,1,\"\"],josa_ida:[23,1,1,\"\"],josa_ro:[23,1,1,\"\"]},\"claf.tokens.indexer\":{BertIndexer:[25,2,1,\"\"],CharIndexer:[25,2,1,\"\"],ELMoIndexer:[25,2,1,\"\"],ExactMatchIndexer:[25,2,1,\"\"],LinguisticIndexer:[25,2,1,\"\"],WordIndexer:[25,2,1,\"\"],base:[25,0,0,\"-\"],bert_indexer:[25,0,0,\"-\"],char_indexer:[25,0,0,\"-\"],elmo_indexer:[25,0,0,\"-\"],exact_match_indexer:[25,0,0,\"-\"],linguistic_indexer:[25,0,0,\"-\"],word_indexer:[25,0,0,\"-\"]},\"claf.tokens.indexer.BertIndexer\":{index:[25,3,1,\"\"]},\"claf.tokens.indexer.CharIndexer\":{index:[25,3,1,\"\"],index_token:[25,3,1,\"\"]},\"claf.tokens.indexer.ELMoIndexer\":{BOS_TOKEN:[25,4,1,\"\"],EOS_TOKEN:[25,4,1,\"\"],beginning_of_sentence_character:[25,4,1,\"\"],beginning_of_sentence_characters:[25,4,1,\"\"],beginning_of_word_character:[25,4,1,\"\"],end_of_sentence_character:[25,4,1,\"\"],end_of_sentence_characters:[25,4,1,\"\"],end_of_word_character:[25,4,1,\"\"],index:[25,3,1,\"\"],index_token:[25,3,1,\"\"],max_word_length:[25,4,1,\"\"],padding_character:[25,4,1,\"\"]},\"claf.tokens.indexer.ExactMatchIndexer\":{index:[25,3,1,\"\"],index_token:[25,3,1,\"\"]},\"claf.tokens.indexer.LinguisticIndexer\":{index:[25,3,1,\"\"]},\"claf.tokens.indexer.WordIndexer\":{index:[25,3,1,\"\"]},\"claf.tokens.indexer.base\":{TokenIndexer:[25,2,1,\"\"]},\"claf.tokens.indexer.base.TokenIndexer\":{index:[25,3,1,\"\"],set_vocab:[25,3,1,\"\"]},\"claf.tokens.indexer.bert_indexer\":{BertIndexer:[25,2,1,\"\"]},\"claf.tokens.indexer.bert_indexer.BertIndexer\":{index:[25,3,1,\"\"]},\"claf.tokens.indexer.char_indexer\":{CharIndexer:[25,2,1,\"\"]},\"claf.tokens.indexer.char_indexer.CharIndexer\":{index:[25,3,1,\"\"],index_token:[25,3,1,\"\"]},\"claf.tokens.indexer.elmo_indexer\":{ELMoIndexer:[25,2,1,\"\"]},\"claf.tokens.indexer.elmo_indexer.ELMoIndexer\":{BOS_TOKEN:[25,4,1,\"\"],EOS_TOKEN:[25,4,1,\"\"],beginning_of_sentence_character:[25,4,1,\"\"],beginning_of_sentence_characters:[25,4,1,\"\"],beginning_of_word_character:[25,4,1,\"\"],end_of_sentence_character:[25,4,1,\"\"],end_of_sentence_characters:[25,4,1,\"\"],end_of_word_character:[25,4,1,\"\"],index:[25,3,1,\"\"],index_token:[25,3,1,\"\"],max_word_length:[25,4,1,\"\"],padding_character:[25,4,1,\"\"]},\"claf.tokens.indexer.exact_match_indexer\":{ExactMatchIndexer:[25,2,1,\"\"]},\"claf.tokens.indexer.exact_match_indexer.ExactMatchIndexer\":{index:[25,3,1,\"\"],index_token:[25,3,1,\"\"]},\"claf.tokens.indexer.linguistic_indexer\":{LinguisticIndexer:[25,2,1,\"\"]},\"claf.tokens.indexer.linguistic_indexer.LinguisticIndexer\":{index:[25,3,1,\"\"]},\"claf.tokens.indexer.word_indexer\":{WordIndexer:[25,2,1,\"\"]},\"claf.tokens.indexer.word_indexer.WordIndexer\":{index:[25,3,1,\"\"]},\"claf.tokens.linguistic\":{NER:[23,2,1,\"\"],POSTag:[23,2,1,\"\"]},\"claf.tokens.linguistic.NER\":{classes:[23,4,1,\"\"]},\"claf.tokens.linguistic.POSTag\":{classes:[23,4,1,\"\"]},\"claf.tokens.text_handler\":{TextHandler:[23,2,1,\"\"]},\"claf.tokens.text_handler.TextHandler\":{build_vocabs:[23,3,1,\"\"],index:[23,3,1,\"\"],is_all_vocab_use_pretrained:[23,3,1,\"\"],make_token_counters:[23,3,1,\"\"],raw_to_tensor_fn:[23,3,1,\"\"]},\"claf.tokens.token_embedder\":{BasicTokenEmbedder:[26,2,1,\"\"],RCTokenEmbedder:[26,2,1,\"\"],base:[26,0,0,\"-\"],basic_embedder:[26,0,0,\"-\"],reading_comprehension_embedder:[26,0,0,\"-\"]},\"claf.tokens.token_embedder.BasicTokenEmbedder\":{forward:[26,3,1,\"\"],get_embed_dim:[26,3,1,\"\"]},\"claf.tokens.token_embedder.RCTokenEmbedder\":{EXCLUSIVE_TOKENS:[26,4,1,\"\"],forward:[26,3,1,\"\"],get_embed_dim:[26,3,1,\"\"]},\"claf.tokens.token_embedder.base\":{TokenEmbedder:[26,2,1,\"\"]},\"claf.tokens.token_embedder.base.TokenEmbedder\":{add_embedding_modules:[26,3,1,\"\"],forward:[26,3,1,\"\"],get_embed_dim:[26,3,1,\"\"]},\"claf.tokens.token_embedder.basic_embedder\":{BasicTokenEmbedder:[26,2,1,\"\"]},\"claf.tokens.token_embedder.basic_embedder.BasicTokenEmbedder\":{forward:[26,3,1,\"\"],get_embed_dim:[26,3,1,\"\"]},\"claf.tokens.token_embedder.reading_comprehension_embedder\":{RCTokenEmbedder:[26,2,1,\"\"]},\"claf.tokens.token_embedder.reading_comprehension_embedder.RCTokenEmbedder\":{EXCLUSIVE_TOKENS:[26,4,1,\"\"],forward:[26,3,1,\"\"],get_embed_dim:[26,3,1,\"\"]},\"claf.tokens.token_maker\":{TokenMaker:[23,2,1,\"\"]},\"claf.tokens.token_maker.TokenMaker\":{BERT_TYPE:[23,4,1,\"\"],CHAR_TYPE:[23,4,1,\"\"],COVE_TYPE:[23,4,1,\"\"],ELMO_TYPE:[23,4,1,\"\"],EXACT_MATCH_TYPE:[23,4,1,\"\"],FEATURE_TYPE:[23,4,1,\"\"],FREQUENT_WORD_TYPE:[23,4,1,\"\"],LINGUISTIC_TYPE:[23,4,1,\"\"],WORD_TYPE:[23,4,1,\"\"],embedding_fn:[23,3,1,\"\"],indexer:[23,3,1,\"\"],set_vocab:[23,3,1,\"\"],tokenizer:[23,3,1,\"\"],vocab:[23,3,1,\"\"],vocab_config:[23,3,1,\"\"]},\"claf.tokens.tokenizer\":{\"char\":[27,0,0,\"-\"],BPETokenizer:[27,2,1,\"\"],CharTokenizer:[27,2,1,\"\"],PassText:[27,2,1,\"\"],SentTokenizer:[27,2,1,\"\"],SubwordTokenizer:[27,2,1,\"\"],WordTokenizer:[27,2,1,\"\"],base:[27,0,0,\"-\"],pass_text:[27,0,0,\"-\"],sent:[27,0,0,\"-\"],subword:[27,0,0,\"-\"],utils:[27,0,0,\"-\"],word:[27,0,0,\"-\"]},\"claf.tokens.tokenizer.PassText\":{tokenize:[27,3,1,\"\"]},\"claf.tokens.tokenizer.WordTokenizer\":{make_split_regex_expression:[27,3,1,\"\"]},\"claf.tokens.tokenizer.base\":{Tokenizer:[27,2,1,\"\"]},\"claf.tokens.tokenizer.base.Tokenizer\":{MAX_TO_KEEP_CACHE:[27,4,1,\"\"],tokenize:[27,3,1,\"\"]},\"claf.tokens.tokenizer.char\":{CharTokenizer:[27,2,1,\"\"]},\"claf.tokens.tokenizer.pass_text\":{PassText:[27,2,1,\"\"]},\"claf.tokens.tokenizer.pass_text.PassText\":{tokenize:[27,3,1,\"\"]},\"claf.tokens.tokenizer.sent\":{SentTokenizer:[27,2,1,\"\"]},\"claf.tokens.tokenizer.subword\":{SubwordTokenizer:[27,2,1,\"\"]},\"claf.tokens.tokenizer.utils\":{create_tokenizer_with_regex:[27,1,1,\"\"],load_spacy_model_for_tokenizer:[27,1,1,\"\"]},\"claf.tokens.tokenizer.word\":{WordTokenizer:[27,2,1,\"\"]},\"claf.tokens.tokenizer.word.WordTokenizer\":{make_split_regex_expression:[27,3,1,\"\"]},\"claf.tokens.vocabulary\":{Vocab:[23,2,1,\"\"],VocabDict:[23,2,1,\"\"]},\"claf.tokens.vocabulary.Vocab\":{DEFAULT_OOV_INDEX:[23,4,1,\"\"],DEFAULT_OOV_TOKEN:[23,4,1,\"\"],DEFAULT_PAD_INDEX:[23,4,1,\"\"],DEFAULT_PAD_TOKEN:[23,4,1,\"\"],PRETRAINED_ALL:[23,4,1,\"\"],PRETRAINED_INTERSECT:[23,4,1,\"\"],add:[23,3,1,\"\"],build:[23,3,1,\"\"],build_with_pretrained_file:[23,3,1,\"\"],dump:[23,3,1,\"\"],from_texts:[23,3,1,\"\"],get_all_tokens:[23,3,1,\"\"],get_index:[23,3,1,\"\"],get_token:[23,3,1,\"\"],init:[23,3,1,\"\"],load:[23,3,1,\"\"],to_text:[23,3,1,\"\"]},\"claf.utils\":{flatten:[0,1,1,\"\"],get_user_input:[0,1,1,\"\"],set_logging_config:[0,1,1,\"\"]},claf:{config:[1,0,0,\"-\"],data:[3,0,0,\"-\"],decorator:[7,0,0,\"-\"],learn:[8,0,0,\"-\"],machine:[9,0,0,\"-\"],metric:[12,0,0,\"-\"],model:[13,0,0,\"-\"],modules:[18,0,0,\"-\"],tokens:[23,0,0,\"-\"],utils:[0,0,0,\"-\"]}},objnames:{\"0\":[\"py\",\"module\",\"Python module\"],\"1\":[\"py\",\"function\",\"Python function\"],\"2\":[\"py\",\"class\",\"Python class\"],\"3\":[\"py\",\"method\",\"Python method\"],\"4\":[\"py\",\"attribute\",\"Python attribute\"],\"5\":[\"py\",\"data\",\"Python data\"],\"6\":[\"py\",\"exception\",\"Python exception\"]},objtypes:{\"0\":\"py:module\",\"1\":\"py:function\",\"2\":\"py:class\",\"3\":\"py:method\",\"4\":\"py:attribute\",\"5\":\"py:data\",\"6\":\"py:exception\"},terms:{\"100d\":[29,30],\"110m\":34,\"1x1\":20,\"200d\":29,\"2048cnn\":29,\"2x4096\":29,\"2xhighwai\":29,\"300d\":[23,29],\"340m\":34,\"42c3f377f441e5a0f431127d63e71414ead291c4\":21,\"50d\":29,\"840b\":[23,29],\"\\u0121hello\":30,\"\\u0121world\":30,\"\\u3134\":30,\"\\u3145\":30,\"\\u3147\":30,\"\\u314f\":30,\"\\u3154\":30,\"\\u3155\":30,\"\\u3162\":23,\"\\uac00\":23,\"\\uacfc\":23,\"\\uad6c\\uc131\\ub418\\uc5c8\\uc2b5\\ub2c8\\ub2e4\":[28,36],\"\\ub294\":23,\"\\ub2e4\":23,\"\\ub2f5\\ubcc0\\uc740\":[28,36],\"\\ub300\\ud55c\":[28,36],\"\\ub370\\uc774\\ud130\\uc14b\\uc785\\ub2c8\\ub2e4\":[28,36],\"\\ub3d9\\uc77c\\ud55c\":[28,36],\"\\ub85c\":23,\"\\ub960\":23,\"\\ub97c\":23,\"\\ub9cc\\ub4e0\":[28,36],\"\\ubaa8\\ub4e0\":[28,36],\"\\ubb38\\ub2e8\\uc758\":[28,36],\"\\ubc29\\uc2dd\\uc73c\\ub85c\":[28,36],\"\\uc138\\uc0c1\":30,\"\\uc544\\ud2f0\\ud074\":[28,36],\"\\uc548\\ub155\":30,\"\\uc601\\uc5ed\\uc73c\\ub85c\":[28,36],\"\\uc640\":23,\"\\uc704\\ud574\":[28,36],\"\\uc728\":23,\"\\uc73c\\ub85c\":23,\"\\uc740\":23,\"\\uc744\":23,\"\\uc774\":23,\"\\uc774\\ub2e4\":23,\"\\uc774\\ub8e8\\uc5b4\\uc9d1\\ub2c8\\ub2e4\":[28,36],\"\\uc77c\\ubd80\":[28,36],\"\\uc9c8\\uc758\\uc5d0\":[28,36],\"\\ud558\\uc704\":[28,36],\"\\ud55c\\uad6d\\uc5b4\":[28,36],\"\\ud574\\ub2f9\":[28,36],\"abstract\":4,\"break\":23,\"byte\":27,\"case\":[8,21,22,23,25,36],\"char\":[5,6,14,23,24,25,27,30],\"class\":[1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,30],\"comprehension\\uc744\":[28,36],\"default\":[1,3,8,14,21,22,23,24,25,30],\"eu\\u3161\":23,\"final\":21,\"float\":[21,22,23],\"function\":[7,12,13,14,15,18,19,20,21,22,23,24,25,26,30],\"int\":[21,22,23],\"korquad\\ub294\":[28,36],\"long\":23,\"new\":[23,37],\"public\":23,\"return\":[1,3,14,15,16,17,21,23,27],\"true\":[2,3,8,12,13,14,16,17,19,21,22,23,24,25,27,30],\"ui\\u3162\":23,\"while\":[3,13,14,15,19,20,21,22,24,26],AND:23,BUT:23,CLS:[3,5,6,23],FOR:23,For:[19,23,30],NOT:[21,23],One:24,POS:[23,25,30],STS:[5,28,34],THE:23,The:[19,21,22,23,24,28,30,34],USE:23,Used:[14,15],WITH:23,_bert:34,_bert_bas:[],_elmobilm:23,_encoderbas:23,_modul:8,_roberta:34,_roberta_bas:[],_uncas:39,a_gold:12,a_ij:[14,26],a_pr:12,abov:23,abs:[5,14,15,16,17,19,20,21,22,23,24],accord:[2,3,8,18,23,24],account:23,accuraci:[5,14,15,16,17,34],across:23,action:[23,27],activ:[18,22,23,24,30],adam:33,add:[1,14,23,25,26],add_embedding_modul:26,add_masked_valu:18,add_ryul:23,add_sentence_boundary_token_id:23,addit:[12,22,23,24],addition:23,adj:23,adp:23,adv:23,after:[21,23],afterward:[13,14,15,19,20,21,22,24,26],agg:[15,38],agg_count:15,agg_op:15,aggpredictor:15,aggreg:[15,38],alexand:33,ali:33,align:[14,26],aligned_query_embed:14,all:[2,8,13,14,15,19,20,21,22,23,24,26,30],all_tokenizer_config:2,allenai:[18,21,22,23,25],allennlp:[18,21,22,23,25,30,33],allow:[3,21],along:[21,28],alpha_j:19,also:[3,12,23],although:[13,14,15,19,20,21,22,24,26],amount:[3,27],analyz:[28,34],anci:30,ani:[22,23],aniruddha:33,annot:23,answer:[9,14,15,19,28,33,35,36,37],answer_idx:[],answer_maxlen:14,antoin:33,anyon:30,anyth:23,api:[21,23],append:[23,25],appendix:31,appli:[3,9,14,21,22,23,24,26,27],applic:[21,23],apply_no_ans_threshold:12,apply_pad:3,apply_pad_label:3,apply_pad_valu:3,approach:28,approxim:23,aren:23,arg:[1,2,3,4,5,6,8,9,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],arg_str2bool:1,argmax:14,argpars:1,argument:[1,2,7,8,14,16,23],arguments_requir:7,argv:1,aris:23,articl:[12,28,37],arxiv:[5,14,15,16,17,19,20,21,22,23,24],assign:[3,23],associ:23,assum:23,ataset:28,attent:[0,14,15,16,18,21,26,28,33],attention_dim:16,attribut:[1,23],author:23,automag:23,aux:23,averag:[8,22,30],avg:15,avoid:27,b142a7f2:29,backward:[21,23],balanc:15,base:[1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,34,36,37],base_config:1,baseconfig:[30,34,35,36,37,38,39],basic:[12,26],basic_embedd:26,basic_embedding_fn:23,basictokenembedd:26,batch:[3,4,5,14,15,16,17,21,23,24],batch_length:21,batch_siz:[2,5,21,22,23],becaus:21,been:23,befor:[22,24],begin:23,beginning_of_sentence_charact:25,beginning_of_word_charact:25,being:21,below:[14,16,17,23],benchmark:[5,28,34],bert:[0,3,4,5,14,16,17,23,24,25,28,33,34,36,37,39],bert_bas:[27,30,39],bert_base_glu:34,bert_base_multilingual_cas:36,bert_base_multilingual_uncas:36,bert_base_uncas:37,bert_embed:24,bert_index:25,bert_input:[3,16,17],bert_input_maxlen:4,bert_input_text:3,bert_large_glu:34,bert_large_uncas:37,bert_token:3,bert_typ:23,bertembed:24,bertforqa:14,bertforseqcl:16,bertfortokcl:17,bertindex:25,berttokenmak:23,best:14,best_exact:14,best_exact_thresh:14,best_f1:14,best_f1_thresh:14,best_span:14,between:[14,23,26],bi_attent:19,bia:14,bias_hidden_dim:14,biattent:19,bidaf:[7,14,19,28,35,36,37,39],bidaf_no_answ:[14,37],bidirect:[14,16,17,23,24,28,33],bigger:23,bilinear:19,bilinearseqattn:19,bilm:23,bilstm:23,bin:8,binari:[21,23,30],bind_nsml:8,birect:28,blob:[19,20,21,22,23,25],block:[14,21],block_orthogon:21,bojanowski:33,bool:[19,21,22,23],bord:33,bos:23,bos_token:25,both:23,both_exist:8,bound:15,boundari:23,bpe:30,bpetoken:27,bpte:27,bradburi:33,broadcast:23,build:[8,23],build_vocab:23,build_with_pretrained_fil:23,built:18,c2q:19,cach:23,cache_nam:27,cache_path:3,cache_token_count:3,cachepath:3,caim:33,calcul:[14,16,17],call:[2,13,14,15,19,20,21,22,23,24,26],can:[21,23,24,30],cannot:[21,27],captur:[14,26],car:[14,26],cardin:23,care:[13,14,15,19,20,21,22,24,26],carri:23,categori:[0,30],cconj:23,cell:[14,19,21,23],cell_siz:[21,23],chang:33,char_embed:24,char_index:25,char_typ:23,charact:[23,24,25,27,30],charcnn:[23,24,30],charembed:[23,24],charg:23,charindex:[23,25],chartoken:[23,25,27,30],chartokenmak:23,check:[3,7,19,23],checkpoint:8,checkpoint_dir:8,chen:33,child:2,cho:23,choos:15,chosung:23,christoph:33,chunk:21,claf:34,claf_cach:3,claim:23,clark:33,class_data:[5,6],class_idx2text:16,class_idx:[16,17],class_index:4,class_kei:[5,6],class_text:16,classif:[4,5,6,12,16,17,23,33],classifi:[16,17],classmethod:[9,23],claus:38,clip:[8,21,23],clova:31,cls_token:[3,5,6,23],cls_util:13,cnn:24,co_attent:19,coattent:19,code:[5,6,14,18,19,21,22,23,25,30],coeffici:16,col_idx:15,cola:[5,28,34],cola_bert:34,cola_bert_bas:[],cola_roberta:34,cola_roberta_bas:[],colabertread:5,colaread:5,collat:[3,4],collate_fn:4,collect:[23,28,34],column:[5,15,38],column_attent:15,column_emb:15,column_mask:15,column_maxlen:15,column_name_mask:15,com:[18,19,20,21,22,23,25],combin:[9,14,28,30,33],common:[8,27],common_attent:21,common_set:8,compat:[4,25],complex:23,compon:[0,9],compos:23,composition:29,comprehens:[9,14,26,31,33,37],comput:[12,13,14,15,19,20,21,22,23,24,26],compute_exact:12,compute_f1:12,concat_start_and_end_zero_pad:15,concaten:[21,23,26,30],concern:28,concret:[2,5],cond:[15,38],cond_op:15,cond_value_logit:15,condit:[15,23],conds_column_loss_alpha:15,conds_op_count:15,conds_val_po:15,condscolpredictor:15,condsnumpredictor:15,condsoppredictor:15,condspredictor:15,condsvaluepoint:15,config:[0,5,6,8,9,13,23,24,27,30,31,32],config_dict:5,config_path:9,confus:[16,17],conj:23,conll2003:[5,6],conll2003bertread:[5,6],conll:28,connect:[21,23],consid:14,consist:[3,5,14,15,16,17,21,23,25,28,30,37],constrain:14,constraint:29,constructor:2,contain:[21,23,28],content:[28,31,32],context:[5,6,9,14,15,19,26],context_emb:[14,19,26],context_mask:[14,19],context_max_length:5,context_maxlen:4,context_param:26,context_strid:[5,6],contextu:[14,23,24,29,33],contextual_rnn_num_lay:14,continu:23,contract:[23,27],contradict:5,control:8,conv:[0,14,18],convert:[3,8,16,23],convert_cache_path:3,convert_config2dict:1,convert_position_to_decoder_input:15,convert_to_dataset:5,convolut:[14,20,23,28,30,33],copi:23,copyright:23,corpu:23,corr:34,correct:[21,23],correspond:[3,28,37],cos:21,count:[8,15,23,24],count_lin:12,counter:[8,23,29],cove:[23,24,29,30],cove_embed:24,cove_typ:23,coveembed:[23,24],covetokenmak:23,cpu:[3,39],creat:[1,2,8,10,11],create_token_embedd:2,create_tokenizer_with_regex:27,creation:2,crowd:[28,38],crowdwork:[28,37],cuda:[3,21],cuda_devic:23,cuda_device_id:[2,3,4,8],cudnn:21,current:23,curv:12,custom:[21,26],d_a:16,damag:23,danqi:33,dasigi:33,data:[0,1,8,14,15,16,17,23,25,31,32],data_handl:3,data_id:4,data_idx:[4,14,16,17],data_index:4,data_load:[2,8],data_read:[2,3,4,5,23],data_reader_config:3,data_typ:[3,5],data_uid:12,databas:[28,38],datahandl:3,dataload:[2,8],dataloaderfactori:2,dataread:[2,5,6,8],datareaderfactori:2,dataserv:29,dataset:[0,2,3,5,8,12,13,14,23,31,33,35,36,37,38],dataset_obj:5,datasetbas:4,date:23,david:33,dawn:33,db_path:[5,7,12],deal:[2,23],decai:8,decode_point:15,decode_then_output:15,decoder_hidden:15,decoder_input:15,decompos:23,decompose_ko:27,decor:[0,32],decreas:21,deep:[14,16,17,20,22,23,24,28,29,33],default_oov_index:23,default_oov_token:23,default_pad_index:23,default_pad_token:23,defaultdict:23,defin:[5,6,8,13,14,15,19,20,21,22,23,24,26,30],delete_unselect:1,deng:33,dep:25,depend:[23,25,30],depsepconv:20,depth:[14,22],depthwis:[14,20],depthwise_separable_conv:20,deriv:2,descript:30,design:[1,23,30],det:23,detail:[23,24,38],detector:[14,35,36,37],dev:[5,6,35,36,37],develop:[28,38],devic:3,devlin:33,dict:[14,16,17,23],dict_data:1,dictionari:[3,5,12,14,15,16,17,23,26],differ:[23,27],dim:[3,22,23],dim_0:22,dim_:22,dim_n:22,dimems:19,dimens:[3,14,15,16,19,20,21,22,23,24],dir_path:[10,11],direct:[21,23],directori:[8,39],display_unit:8,distribut:[23,29],dnn:34,do_layer_norm:[22,23,24],do_token:25,doc:8,docqa:[14,28,35,36,37,39],docqa_attent:19,docqa_no_answ:[14,37],docqaattent:19,document:[10,11,14,23],documentqa:19,doe:[23,27],dohan:33,domain:[9,14,28,33],don:[19,33],done:[2,27],dongjun:3,drop:21,dropout:[14,15,16,17,19,21,22,23,24,30],dropout_prob:21,drqa:[9,14,19,28,37,39],dto:4,due:[21,27],dump:[3,23],dynam:[19,23],each:[5,14,19,21,22,23,26,30,37],eafc28abdfadfa0732f03a0fc65805c5bfb2ffe7:20,earli:8,early_stopping_threshold:8,effect:[14,28,33],effici:[21,23],either:[2,23,30],elapsed_tim:8,element:[19,21,23],elmo:[23,24,25,29,30,37,39],elmo_2x4096_512_2048cnn_2xhighway_opt:24,elmo_2x4096_512_2048cnn_2xhighway_weight:24,elmo_embed:24,elmo_index:25,elmo_represent:23,elmo_typ:23,elmoembed:[23,24],elmoindex:25,elmolstm:23,elmotokenmak:23,ema:8,emb:[14,15,16,17],embed:[0,14,16,17,19,21,23,26,28,30],embed_dim:[14,15,19,21,24,30],embed_typ:24,embedd:26,embedded_valu:30,embedding_config:23,embedding_dim:23,embedding_fn:23,embedding_summari:8,encod:[0,3,14,18,19,23,24,27],encode_column:15,encoded_column:15,encoded_quest:15,encoded_used_column:15,encoderblock:14,encoding_rnn_dropout:16,encoding_rnn_hidden_dim:16,encoding_rnn_num_lay:16,encount:24,end:[4,14,23,25],end_acc:14,end_logit:14,end_of_sentence_charact:25,end_of_word_charact:25,end_token:[23,25,30],eng:2,english:30,enrich:[29,33],ensur:21,entail:5,entiti:[23,25,28],eos:23,eos_token:25,epoch:8,eps:22,eql:15,equal:14,estion:28,eval:8,eval_and_save_step_count:8,evalu:[1,8,12,13,14,15,16,17,23,28,34],evaluate_inference_lat:8,event:23,everi:[8,13,14,15,19,20,21,22,23,24,26,28],exact:[2,23,25],exact_match:[14,23,26,30],exact_match_index:25,exact_match_scor:12,exact_match_typ:23,exact_raw:12,exact_scor:12,exactli:[23,30],exactmatchindex:25,exactmatchtokenmak:23,exampl:[3,8,13,14,15,16,17,23,30,39],except:[1,23],except_kei:26,exclusive_token:26,execut:38,exist:[25,39],expect:[12,21,22,23,30],expend:23,experi:[8,9],exponenti:8,exponential_moving_averag:[2,8],express:[21,23],extra:[12,27],extract:24,f1_raw:12,f1_score:12,f_align:[14,26],fac:23,facebookresearch:19,factori:[0,1],fals:[1,3,5,6,8,14,19,21,22,23,24,25,26,30],farhadi:33,faster:20,fasttext:29,featlabelpadcol:3,featru:30,featur:[3,4,8,13,14,15,16,17,18,22,23,24,25,26,30],feature_count:24,feature_name1:14,feature_name2:14,feature_typ:23,featuretokenmak:23,feed:[14,22],feedforward:14,figur:19,file:[5,6,12,23,24],file_path:[3,5,6,13,14,16,17],filter:[20,24],filter_text:5,filter_used_column:15,final_st:21,find_all_best_thresh:12,find_best_thresh:12,fine:[23,30,34],finetun:[23,24],first:[21,25],fisch:33,fit:[23,29],fix:[21,23,24,30],flag:[3,8,9],flatten:[0,27],floattensor:21,flow:[14,19,28,33],fname:12,focu:39,focus:8,follow:23,form:[23,27,30,38],format:[3,23],former:[13,14,15,19,20,21,22,24,26],forward:[13,14,15,16,17,19,20,21,22,23,24,26],forward_rnn_with_pack:18,framework:[31,33],free:23,frequenc:[10,11,24],frequent:[23,24,30],frequent_count:23,frequent_tun:24,frequent_word:[23,30],frequent_word_embed:24,frequent_word_typ:23,frequenttuningwordembed:[23,24],frequentwordtokenmak:23,frobeniu:16,from:[2,3,4,8,10,11,14,15,18,19,21,22,23,24,25,28,30,33,37],from_http:3,from_param:23,from_path:3,from_text:23,fune:34,furnish:23,gain:21,gamma:22,gardner:33,gate:21,gener:[1,15,28,30,33,34],generate_queri:15,get:[1,2,14,16,23,24],get_activation_fn:18,get_all_token:23,get_bert_token:4,get_best_span:14,get_class_text_with_idx:4,get_closest:[10,11],get_coditions_value_posit:5,get_column_length:15,get_context:4,get_displai:8,get_dropout_mask:21,get_embed_dim:26,get_ground_truth:4,get_id:4,get_index:23,get_input_argu:1,get_is_head_of_word:3,get_mask_from_token:18,get_output_dim:[23,24],get_predict:4,get_qid:4,get_qid_index:4,get_raw_scor:12,get_sequence_a:3,get_session_nam:8,get_sorted_path:8,get_sorted_seq_config:18,get_table_id:4,get_tag_dict:13,get_tag_text_with_idx:4,get_tag_texts_with_idx:4,get_text_span:4,get_text_with_index:4,get_token:[12,23],get_token_dim:3,get_token_typ:3,get_tokenized_quest:4,get_user_input:0,get_vocab_s:24,github:[18,19,20,21,22,23,25],given:[19,21,23,24,27],global:[14,28,29,33],global_step:8,glove:[23,24,29,30],glove_pretrained_path:24,glue:[4,28,31],go_forward:21,googlenew:29,gpe:23,gpu:39,grad_max_norm:8,gradient:[8,23,24],gradient_accumulation_step:8,gram:24,grant:23,graph_summari:8,grave:33,ground:[5,6,21,23],ground_truth:12,gru:[19,23,33],guillaum:33,hajishirzi:33,handl:23,handler:23,hangul:23,hangul_lett:23,hangulpi:23,hannaneh:33,has:[3,14,21,23,30],has_approxim:23,has_batchim:23,has_jongsung:23,hasans_exact:14,hasans_f1:14,have:[2,5,6,23,24],haven:27,hdf5:[23,24,29],head:[3,14,16,19,34],hello:[3,23,30],help:[14,21],helper:[4,5,14,16,23],here:25,herebi:23,hidden:[16,19,21,22,23,34],hidden_s:[14,21,22,23],hidden_st:[21,23],higher:30,highlight:15,highwai:[22,23],histogram:8,histogram_na_prob:12,histogram_summari:8,histori:[28,35],historyqa:[28,31],hold:1,holder:23,hook:[13,14,15,19,20,21,22,24,26],hot:24,how:[3,23,27],howev:21,html:8,http:[5,8,14,15,16,17,18,19,20,21,22,23,24,25],huggingfac:20,hyperparamet:1,hyunwoo:23,ident:[14,19,26],idf:[10,11],ids:[23,25],idx:[5,6,16,17],ignor:[5,6,13,14,15,17,19,20,21,22,23,24,26],ignore_tag_idx:[5,6,17],ili:23,imag:[8,22],image_dir:12,image_summari:8,implement:[2,14,15,16,17,21,23],impli:23,includ:[2,23,25],independ:[14,21,23,28],index:[0,4,8,10,11,14,15,16,17,23,24,26,30,31],index_fnam:[10,11],index_select:21,index_to_token:23,index_token:25,indexed_featur:23,indexer_config:23,indic:[21,23,30],individu:[25,26],infer:[8,13,14,16,17,39],infer_ev:8,inferec:8,inference_lat:8,inform:[29,33],init:[10,11,23],init_iter:4,init_model:[10,11],initi:[18,19,21,23,24],initial_scalar_paramet:22,initial_st:21,input:[1,3,5,6,13,14,15,16,17,19,20,21,22,23,24,26,30],input_argu:1,input_argv:1,input_s:[19,20,21,22,23],input_to_model:8,input_typ:[3,5,6],insert:25,insert_char_end:[25,30],insert_char_start:[25,30],insert_end:25,insert_start:25,instanc:[13,14,15,19,20,21,22,24,26],instanti:1,instead:[13,14,15,19,20,21,22,23,24,26],intent_classif:9,interact:8,interfac:[2,28,38],intern:23,intersect:23,intj:23,invers:[10,11,23,24],iob:3,irregular:23,is_all_hangul:23,is_all_vocab_use_pretrain:23,is_dict:[13,14,16,17],is_hangul:23,is_head_of_word:3,is_lazi:3,is_readi:13,is_test:[1,5,6],iter:[2,8],its:[3,23,30],itself:14,iyyer:33,jacob:33,jamo_ko:30,jason:33,jean:33,jia:33,jian:33,joel:33,jongsung:23,joongsung:23,josa:23,josa_eg:23,josa_el:23,josa_en:23,josa_gwa:23,josa_ida:23,josa_ro:23,joseon:[28,35],joulin:33,json:[5,6,12,23,24,34,35,36,37,38,39],just:[23,30],kai:33,kei:[5,6,14,15,16,17,19,23],kembhavi:33,kenton:33,kernel:[14,20,24],kernel_s:[14,20,24,30],kernel_size_in_embed:14,kernel_size_in_model:14,key_mask:19,kim:33,kind:23,klein:33,know:33,knowledge_bas:9,konstantin:33,kor:2,korean:[23,30],korquad:[28,31],kristina:33,kwarg:[1,3,4,5,6,8,10,11,14,15,16,17,19,21,22,23,24,25,26,27],l388:21,l45:20,label:[3,4,5,6,12,14,15,16,17],label_img:8,label_kei:5,label_name1:14,label_name2:14,lang:2,lang_cod:[5,6,14],languag:[5,6,9,14,15,16,17,23,24,28,30,31,33,34,38],larg:[28,34,37,38],last_dim_masked_softmax:18,latenc:[8,39],latter:[13,14,15,19,20,21,22,24,26],law:23,layer:[0,14,15,16,17,18,19,21,23,24,34],layer_dropout:[14,22],layernorm:[14,22],lazi:23,lazy_evalu:4,lazy_index:23,learn:[0,15,20,22,23,24,28,29,31,32,33],learning_rate_schedul:[2,8],least:22,lee:33,lemma:[23,25,30],lenght:23,length:[3,14,21,23],less:14,lesser:24,letter:23,level:[17,23,30],liabil:23,liabl:23,liang:33,like:[14,16,17,30],limit:23,linear:[14,19,21,24],linear_dim:[14,19],linear_key_dim:19,linear_value_dim:19,linearseqattn:19,linguist:[23,25,29,30],linguistic_index:25,linguistic_typ:23,linguisticindex:25,linguistictokenmak:23,list:[3,8,21,22,23,24,27,29,30],list_of_dict:3,liu:33,llo:[3,23],load:[3,8,9,10,11,23],load_data:5,load_from_config:9,load_from_json:1,load_model_checkpoint:8,load_optimizer_checkpoint:8,load_set:8,load_spacy_model_for_token:27,load_vocab:8,load_weight:23,loc:23,local:[14,28,33],locat:28,log:[8,10,11,14,16,17],log_dir:[8,13],logger:8,logic:38,logit:[14,16],longtensor:[21,23],look:[24,26],lopyrev:33,loss:[14,16,17],lower:[12,25],lowercas:[23,25,30],lr_schedul:8,lstm:[21,23],lstm_cell_with_project:[21,23],lstmcellwithproject:[21,23],luke:33,luong:33,machin:[0,1,3,8,14,23,24,28,30,32,33,36],machine_config:9,machine_read:9,macro:[16,17],macro_f1:[12,16,17],macro_precis:[12,16,17],macro_recal:[12,16,17],magnitud:[21,23],main:12,main_ev:12,maintain:[8,23],make:[3,9,14,16,17,21,23,27],make_all_token:2,make_batch:3,make_bert_input:3,make_bert_token_typ:3,make_data_load:2,make_data_read:5,make_eval_dict:12,make_metr:[13,14,15,16,17],make_modul:9,make_precision_recall_ev:12,make_predict:[13,14,15,16,17],make_qid_to_has_an:12,make_split_regex_express:27,make_task_by_read:5,make_token:2,make_token_count:23,maker:23,mani:[21,23],map:[12,14,15,25],mark:[23,33],marker:23,mask:[14,15,18,19,21,22,23],masked_log_softmax:18,masked_softmax:18,masked_zero:18,master:[19,21,22,23,25],match:[19,21,23,25,30],matrix:[16,17,18,19,23,24],matt:33,matthew:[33,34],matthews_corr:5,max:[14,15],max_eval_exampl:8,max_lat:8,max_len:[3,21],max_length:21,max_norm:24,max_question_length:[5,6],max_seq_length:[3,5,6],max_timestep:21,max_to_keep:8,max_to_keep_cach:27,max_vocab_s:[23,30],max_word_length:25,maximum:21,maximun:[8,23],maxpool:30,mccann:[23,29,33],mean:[16,17],mecab:[5,6],mecab_ko:[27,30],mechan:[14,15],memori:[21,23],memory_cell_clip_valu:[21,23],merchant:23,merg:23,merge_ev:12,merge_token:15,messag:8,meta:1,metadata:8,method:[2,23],metric:[0,8,13,14,16,17,31,32,34,39],metric_fn:12,metric_kei:[5,6,8],metric_max_over_ground_truth:12,michael:33,might:28,mikolov:33,min:15,min_count:23,ming:33,minh:33,mini:[3,14,15,16,17,24],minim:[3,23],minjoon:33,mixin:[14,15,16,17],mixtur:22,mixture_s:22,mlp:14,mnli:[5,28,34],mnlibertread:5,mode:[0,1,8,14,16,17],model:[0,1,2,4,5,6,7,8,10,11,12,19,21,23,24,25,30,31,32,33,34,35,36,37,38,39],model_checkpoint:8,model_dim:[14,15,19],model_nam:2,model_pretrained_path:24,model_pytorch:20,modelbas:[13,16,17],modelfactori:2,modeling_rnn_num_lay:14,modelwithouttokenembedd:[13,14,16,17],modelwithtokenembedd:[13,14,15,16],modifi:[23,24],modul:[30,31,32],mohammad:33,mohit:33,monei:23,more:24,most:[14,23,30],move:8,mrpc:[5,28,34],mrpc_bert:34,mrpc_bert_bas:[],mrpc_roberta:34,mrpc_roberta_bas:[],mrpcbertread:5,msgpack:3,mtlstm:23,much:27,multi:[4,5,14,19,33],multi_head_attent:19,multi_task:34,multiheadattent:19,multilingu:36,multipl:21,multitaskbertdataset:4,multitaskbertread:5,must:[8,22,23],na_prob:12,na_prob_thresh:12,naiv:3,naive_token:3,name:[1,5,6,7,12,14,15,16,17,18,23,25,27,28,30],namespac:[1,9],nativ:21,natur:[9,15,21,28,33,34,38],nbest:14,ndim:21,need:[3,8,13,14,15,19,20,21,22,23,24,26,30],neg:15,negative300:29,nelson:33,ner:[23,25,28,30],nest:1,nestednamespac:[1,8,9],network:[14,15,19,21,22,23,28,33],neumann:33,neural:[21,23,24,28,30,33],neutral:5,new_ev:12,new_mask:23,ngram:[10,11],nguyen:33,nip:24,nl2sql:[15,38],nli:5,nlp:[9,27],nltk_en:30,nlu:9,nmt:30,no_answ:14,no_asnw:14,noans_exact:14,noans_f1:14,noanswer:14,non:[14,23,26],none:[1,2,3,4,5,6,8,12,13,14,15,16,17,19,20,21,22,23,24,25],noninfring:23,norm:[8,16,24],norm_typ:24,normal:[19,22,23,24],normalize_answ:12,normalized_shap:22,norouzi:33,norp:23,not_entail:5,note:[8,21,23,24,30,35,36,37,39],nothangulexcept:23,notic:[23,27],notletterexcept:23,notwordexcept:23,noun:23,now:14,nsml_for_intern:1,nswere:28,num:23,num_attention_head:16,num_class:[4,16],num_conv_block:14,num_conv_block_in_embed:14,num_conv_block_in_model:14,num_embedding_encoder_block:14,num_encoder_block:14,num_epoch:8,num_filt:[20,24,30],num_head:[14,19],num_head_in_embed:14,num_head_in_model:14,num_lay:[22,23],num_modeling_encoder_block:14,num_output_represent:23,num_tag:[4,17],num_timestep:21,num_true_po:12,number:[5,6,8,10,11,14,15,16,17,19,20,21,22,23,24],o_i:19,obj:[1,3],object:[1,2,3,5,6,7,8,9,10,11,14,15,16,17,23,25,27],obtain:23,occur:23,offici:[12,14,15,34,37],onc:23,one:[1,13,14,15,19,20,21,22,23,24,26,30],one_hot:24,onehotencod:24,ones:23,onli:[1,3,14,23,26,30],ontonot:23,oov_token:23,oov_valu:23,op_count:15,op_dict:8,open:[9,14,28,33],open_qa:9,openai:20,opennmt:33,openqa:9,oper:[18,30],optim:[2,8,16,17,21,28],optimis:14,optimize_config:1,optimizerfactori:2,option:[2,8,14,19,21,23,24,29],options_fil:[23,24],order:[12,21],ordin:23,org:[5,8,14,15,16,17,19,20,21,22,23,24],organ:28,orienti:39,origin:[14,19,21,23,30],original_tensor:21,orthogon:21,other:[8,23,27,30,33],otherwis:[3,23],our:28,out:[21,23],out_imag:12,out_image_dir:12,output:[14,16,17,19,21,23,24,26],output_accumul:21,output_dict:[14,15,16,17],over:[19,21],overal:8,overrid:[16,17],overridden:[2,13,14,15,19,20,21,22,24,26],overwrit:1,own:23,oyvind:33,p_i:[14,23,26,30],packag:[31,32],pad:[3,17,23,24],pad_index:18,pad_token:23,pad_valu:3,padcol:3,padding_charact:25,padding_count:15,padding_idx:24,padding_token:3,pair:[5,6,27],paper:[16,19,23,24,38],paragraph:[14,28,33],param:[2,13,23,24,26],paramet:[8,14,21,22,23,24,26,34],parameteris:22,parent_token:2,pars:[10,11,15,23,38],parse_arg:[1,12],parser:[1,25,30],part:23,particl:23,particular:[21,23,27],pass:[13,14,15,19,20,21,22,23,24,26,27,30],pass_text:27,passag:[14,28,37],passtext:27,past:21,path:[3,5,6,8,23,24,30],pattern:[1,2],pdf:[19,24],pearson:34,pearson_spearman_corr:5,penalization_coeffici:16,penalti:16,per:21,percent:23,perci:33,perform:[13,14,15,19,20,21,22,24,26],permiss:23,permit:23,permuation_index:21,person:[23,28],peter:[23,33],phrase:[23,28,29],pickl:3,pipelin:8,pkl:3,place:24,platform:33,plot:12,plot_pr_curv:12,point:8,pointer:15,pointwis:[14,20,22],pointwise_conv:20,pointwiseconv:20,portion:23,pos:23,pos_tag:25,pose:[28,37],posit:[3,14,15,21],position_encod:14,positionalencod:21,positionwis:22,positionwisefeedforward:22,posixpath:3,possibl:21,post:27,postag:23,pradeep:33,pranav:33,pre:[8,14,16,17,23,24,28,30,33],precis:[12,16,17],pred:12,pred_span_end:14,pred_span_start:14,predefine_vocab:23,predict:[1,5,6,7,8,12,13,14,15,16,17],predict_rnn_num_lay:14,predict_text:14,predict_valu:8,prefix:[3,12],preload:8,prepend:23,preprocess:14,preprocess_rnn_num_lay:14,present:[14,15,16,17],pretrain:[23,24,28,30,31],pretrained_al:23,pretrained_intersect:23,pretrained_model_nam:[14,16,17,24],pretrained_path:[23,24,30],pretrained_token:23,pretrained_vector:3,pretty_json_dump:1,previous:25,print:[8,13,14,15,16,17],print_exampl:[13,14,15,16,17],probabl:[12,14,16,17,21,22,23,24],problem:2,process:[8,30,33],produc:3,product:23,program:2,project:[21,23,24],project_dim:24,pron:23,properti:[4,13,23,25],propn:23,provid:[12,23],pth:29,publish:23,punct:23,punctuat:[12,23],puncut:27,punkt:[27,30],purpos:23,pycm_obj:[12,13,16,17],pytorch:[8,18,20,21],q2c:19,q_j:[14,26],qanet:[14,28,33,37,39],qatokenembedd:14,qid_list:12,qid_to_has_an:12,qnli:[5,28,34],qnli_bert:34,qnli_bert_bas:[],qnli_roberta:34,qnli_roberta_bas:[],qnlibertread:5,qqp:[28,34],qqp_bert:34,qqp_bert_bas:[],qqp_roberta:34,qqp_roberta_bas:[],qqpbertread:5,quantiti:[23,28],queri:[10,11,14,15,19,26,28,33],query_align:26,query_mask:19,query_param:26,query_text:25,query_token:25,question:[5,6,9,12,14,15,19,23,26,28,30,33,35,36,37],question_emb:[15,19],question_mask:[15,19],question_maxlen:4,quoc:33,quora:5,quotat:27,rajpurkar:33,rate:8,rather:2,raw_data:8,raw_exampl:8,raw_featur:[8,14,16,23],raw_to_tensor_fn:[8,23],raw_tok_str:15,rctokenembedd:[14,26],read:[3,5,8,9,14,26,31,33,36,37],read_embed:3,read_one_exampl:[5,6],reader:[0,2,3,7,14,19],reader_nam:2,reading_comprehens:[0,13],reading_comprehension_embedd:26,readingcomprehens:14,realli:27,recal:[12,16,17],recip:[13,14,15,19,20,21,22,24,26],recogn:5,recognit:[22,23,25,28],recurr:[14,15,21,23],recurrent_dropout_prob:[21,23],refer:31,regard:24,regist:[2,7,13,14,15,19,20,21,22,24,26],registri:[1,2],regress:[4,5],regressionbertdataset:4,regressionbertread:5,reinforc:[15,28,33],rel:21,relat:[28,38],relationship:23,releas:28,relu:[22,24,30],remain:23,remov:[12,23],remove_cls_sep_token:24,remove_non:1,remove_sentence_boundari:23,renorm:24,repeat:14,replace_masked_valu:18,report:[31,39],repres:[4,14,16,17,21,23,30],represent:[23,24,29,33],requir:[7,21,22,23],required_field:7,requires_grad:23,reset_paramet:21,residu:[14,22],residual_embed:23,residualconnect:22,resiz:23,resourc:[2,28,34],respect:[21,23],respons:30,restoration_indic:21,restrict:[1,23],result:[5,6,10,11,14,16,21],retain:21,retriev:[0,9,10],return_path:3,rho:23,richard:33,right:23,rnn:[14,15,16,21,23],rnn_dim:[14,19],rnn_modul:[15,18],rnn_num_lay:15,roberta:[27,28,30,34,37],roberta_bas:37,roberta_larg:37,robertaforqa:14,robertaforseqcl:16,robin:33,robustli:28,root:3,rqa:24,rte:[5,28,34],rte_bert:34,rte_bert_bas:[],rte_roberta:34,rte_roberta_bas:[],rtebertread:5,rui:33,run:[8,13,14,15,19,20,21,22,23,24,26],run_precision_recall_analysi:12,rush:33,ryan:23,s_k:22,salesforc:[23,30],same:[3,14,21,22,23],sampl:39,sanity_check_iob:3,save:[8,10,11],save_checkpoint:8,save_param:8,scalar:[8,14,16,17,22,23],scalar_mix:22,scalar_summari:8,scalarmix:[22,23,24],scale:[21,24],scale_grad_by_freq:24,schedul:8,scheme:[21,23],schmitz:33,sconj:23,score:[5,8,12,14,26],score_:14,script:12,search_docu:9,second:21,section:23,see:[23,24,27],seed:1,segment:[28,37],segment_id:3,sel:[15,38],select:[23,38],select_column:15,self:[14,16,19,28,33],self_attn:19,selfattent:14,sell:23,selpredictor:15,semant:[5,15,33,38],semantic_pars:[0,13],send_message_to_slack:8,senellart:33,sent:[27,30],sent_token:[27,30],sentenc:[16,17,23,27,28,30,33],sentence_begin_token:23,sentence_end_token:23,senttoken:[27,30],seo:33,sep:[3,5,6,23],sep_token:[3,5,6,23],separ:[14,20,21,23],seper:26,seq2sql:[28,33],seq_attent:19,seq_cl:[4,5,6],seq_config:18,seqattnmatch:19,seqclsbertdataset:4,seqclsbertread:[5,6],seqclsdataset:4,seqclsread:5,sequenc:[4,5,6,13,16,17,19,21,23,25],sequence_a:[3,5,6],sequence_b:[3,5,6],sequence_classif:[0,13],sequence_emb:[16,17],sequence_embed_dim:16,sequence_length:[21,23],sequence_max_length:[5,6],sequence_maxlen:4,sequence_token:3,sequenceclassif:16,servic:39,set:[5,6,8,26,28,35,36,37],set_batch_s:1,set_eval_inference_latency_mod:8,set_eval_mod:8,set_global_se:1,set_gpu_env:1,set_logging_config:0,set_model_base_properti:8,set_predict_mod:8,set_train:8,set_train_mod:8,set_vocab:[23,25],set_warmup_step:2,sever:30,shall:23,shape:[21,22,23],share:28,should:[13,14,15,19,20,21,22,23,24,26],shuffl:2,silent:[13,14,15,19,20,21,22,24,26],similar:[5,10,11,14,19,26],simpl:[1,14,23,28,30,33],simpli:21,sin:21,sinc:[13,14,15,19,20,21,22,24,26],singl:[5,6,17,30],singleton:1,size:[14,19,20,21,22,23,24,34],skip:3,skip_kei:3,slot:[15,17],slot_fil:9,slower:21,small:27,socher:33,soft:[14,26],softmax:[19,22],softwar:[1,23],some:[18,21,27],song:33,sort:[8,21],sort_batch_by_length:21,sorted_sequence_length:21,sorted_tensor:21,sourc:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,38],space:23,space_al:30,spaci:23,spacy_en:[27,30],span:[14,28,35,36,37],span_acc:14,span_end:14,span_end_logit:14,span_end_prob:14,span_start:14,span_start_logit:14,span_start_prob:14,spars:[23,24,30],sparse_featur:24,sparsefeatur:[23,24],sparsetoembed:24,spearman:34,special:[3,15,25],specifi:[2,21,23],split:[3,21,27],split_regex:27,split_siz:21,split_with_regex:[27,30],sql:15,sql_data:12,sql_path:5,sqlnet:[15,28,33,38],squad:[4,5,6,7,12,14,23,27,28,31,33,36],squad_v1_offici:12,squad_v2_offici:12,squadbertdataset:4,squadbertread:[5,6],squaddataset:4,squadread:5,squadv1:14,squadv1forbert:14,squadv2:14,srl:23,sst:[5,28,34],sst_bert:34,sst_bert_bas:[],sst_roberta:34,sst_roberta_bas:[],sstbertread:5,stabl:8,stack:[21,23],standard:23,stanford:[28,36,37],start:[4,14,23,25],start_acc:14,start_logit:14,start_token:[23,25,30],state:[21,23],state_projection_clip_valu:[21,23],statist:12,step:8,step_count:8,stochast:[14,22],stop:8,str:23,stream:23,string:[14,23],structur:[15,16,28,33],structured_self_attent:16,structuredselfattent:16,stsb_bert:34,stsb_bert_bas:[],stsb_roberta:34,stsb_roberta_bas:[],stsbbertread:5,style:28,sub:[27,30],sub_layer_fn:22,subclass:[7,13,14,15,19,20,21,22,24,26],subject:23,sublicens:23,submodul:[10,32],subpackag:32,substanti:23,subword:[5,6,24,27,29,30,33],subwordtoken:[25,27,30],suffix:23,sum:[14,15,19,22,26],summari:[8,31,39],support:23,sym:23,synthet:8,system:[9,28,34],tabl:28,table_id:[5,7,15],table_path:5,tafjord:33,tag:[3,5,6,8,17,23,25,30],tag_accuraci:17,tag_idx:[4,17],tag_index:4,tag_kei:[5,6],tag_logit:17,tag_text:[3,13],tagged_sub_token_idx:17,take:[13,14,15,19,20,21,22,23,24,26,30],tanford:28,target:[16,17,23],task:[4,5,23,34],tensor2tensor:21,tensor:[3,4,8,14,18,20,21,22,23,24,26,30],tensor_for_mask:21,tensor_k:22,tensor_with_boundary_token:23,tensor_without_boundary_token:23,tensorboard:8,tensorflow:21,term:[10,11,21],termin:23,test:[2,27,34,37],text:[3,6,10,11,12,16,23,25,27,28,30,33,37],text_column:23,text_handl:23,text_span:6,text_to_tfidf:[10,11],texthandl:23,textual:5,tfidf:[10,11],tfidf_fnam:[10,11],than:[2,14,21,23,24],thang:33,thei:21,them:[13,14,15,19,20,21,22,24,26],theoret:[21,23],thi:[2,5,6,12,13,14,15,19,20,21,22,23,24,25,26,27,30],think:14,thought:23,three:[23,30],threshold:[8,14],threshold_index:[23,24],through:30,time:[23,28],timestep:[21,22,23],titl:[8,12],to_text:23,toekn_name2:14,togeth:[2,21],tok_cl:[5,6],tok_list:15,tokclsbertdataset:4,tokclsbertread:[5,6],token:[0,1,2,3,4,5,6,8,13,15,16,17,18,31,32,33],token_classif:[0,13],token_count:[3,23],token_embedd:[0,13,14,15,16,17,23],token_index:25,token_kei:8,token_mak:[2,13,14,16,17,23,26],token_maxlen:15,token_nam:[3,23,24,26,30],token_name1:[14,26],token_name2:26,token_to_index:23,token_typ:[3,16,17,23],tokenclassif:17,tokenembed:[23,24],tokenembedd:[13,15,26,30],tokenindex:[23,25],tokenized_quest:15,tokenizer_cl:2,tokenizer_config:2,tokenizer_nam:3,tokenmak:[2,23,26,30],tokenmakersfactori:2,toolkit:33,top:[10,11],torch:[4,8,13,14,15,18,19,20,21,22,23,24,26],tort:23,toutanova:33,train:[2,3,5,6,8,14,16,17,23,24,25,28,30,33,34,35,36,37],train_and_evalu:8,train_config:1,train_count:13,train_load:8,trainabl:[22,24,30],traincount:8,trainer:[1,8],transfer:23,transform:[14,16,17,19,20,23,24,28,33],translat:[23,24,29,30,33],transpos:3,treebank_en:[27,30],triviaqa:27,truth:[5,6],tsv:5,tune:[1,23,30],tupl:[21,23],two:[14,22],txt:[10,11,29,30],type:[1,5,18,21,23,24,27,30],typic:[22,23],unanswer:[12,28,33],uncas:[36,37],under:24,understand:[9,14,16,17,23,24,28,33,34],unidirect:16,union:23,uniqu:23,unit:[23,24,27,30],univers:23,unk:[23,27],unnorm:[14,16,17],unweight:[16,17],updat:23,upper:15,use:[5,6,8,14,21,23,30],use_as_embed:24,use_gpu:8,used:[1,2,16,17,21,23],useful:21,user:3,user_input:[14,16],uses:[2,23],using:[4,5,6,21,23,28,33],utf:3,util:[0,1,3,4,8,15,27],utter:9,vaild:5,valid:[2,3],valid_dataset:8,valid_load:8,valu:[5,8,14,15,16,17,18,19,21,23],variabl:8,varianc:21,variat:21,vector:[10,11,16,17,18,23,24,30,31,33],vehicl:[14,26],verb:23,verbos:8,verbose_step_count:8,version:[12,20],versu:15,via:30,victor:33,vincent:33,visual:30,voacb:23,vocab:[3,4,5,8,10,11,13,23,24,25,26,30],vocab_config:23,vocab_fnam:[10,11],vocab_to_cach:23,vocabdict:23,vocabulari:[23,25,30],vocaburari:[23,26],vowel:23,want:21,warn:8,warranti:23,wasn:23,webhook_url:8,wei:33,weight:[8,10,11,18,19,22,23,24,29],weight_fil:[23,24],weight_init:[14,19],weighted_sum:18,weston:33,what:[14,33],when:[14,16,17,22,23],whenev:24,where:[14,21,22,23,26,28,37,38],whether:[3,23,30],which:[21,23],white:23,whitespac:[3,12],whom:23,wiki:29,wikipedia:[14,28,33,36,37],wikisql:[4,5,12,15,28,31],wikisql_offici:12,wikisqldataset:4,wikisqlread:5,wikisqltokenembedd:15,winograd:5,wise:21,within:[13,14,15,19,20,21,22,24,26],without:[2,15,23,27,28,33],wmt:23,wmtlstm:29,wnli:[5,28,34],wnli_bert:34,wnli_bert_bas:[],wnli_roberta:34,wnli_roberta_bas:[],wnlibertread:5,word2vec:[29,30],word:[3,5,6,10,11,14,23,24,25,26,27,29,30,33],word_embed:[23,24],word_index:25,word_input:23,word_token:[3,10,11,27,30],word_typ:23,wordembed:[23,24],wordindex:[23,25],wordpiec:[27,30],wordtoken:[23,25,27,30],wordtokenmak:23,work:28,work_of_art:23,world:[23,30],would:21,wrapper:[8,23],write_confusion_matrix_to_csv:13,write_predict:[13,14,16,17],wx_i:19,x_i:19,x_mask:19,x_size:19,xception:20,xiaojun:33,xiong:33,y_j:19,y_mask:19,y_size:19,yoon:33,you:[3,19,21,23,33],yuntian:33,zero:[21,24],zettlemoy:33,zhang:33,zhao:33,zhong:33},titles:[\"claf package\",\"claf.config package\",\"claf.config.factory package\",\"claf.data package\",\"claf.data.dataset package\",\"claf.data.reader package\",\"claf.data.reader.bert package\",\"claf.decorator package\",\"claf.learn package\",\"claf.machine package\",\"claf.machine.components package\",\"claf.machine.components.retrieval package\",\"claf.metric package\",\"claf.model package\",\"claf.model.reading_comprehension package\",\"claf.model.semantic_parsing package\",\"claf.model.sequence_classification package\",\"claf.model.token_classification package\",\"claf.modules package\",\"claf.modules.attention package\",\"claf.modules.conv package\",\"claf.modules.encoder package\",\"claf.modules.layer package\",\"claf.tokens package\",\"claf.tokens.embedding package\",\"claf.tokens.indexer package\",\"claf.tokens.token_embedder package\",\"claf.tokens.tokenizer package\",\"Dataset and Model\",\"Pretrained Vector\",\"Tokens\",\"CLaF documentation\",\"claf\",\"References\",\"GLUE\",\"HistoryQA\",\"KorQuAD\",\"SQuAD\",\"WikiSQL\",\"Reading Comprehension\"],titleterms:{attent:19,bert:6,claf:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,31,32],classif:28,compon:[10,11],comprehens:[28,39],config:[1,2],content:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],conv:20,data:[3,4,5,6],dataset:[4,28],decor:7,dev:34,document:31,embed:24,encod:21,english:29,factori:2,glue:34,historyqa:35,index:25,indic:31,korean:29,korquad:36,layer:22,learn:8,machin:[9,10,11],maker:30,metric:12,model:[13,14,15,16,17,28],modul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],multi:28,packag:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],pars:28,plot:39,pretrain:29,read:[28,39],reader:[5,6],reading_comprehens:14,refer:33,regress:28,result:[34,35,36,37,38],retriev:11,semant:28,semantic_pars:15,sequenc:28,sequence_classif:16,set:34,squad:[37,39],submodul:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],subpackag:[0,1,3,5,9,10,13,18,23],tabl:31,task:28,token:[23,24,25,26,27,28,30],token_classif:17,token_embedd:26,vector:29,wikisql:38}})"
  },
  {
    "path": "docs/_build/html/summary/reading_comprehension.html",
    "content": "\n\n<!DOCTYPE html>\n<!--[if IE 8]><html class=\"no-js lt-ie9\" lang=\"en\" > <![endif]-->\n<!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\" > <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  \n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <title>Reading Comprehension &mdash; CLaF 0.2.0 documentation</title>\n  \n\n  \n  \n    <link rel=\"shortcut icon\" href=\"../_static/favicon.ico\"/>\n  \n  \n  \n\n  \n  <script type=\"text/javascript\" src=\"../_static/js/modernizr.min.js\"></script>\n  \n    \n      <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"../\" src=\"../_static/documentation_options.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/jquery.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/underscore.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/doctools.js\"></script>\n        <script type=\"text/javascript\" src=\"../_static/language_data.js\"></script>\n    \n    <script type=\"text/javascript\" src=\"../_static/js/theme.js\"></script>\n\n    \n\n  \n  <link rel=\"stylesheet\" href=\"../_static/css/theme.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/pygments.css\" type=\"text/css\" />\n  <link rel=\"stylesheet\" href=\"../_static/theme_overrides.css\" type=\"text/css\" />\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"References\" href=\"../references.html\" />\n    <link rel=\"prev\" title=\"WikiSQL\" href=\"../reports/wikisql.html\" /> \n</head>\n\n<body class=\"wy-body-for-nav\">\n\n   \n  <div class=\"wy-grid-for-nav\">\n\n    \n    <nav data-toggle=\"wy-nav-shift\" class=\"wy-nav-side\">\n      <div class=\"wy-side-scroll\">\n        <div class=\"wy-side-nav-search\">\n          \n\n          \n            <a href=\"../index.html\">\n          \n\n          \n            \n            <img src=\"../_static/logo.png\" class=\"logo\" alt=\"Logo\"/>\n          \n          </a>\n\n          \n            \n            \n              <div class=\"version\">\n                0.2.0\n              </div>\n            \n          \n\n          \n<div role=\"search\">\n  <form id=\"rtd-search-form\" class=\"wy-form\" action=\"../search.html\" method=\"get\">\n    <input type=\"text\" name=\"q\" placeholder=\"Search docs\" />\n    <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n    <input type=\"hidden\" name=\"area\" value=\"default\" />\n  </form>\n</div>\n\n          \n        </div>\n\n        <div class=\"wy-menu wy-menu-vertical\" data-spy=\"affix\" role=\"navigation\" aria-label=\"main navigation\">\n          \n            \n            \n              \n            \n            \n              <p class=\"caption\"><span class=\"caption-text\">Contents</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/dataset_and_model.html\">Dataset and Model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/pretrained_vector.html\">Pretrained Vector</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../contents/tokens.html\">Tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Package Reference</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.config.html\">config</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.data.html\">data</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.learn.html\">learn</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.metric.html\">metric</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.model.html\">model</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.modules.html\">modules</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../claf.tokens.html\">tokens</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Reports</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/glue.html\">GLUE</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/historyqa.html\">HistoryQA</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/korquad.html\">KorQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/squad.html\">SQuAD</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../reports/wikisql.html\">WikiSQL</a></li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Summary</span></p>\n<ul class=\"current\">\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">Reading Comprehension</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#squad-v1-1\">SQuAD v1.1</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"#plot\">Plot</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p class=\"caption\"><span class=\"caption-text\">Appendix</span></p>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../references.html\">References</a></li>\n</ul>\n\n            \n          \n        </div>\n      </div>\n    </nav>\n\n    <section data-toggle=\"wy-nav-shift\" class=\"wy-nav-content-wrap\">\n\n      \n      <nav class=\"wy-nav-top\" aria-label=\"top navigation\">\n        \n          <i data-toggle=\"wy-nav-top\" class=\"fa fa-bars\"></i>\n          <a href=\"../index.html\">CLaF</a>\n        \n      </nav>\n\n\n      <div class=\"wy-nav-content\">\n        \n        <div class=\"rst-content\">\n        \n          \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div role=\"navigation\" aria-label=\"breadcrumbs navigation\">\n\n  <ul class=\"wy-breadcrumbs\">\n    \n      <li><a href=\"../index.html\">Docs</a> &raquo;</li>\n        \n      <li>Reading Comprehension</li>\n    \n    \n      <li class=\"wy-breadcrumbs-aside\">\n        \n            \n            <a href=\"../_sources/summary/reading_comprehension.md.txt\" rel=\"nofollow\"> View page source</a>\n          \n        \n      </li>\n    \n  </ul>\n\n  \n  <hr/>\n</div>\n          <div role=\"main\" class=\"document\" itemscope=\"itemscope\" itemtype=\"http://schema.org/Article\">\n           <div itemprop=\"articleBody\">\n            \n  <div class=\"section\" id=\"reading-comprehension\">\n<h1>Reading Comprehension<a class=\"headerlink\" href=\"#reading-comprehension\" title=\"Permalink to this headline\">¶</a></h1>\n<p>Focus on Service orientied metrics (eg. 1-example inference latency)</p>\n<ul class=\"simple\">\n<li><p>Exists samples in <code class=\"docutils literal notranslate\"><span class=\"pre\">reports/summary/</span></code> directory</p></li>\n</ul>\n<div class=\"section\" id=\"squad-v1-1\">\n<h2>SQuAD v1.1<a class=\"headerlink\" href=\"#squad-v1-1\" title=\"Permalink to this headline\">¶</a></h2>\n<table border=\"1\" class=\"docutils\">\n<thead>\n<tr>\n<th>Model</th>\n<th>Inference Latency <br/>(1-example/ms)</th>\n<th>F1 (SQuAD)</th>\n<th>BaseConfig</th>\n<th>Note</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>BiDAF</strong></td>\n<td>142.644 <code>cpu</code> / 32.545 <code>gpu</code></td>\n<td>77.747</td>\n<td>squad/bidaf.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>BiDAF + ELMo</strong></td>\n<td>- <code>cpu</code> / - <code>gpu</code></td>\n<td>82.288</td>\n<td>squad/bidaf+elmo.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>DrQA</strong></td>\n<td>- <code>cpu</code> / - <code>gpu</code></td>\n<td>77.049</td>\n<td>squad/drqa.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>DocQA</strong></td>\n<td>- <code>cpu</code> / - <code>gpu</code></td>\n<td>80.635</td>\n<td>squad/docqa.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>DocQA + ELMo</strong></td>\n<td>- <code>cpu</code> / - <code>gpu</code></td>\n<td>84.372</td>\n<td>squad/docqa+elmo.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>QANet</strong></td>\n<td>- <code>cpu</code> / - <code>gpu</code></td>\n<td>79.800</td>\n<td>squad/qanet.json</td>\n<td>-</td>\n</tr>\n<tr>\n<td><strong>BERT</strong></td>\n<td>- <code>cpu</code> / - <code>gpu</code></td>\n<td>87.130</td>\n<td>squad/bert_base-_uncased.json</td>\n<td>-</td>\n</tr>\n</tbody>\n</table><div class=\"section\" id=\"plot\">\n<h3>Plot<a class=\"headerlink\" href=\"#plot\" title=\"Permalink to this headline\">¶</a></h3>\n<ul class=\"simple\">\n<li><p>Inference Latency (1-example)</p></li>\n</ul>\n<p><img alt=\"images\" src=\"../_images/inference_latency_chart-1000.png\" /></p>\n</div>\n</div>\n</div>\n\n\n           </div>\n           \n          </div>\n          <footer>\n  \n    <div class=\"rst-footer-buttons\" role=\"navigation\" aria-label=\"footer navigation\">\n      \n        <a href=\"../references.html\" class=\"btn btn-neutral float-right\" title=\"References\" accesskey=\"n\" rel=\"next\">Next <span class=\"fa fa-arrow-circle-right\"></span></a>\n      \n      \n        <a href=\"../reports/wikisql.html\" class=\"btn btn-neutral\" title=\"WikiSQL\" accesskey=\"p\" rel=\"prev\"><span class=\"fa fa-arrow-circle-left\"></span> Previous</a>\n      \n    </div>\n  \n\n  <hr/>\n\n  <div role=\"contentinfo\">\n    <p>\n        &copy; Copyright 2019, Dongjun Lee\n\n    </p>\n  </div>\n  Built with <a href=\"http://sphinx-doc.org/\">Sphinx</a> using a <a href=\"https://github.com/rtfd/sphinx_rtd_theme\">theme</a> provided by <a href=\"https://readthedocs.org\">Read the Docs</a>. \n\n</footer>\n\n        </div>\n      </div>\n\n    </section>\n\n  </div>\n  \n\n\n  <script type=\"text/javascript\">\n      jQuery(function () {\n          SphinxRtdTheme.Navigation.enable(true);\n      });\n  </script>\n\n  \n  \n    \n   \n\n</body>\n</html>"
  },
  {
    "path": "docs/_static/theme_overrides.css",
    "content": "/* override table width restrictions */\n@media screen and (min-width: 767px) {\n\n   .wy-table-responsive table td {\n      /* !important prevents the common CSS stylesheets from overriding\n         this as on RTD they are loaded after this stylesheet */\n      white-space: normal !important;\n   }\n\n   .wy-table-responsive {\n      overflow: visible !important;\n   }\n}\n"
  },
  {
    "path": "docs/_templates/modules.rst",
    "content": "{# The :autogenerated: tag is picked up by breadcrumbs.html to suppress \"Edit on Github\" link #}\n:autogenerated:\n\n{{ fullname }} module\n{% for item in range(7 + fullname|length) -%}={%- endfor %}\n\n.. currentmodule:: {{ fullname }}\n\n.. automodule:: {{ fullname }}\n    {% if members -%}\n    :members: {{ members|join(\", \") }}\n    :undoc-members:\n    :show-inheritance:\n    :member-order: bysource\n\n    Summary\n    -------\n\n    {%- if exceptions %}\n\n    Exceptions:\n\n    .. autosummary::\n        :nosignatures:\n{% for item in exceptions %}\n        {{ item }}\n{%- endfor %}\n    {%- endif %}\n\n    {%- if classes %}\n\n    Classes:\n\n    .. autosummary::\n        :nosignatures:\n{% for item in classes %}\n        {{ item }}\n{%- endfor %}\n    {%- endif %}\n\n    {%- if functions %}\n\n    Functions:\n\n    .. autosummary::\n        :nosignatures:\n{% for item in functions %}\n        {{ item }}\n{%- endfor %}\n    {%- endif %}\n{%- endif %}\n\n{% set data = get_members(typ='data', in_list='__all__') %}\n    {%- if data %}\n\n    Data:\n\n    .. autosummary::\n        :nosignatures:\n{% for item in data %}\n        {{ item }}\n{%- endfor %}\n    {%- endif %}\n\n{% set all_refs = get_members(in_list='__all__', include_imported=True, out_format='refs') %}\n{% if all_refs %}\n    ``__all__``: {{ all_refs|join(\", \") }}\n{%- endif %}\n\n\n{% if members %}\n    Reference\n    ---------\n\n{%- endif %}\n"
  },
  {
    "path": "docs/_templates/package.rst",
    "content": "{# The :autogenerated: tag is picked up by breadcrumbs.html to suppress \"Edit on Github\" link #}\n:autogenerated:\n\n{{ fullname }} package\n{% for item in range(8 + fullname|length) -%}={%- endfor %}\n\n.. automodule:: {{ fullname }}\n    {% if members -%}\n    :members: {{ members|join(\", \") }}\n    :undoc-members:\n    :show-inheritance:\n    {%- endif %}\n\n{% if submodules %}\n    Submodules:\n\n    .. toctree::\n       :maxdepth: 1\n{% for item in submodules %}\n       {{ fullname }}.{{ item }}\n       {%- endfor %}\n    {%- endif -%}\n\n{% if subpackages %}\n    Subpackages:\n\n    .. toctree::\n       :maxdepth: 1\n{% for item in subpackages %}\n       {{ fullname }}.{{ item }}\n       {%- endfor %}\n    {%- endif %}\n\n{% set all = get_members(in_list='__all__', include_imported=True) %}\n{% if members or all %}\n    Summary\n    -------\n\n{%- set exceptions = get_members(typ='exception', in_list='__all__', include_imported=True, out_format='table') -%}\n{%- set classes = get_members(typ='class', in_list='__all__', include_imported=True, out_format='table') -%}\n{%- set functions = get_members(typ='function', in_list='__all__', include_imported=True, out_format='table') -%}\n{%- set data = get_members(typ='data', in_list='__all__', include_imported=True, out_format='table') -%}\n{%- set private_exceptions = get_members(typ='exception', in_list='__private__', out_format='table') -%}\n{%- set private_classes = get_members(typ='class', in_list='__private__', out_format='table') -%}\n{%- set private_functions = get_members(typ='function', in_list='__private__', out_format='table') -%}\n\n    {%- if exceptions %}\n\n    ``__all__`` Exceptions:\n\n{% for line in exceptions %}\n    {{ line }}\n{%- endfor %}\n    {%- endif %}\n    {%- if private_exceptions %}\n\n    Private Exceptions:\n\n{% for line in private_exceptions %}\n    {{ line }}\n{%- endfor %}\n    {%- endif %}\n\n    {%- if classes %}\n\n    ``__all__`` Classes:\n\n{% for line in classes %}\n    {{ line }}\n{%- endfor %}\n    {%- endif %}\n    {%- if private_classes %}\n\n    Private Classes:\n\n{% for line in private_classes %}\n    {{ line }}\n{%- endfor %}\n    {%- endif %}\n\n    {%- if functions %}\n\n    ``__all__`` Functions:\n\n{% for line in functions %}\n    {{ line }}\n{%- endfor %}\n    {%- endif %}\n    {%- if private_functions %}\n\n    Private Functions:\n\n{% for line in private_functions %}\n    {{ line }}\n{%- endfor %}\n    {%- endif %}\n\n    {%- if data %}\n\n    ``__all__`` Data:\n\n{% for line in data %}\n    {{ line }}\n{%- endfor %}\n    {%- endif %}\n\n{%- endif %}\n\n\n{% if members %}\n    Reference\n    ---------\n\n{%- endif %}\n"
  },
  {
    "path": "docs/claf.config.factory.rst",
    "content": "claf.config.factory package\n===========================\n\nSubmodules\n----------\n\n.. automodule:: claf.config.factory.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.factory.data_loader\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.factory.data_reader\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.factory.model\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.factory.optimizer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.factory.tokens\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.config.factory\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.config.rst",
    "content": "claf.config package\n===================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.config.factory\n\nSubmodules\n----------\n\n.. automodule:: claf.config.args\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.namespace\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.pattern\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.registry\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.config.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.config\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.data.dataset.rst",
    "content": "claf.data.dataset package\n=========================\n\nSubmodules\n----------\n\n.. automodule:: claf.data.dataset.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.seq_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.seq_cls_bert\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.squad\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.squad_bert\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.tok_cls_bert\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.dataset.wikisql\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.data.dataset\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.data.reader.bert.rst",
    "content": "claf.data.reader.bert package\n=============================\n\nSubmodules\n----------\n\n.. automodule:: claf.data.reader.bert.cola\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.bert.conll2003\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.bert.seq_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.bert.squad\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.bert.tok_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.data.reader.bert\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.data.reader.rst",
    "content": "claf.data.reader package\n========================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.data.reader.bert\n\nSubmodules\n----------\n\n.. automodule:: claf.data.reader.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.cola\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.seq_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.squad\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.reader.wikisql\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.data.reader\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.data.rst",
    "content": "claf.data package\n=================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.data.dataset\n    claf.data.reader\n\nSubmodules\n----------\n\n.. automodule:: claf.data.batch\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.collate\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.data_handler\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.data.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.data\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.decorator.rst",
    "content": "claf.decorator package\n======================\n\nSubmodules\n----------\n\n.. automodule:: claf.decorator.arguments\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.decorator.register\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.decorator\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.learn.rst",
    "content": "claf.learn package\n==================\n\nSubmodules\n----------\n\n.. automodule:: claf.learn.experiment\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.learn.mode\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.learn.tensorboard\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.learn.trainer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.learn.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.learn\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.machine.components.retrieval.rst",
    "content": "claf.machine.components.retrieval package\n=========================================\n\nSubmodules\n----------\n\n.. automodule:: claf.machine.components.retrieval.tfidf\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.machine.components.retrieval\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.machine.components.rst",
    "content": "claf.machine.components package\n===============================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.machine.components.retrieval\n\nModule contents\n---------------\n\n.. automodule:: claf.machine.components\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.machine.rst",
    "content": "claf.machine package\n====================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.machine.components\n\nSubmodules\n----------\n\n.. automodule:: claf.machine.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.machine.module\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.machine.nlu\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.machine.open_qa\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.machine\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.metric.rst",
    "content": "claf.metric package\n===================\n\nSubmodules\n----------\n\n.. automodule:: claf.metric.classification\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.metric.squad_v1_official\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.metric.squad_v2_official\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.metric.wikisql_official\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.metric\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.model.reading_comprehension.rst",
    "content": "claf.model.reading\\_comprehension package\n=========================================\n\nSubmodules\n----------\n\n.. automodule:: claf.model.reading_comprehension.bert_for_qa\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.bidaf\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.bidaf_no_answer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.docqa\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.docqa_no_answer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.drqa\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.mixin\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.reading_comprehension.qanet\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.model.reading_comprehension\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.model.rst",
    "content": "claf.model package\n==================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.model.reading_comprehension\n    claf.model.semantic_parsing\n    claf.model.sequence_classification\n    claf.model.token_classification\n\nSubmodules\n----------\n\n.. automodule:: claf.model.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.cls_utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.model\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.model.semantic_parsing.rst",
    "content": "claf.model.semantic\\_parsing package\n====================================\n\nSubmodules\n----------\n\n.. automodule:: claf.model.semantic_parsing.mixin\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.semantic_parsing.sqlnet\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.semantic_parsing.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.model.semantic_parsing\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.model.sequence_classification.rst",
    "content": "claf.model.sequence\\_classification package\n===========================================\n\nSubmodules\n----------\n\n.. automodule:: claf.model.sequence_classification.bert_for_seq_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.sequence_classification.mixin\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.sequence_classification.structured_self_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.model.sequence_classification\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.model.token_classification.rst",
    "content": "claf.model.token\\_classification package\n========================================\n\nSubmodules\n----------\n\n.. automodule:: claf.model.token_classification.bert_for_tok_cls\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.model.token_classification.mixin\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.model.token_classification\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.modules.attention.rst",
    "content": "claf.modules.attention package\n==============================\n\nSubmodules\n----------\n\n.. automodule:: claf.modules.attention.bi_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.attention.co_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.attention.docqa_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.attention.multi_head_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.attention.seq_attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.modules.attention\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.modules.conv.rst",
    "content": "claf.modules.conv package\n=========================\n\nSubmodules\n----------\n\n.. automodule:: claf.modules.conv.depthwise_separable_conv\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.conv.pointwise_conv\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.modules.conv\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.modules.encoder.rst",
    "content": "claf.modules.encoder package\n============================\n\nSubmodules\n----------\n\n.. automodule:: claf.modules.encoder.lstm_cell_with_projection\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.encoder.positional\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.modules.encoder\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.modules.layer.rst",
    "content": "claf.modules.layer package\n==========================\n\nSubmodules\n----------\n\n.. automodule:: claf.modules.layer.highway\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.layer.normalization\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.layer.positionwise\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.layer.residual\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.layer.scalar_mix\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.modules.layer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.modules.rst",
    "content": "claf.modules package\n====================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.modules.attention\n    claf.modules.conv\n    claf.modules.encoder\n    claf.modules.layer\n\nSubmodules\n----------\n\n.. automodule:: claf.modules.activation\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.functional\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.modules.initializer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.modules\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.rst",
    "content": "claf package\n============\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.config\n    claf.data\n    claf.decorator\n    claf.learn\n    claf.machine\n    claf.metric\n    claf.model\n    claf.modules\n    claf.tokens\n\nSubmodules\n----------\n\n.. automodule:: claf.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.tokens.embedding.rst",
    "content": "claf.tokens.embedding package\n=============================\n\nSubmodules\n----------\n\n.. automodule:: claf.tokens.embedding.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.bert_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.char_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.cove_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.elmo_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.frequent_word_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.sparse_feature\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.embedding.word_embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.tokens.embedding\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.tokens.indexer.rst",
    "content": "claf.tokens.indexer package\n===========================\n\nSubmodules\n----------\n\n.. automodule:: claf.tokens.indexer.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.bert_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.char_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.elmo_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.exact_match_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.linguistic_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.indexer.word_indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.tokens.indexer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.tokens.rst",
    "content": "claf.tokens package\n===================\n\nSubpackages\n-----------\n\n.. toctree::\n\n    claf.tokens.embedding\n    claf.tokens.indexer\n    claf.tokens.token_embedder\n    claf.tokens.tokenizer\n\nSubmodules\n----------\n\n.. automodule:: claf.tokens.cove\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.elmo\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.hangul\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.linguistic\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.text_handler\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.token_maker\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.vocabulary\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.tokens\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.tokens.token_embedder.rst",
    "content": "claf.tokens.token\\_embedder package\n===================================\n\nSubmodules\n----------\n\n.. automodule:: claf.tokens.token_embedder.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.token_embedder.basic_embedder\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.token_embedder.reading_comprehension_embedder\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.tokens.token_embedder\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/claf.tokens.tokenizer.rst",
    "content": "claf.tokens.tokenizer package\n=============================\n\nSubmodules\n----------\n\n.. automodule:: claf.tokens.tokenizer.base\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.char\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.pass_text\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.sent\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.subword\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.utils\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n.. automodule:: claf.tokens.tokenizer.word\n    :members:\n    :undoc-members:\n    :show-inheritance:\n\n\nModule contents\n---------------\n\n.. automodule:: claf.tokens.tokenizer\n    :members:\n    :undoc-members:\n    :show-inheritance:\n"
  },
  {
    "path": "docs/conf.py",
    "content": "# -*- coding: utf-8 -*-\n\n#\n# Configuration file for the Sphinx documentation builder.\n#\n# This file does only contain a selection of the most common options. For a\n# full list see the documentation:\n# http://www.sphinx-doc.org/en/master/config\n\n# -- Path setup --------------------------------------------------------------\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#\n# import os\n# import sys\n# sys.path.insert(0, os.path.abspath('.'))\n\nimport os\nimport sys\nsys.path.insert(0, os.path.abspath('..'))\n\nfrom claf import __version__ as VERSION\n\n# -- Project information -----------------------------------------------------\n\nproject = 'CLaF'\ncopyright = '2019, Dongjun Lee'\nauthor = 'Dongjun Lee'\n\n# The short X.Y version\nversion = VERSION.__version__\n# The full version, including alpha/beta/rc tags\nrelease = VERSION.__version__\n\n\n# -- General configuration ---------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n#\n# needs_sphinx = '1.0'\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = [\n    'sphinx.ext.autodoc',\n    'sphinx.ext.intersphinx',\n    'sphinx.ext.mathjax',\n    'sphinx.ext.ifconfig',\n    'sphinx.ext.viewcode',\n    'sphinx.ext.githubpages',\n    'recommonmark',\n    'sphinx_markdown_tables',\n]\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# The suffix(es) of source filenames.\n# You can specify multiple suffix as a list of string:\n#\nsource_parsers = {\n   # '.md': 'recommonmark.parser.CommonMarkParser',\n}\nsource_suffix = ['.rst', '.md']\n\n# The master toctree document.\nmaster_doc = 'index'\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#\n# This is also used if you do content translation via gettext catalogs.\n# Usually you set \"language\" from the command line for these cases.\nlanguage = None\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\n# This pattern also affects html_static_path and html_extra_path .\nexclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n\n# -- Options for HTML output -------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\nhtml_theme = 'sphinx_rtd_theme'\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\n#\n# html_theme_options = {}\nhtml_theme_options = {\n    'logo_only': True,\n}\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\nhtml_context = {\n    'css_files': [\n        '_static/theme_overrides.css',  # override wide tables in RTD theme\n        ],\n     }\n\n# Custom sidebar templates, must be a dictionary that maps document names\n# to template names.\n#\n# The default sidebars (for documents that don't match any pattern) are\n# defined by theme itself.  Builtin themes are using these templates by\n# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',\n# 'searchbox.html']``.\n#\n# html_sidebars = {}\nhtml_logo = \"../images/logo.png\"\nhtml_favicon = \"../images/favicon.ico\"\n\n# -- Options for HTMLHelp output ---------------------------------------------\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'CLaFdoc'\n\n\n# -- Options for LaTeX output ------------------------------------------------\n\nlatex_elements = {\n    # The paper size ('letterpaper' or 'a4paper').\n    #\n    # 'papersize': 'letterpaper',\n\n    # The font size ('10pt', '11pt' or '12pt').\n    #\n    # 'pointsize': '10pt',\n\n    # Additional stuff for the LaTeX preamble.\n    #\n    # 'preamble': '',\n\n    # Latex figure (float) alignment\n    #\n    # 'figure_align': 'htbp',\n}\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title,\n#  author, documentclass [howto, manual, or own class]).\nlatex_documents = [\n    (master_doc, 'CLaF.tex', 'CLaF Documentation',\n     'Dongjun Lee', 'manual'),\n]\n\n\n# -- Options for manual page output ------------------------------------------\n\n# One entry per manual page. List of tuples\n# (source start file, name, description, authors, manual section).\nman_pages = [\n    (master_doc, 'CLaF', 'CLaF Documentation',\n     [author], 1)\n]\n\n\n# -- Options for Texinfo output ----------------------------------------------\n\n# Grouping the document tree into Texinfo files. List of tuples\n# (source start file, target name, title, author,\n#  dir menu entry, description, category)\ntexinfo_documents = [\n    (master_doc, 'CLaF', 'CLaF Documentation',\n     author, 'CLaF', 'One line description of project.',\n     'Miscellaneous'),\n]\n\n\n# -- Extension configuration -------------------------------------------------\n\n# -- Options for intersphinx extension ---------------------------------------\n\n# Example configuration for intersphinx: refer to the Python standard library.\nintersphinx_mapping = {'https://docs.python.org/': None}\n"
  },
  {
    "path": "docs/contents/dataset_and_model.md",
    "content": "# Dataset and Model\n\n**Table of Contents**\n\n- [Multi Task](#multi-task)\n- [Reading Comprehension](#reading-comprehension)\n- [Regression](#regression)\n- [Semantic Parsing](#semantic-parsing)\n- [Sequence Classification](#sequence-classification)\n- [Token Classification](#token-classification)\n\n---\n\n## Multi-Task\n\n### Dataset\n\n- [GLUE Benchmark](https://gluebenchmark.com/): The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems.\n    - CoLA, MNLI, MRPC, QNLI, QQP, RTE, SST-2, STS-B, WNLI \n\n### Model\n\n- [Multi-Task Deep Neural Networks for Natural Language Understanding](https://arxiv.org/abs/1901.11504)\n\n\n## Reading Comprehension\n\n### Dataset\n\n- [HistoryQA](https://oss.navercorp.com/ClovaAI-PJT/HistoryQA): Joseon History Question Answering Dataset (SQuAD Style)\n- [KorQuAD](https://korquad.github.io/): KorQuAD는 한국어 Machine Reading Comprehension을 위해 만든 데이터셋입니다. 모든 질의에 대한 답변은 해당 Wikipedia 아티클 문단의 일부 하위 영역으로 이루어집니다. Stanford Question Answering Dataset(SQuAD) v1.0과 동일한 방식으로 구성되었습니다.\n- [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/): **S**tanford **Qu**estion **A**nswering **D**ataset is a reading comprehension dataset, consisting of questions posed by crowdworkers on a set of Wikipedia articles, where the answer to every question is a segment of text, or span, from the corresponding reading passage, or the question might be unanswerable.\n\n### Model\n\n- BiDAF: [Birectional Attention Flow for Machine Comprehension](https://arxiv.org/abs/1611.01603) + `No Answer`\n- [A Structured Self-attentive Sentence Embedding](https://arxiv.org/abs/1703.03130)\n- DrQA: [Reading Wikipedia to Answer Open-Domain Questions](https://arxiv.org/abs/1704.00051)\n- DocQA: [Simple and Effective Multi-Paragraph Reading Comprehension](https://arxiv.org/abs/1710.10723) + `No Answer`\n- [QANet: Combining Local Convolution with Global Self-Attention for Reading Comprehension ](https://arxiv.org/abs/1804.09541)\n- [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)\n\n---\n\n## Regression\n\n- [GLUE Benchmark](https://gluebenchmark.com/): The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems.\n    - STS-B\n\n### Model\n\n- [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)\n- [RoBERTa: A Robustly Optimized BERT Pretraining Approach](https://arxiv.org/abs/1907.11692)\n\n---\n\n\n## Semantic Parsing\n\n### Dataset\n\n- [WikiSQL](https://github.com/salesforce/WikiSQL): A large crowd-sourced dataset for developing natural language interfaces for relational databases. WikiSQL is the dataset released along with our work [Seq2SQL: Generating Structured Queries from Natural Language using Reinforcement Learning](http://arxiv.org/abs/1709.00103).\n\n\n### Model\n\n- SQLNet: [SQLNet: Generating Structured Queries From Natural Language Without Reinforcement Learning](https://arxiv.org/abs/1711.04436)\n\n---\n\n\n## Sequence Classification\n\n### Dataset\n\n- [GLUE Benchmark](https://gluebenchmark.com/): The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems.\n    - CoLA, MNLI, MRPC, QNLI, QQP, RTE, SST-2, WNLI \n\n### Model\n\n- [A Structured Self-attentive Sentence Embedding](https://arxiv.org/abs/1703.03130)\n- [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)\n- [RoBERTa: A Robustly Optimized BERT Pretraining Approach](https://arxiv.org/abs/1907.11692)\n\n---\n\n## Token Classification\n\n### Dataset\n\n- [NER - CoNLL 2013](https://www.clips.uantwerpen.be/conll2003/ner/): The shared task of CoNLL-2003 concerns language-independent named entity recognition. Named entities are phrases that contain the names of persons, organizations, locations, times and quantities. \n\n### Model\n\n- [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)"
  },
  {
    "path": "docs/contents/pretrained_vector.md",
    "content": "# Pretrained Vector\n\n- List on [DataServer](http://dev-reasoning-qa-data-ncl.nfra.io:7778/)\n\n## English\n\n- `Counter Fitting`: [Counter-fitting Word Vectors to Linguistic Constraints](http://mi.eng.cam.ac.uk/~nm480/naaclhlt2016.pdf)\n    - counter\\_fitted\\_glove.300d.txt\n - `Cove`: [Learned in Translation: Contextualized Word Vectors (McCann et. al. 2017)](https://github.com/salesforce/cove)\n     - wmtlstm-b142a7f2.pth\n- `fastText`: [Enriching Word Vectors with Subword Information](https://github.com/facebookresearch/fastText)\n    - fasttext.wiki.en.300d.txt\n - `GloVe`: [GloVe: Global Vectors for Word Representation](https://nlp.stanford.edu/projects/glove/)\n     - glove.6B.50d.txt\n     - glove.6B.100d.txt\n     - glove.6B.200d.txt\n     - glove.6B.300d.txt\n     - glove.840B.300d.txt\n - `ELMo`: [Deep contextualized word representations](https://github.com/allenai/allennlp/blob/master/allennlp/modules/elmo.py)\n     - elmo\\_2x4096\\_512\\_2048cnn\\_2xhighway\\_weights.hdf5\n     - elmo\\_2x4096\\_512\\_2048cnn\\_2xhighway\\_options\n- `Word2Vec`: [Distributed Representations of Words and Phrases and their Compositionality](https://code.google.com/archive/p/word2vec/)\n    - GoogleNews-vectors-negative300.txt\n\n\n## Korean\n\n- `fastText`: [Enriching Word Vectors with Subword Information](https://github.com/facebookresearch/fastText)\n    - fasttext.wiki.ko.300d.txt"
  },
  {
    "path": "docs/contents/tokens.md",
    "content": "# Tokens\n\nTokenMakers consists of Tokenizer, Indexer, Vocabulary, and Embedding Modules.  \n`TokenMaker` is responsible for the indexing of text and the generation of the tensors through the embedding module.\n\n\n## Tokenizers\n\n- Tokenizer Design\n\n![images](../../images/tokenizers_design.png)\n\n```\nclass SentTokenizer(name, config): ...\nclass WordTokenizer(name, sent_tokenizer, config) ...\nclass SubwordTokenizer(name, word_tokenizer, config) ...\nclass CharTokenizer(name, word_tokenizer, config) ...\n```\n\nThe Tokenizer has a dependency with the other unit's tokenizer and the `tokenize()` function takes the input of text units.  \n(* unit: unit of input e.g. 'text', 'sentence' and 'word')\n\n- `tokenizer()` example\n\n```\n>>> text = \"Hello World.This is tokenizer example code.\"\n>>> word_tokenizer.tokenize(text, unit=\"text\")  # text -> sentences -> words\n>>> ['Hello', 'World', '.', 'This', 'is', 'tokenizer', 'example', 'code', '.']\n>>> word_tokenizer.tokenize(text, unit=\"sentence\")  # text -> words\n>>> ['Hello', 'World.This', 'is', 'tokenizer', 'example', 'code', '.']\n```\n\nSeveral tensors in a sub-level text unit can be combined into a single tensor of higher level via a vector operation. For example, subword level tensors can be averaged to represent a word level tensor.\n\ne.g.) concatenate \\[word; subword\\] (subword tokens --average--> word token) \n\n\n* The list of pre-defined `Tokenizers`:\n\n| Text Unit | Language | Name | Example |\n| ---- | ---- | --- | --- |\n| BPE | All (depend on vocab) | **roberta** | Hello World<br/>-> [\"ĠHello\", \"ĠWorld\"] |\n| Char | All | **character** | Hello World<br/>-> [\"Hello\", \"World\"]<br/>-> [[\"H\", \"e\", \"l\", \"l\", \"o\"], [\"W\", \"o\", \"r\", \"l\", \"d\"]] |\n| Char | Korean | [**jamo_ko**](https://github.com/rhobot/Hangulpy) | \"안녕 세상\"<br/>-> [\"안녕\", \"세상\"]<br/>-> [[\"ㅇ\", \"ㅏ\", \"ㄴ\", \"ㄴ\", \"ㅕ\", \"ㅇ\"], [\"ㅅ\", \"ㅔ\", \"ㅅ\", \"ㅏ\", \"ㅇ\"]] |\n| Subword | All (but, need vocab.txt) | [**wordpiece**](https://github.com/huggingface/pytorch-pretrained-BERT/blob/master/pytorch_pretrained_bert/tokenization.py) | \"expectancy of anyone\"<br/>-> [\"expectancy\", \"of\", \"anyone\"]<br/>-> [\"expect\", \"##ancy\", \"of\", \"anyone\"] |\n| Word | English | [**nltk_en**](http://www.nltk.org/api/nltk.tokenize.html) | - |\n| Word | English | [**spacy_en**](https://spacy.io/api/tokenizer) | - |\n| Word | Korean | [**mecab_ko**](https://bitbucket.org/eunjeon/mecab-ko) | - |\n| Word | All | **bert_basic** | - |\n| Word | All | **space_all** | \"Hello World\"<br/>-> [\"Hello\", \"World\"] |\n| Sent | All | [**punkt**](http://www.nltk.org/api/nltk.tokenize.html) | \"Hello World. This is punkt tokenizer.\"<br/>-> [\"Hello World.\", \"This is punkt tokenizer.\"] |\n\n\n## Token Maker\n\n* The list of pre-defined `Token Maker`:\n\n| Type | Description | Category | Notes |\n| ---- | ---- | --- | --- |\n| **char** | character -> convolution -> maxpool | `CharCNN` | - |\n| **cove** | Embeddings from Neural Machine Translation | `NMT` | - From [Salesforce](https://github.com/salesforce/cove) |\n| **feature** | Do not use embedding function, just pass feature | `Feature` | - |\n| **word** | word -> Embedding (+pretrained) | `Word2Vec` | - |\n| **frequent_word** | word token + pre-trained word embeddings fixed and only fine-tune the N most frequent | `Word2Vec` + `Fine-tune` | - |\n| **exact_match** | Three simple binary features, indicating whether p_i can be exactly matched to one question word in q, either in its original, lowercase or lemma form. | `Feature` | - Sparse or Embedding<br/> - Only for RC|\n| **elmo** | Embeddings from Language Models | `LM` | From [Allennlp](https://github.com/allenai/allennlp) |\n| **linguistic** | Linguistic Features like POS Tagging, NER and Dependency Parser | `Feature` | - Sparse or Embedding |\n\n\n- Example of tokens in [BaseConfig](#baseconfig)\n\n```\n\"token\": {\n   \"names\": [\"char\", \"glove\"],\n   \"types\": [\"char\", \"word\"],\n   \"tokenizer\": {  # Define the tokenizer in each unit.\n       \"char\": {\n           \"name\": \"character\"\n       },\n       \"word\": {\n           \"name\": \"treebank_en\",\n           \"split_with_regex\": true\n       }\n   },\n   \"char\": {  # token_name\n       \"vocab\": {\n           \"start_token\": \"<s>\",\n           \"end_token\": \"</s>\",\n           \"max_vocab_size\": 260\n       },\n       \"indexer\": {\n           \"insert_char_start\": true,\n           \"insert_char_end\": true\n       },\n       \"embedding\": {\n           \"embed_dim\": 16,\n           \"kernel_sizes\": [5],\n           \"num_filter\": 100,\n           \"activation\": \"relu\",\n           \"dropout\": 0.2\n       }\n   },\n   \"glove\": {  # token_name\n       \"indexer\": {\n           \"lowercase\": true\n       },\n       \"embedding\": {\n           \"embed_dim\": 100,\n           \"pretrained_path\": \"<glove.6B.100d path>,\n           \"trainable\": false,\n           \"dropout\": 0.2\n       }\n   }\n},\n\n# Tokens process\n#   Text -> Indexed Featrues -> Tensor -> TokenEmbedder -> Model\n\n# Visualization\n# - Text: Hello World\n# - Indexed Feature: {'char': [[2, 3, 4, 4, 5], [6, 7, 8, 4, 9]], 'glove': [2, 3]} \n# - Tensor: {'char': tensor, 'glove': tensor} \n# - TokenEmbedder: [char; glove]  (default: concatenate)\n# - Model: use embedded_value\n```"
  },
  {
    "path": "docs/index.rst",
    "content": ".. CLaF documentation master file, created by\n   sphinx-quickstart on Wed Aug 22 16:14:25 2018.\n   You can adapt this file completely to your liking, but it should at least\n   contain the root `toctree` directive.\n\n:github_url: https://github.com/naver/claf\n\nCLaF documentation\n===================================\n\nCLaF: Clova Language Framework\n\n.. toctree::\n   :glob:\n   :maxdepth: 1\n   :caption: Contents\n\n   contents/*\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: Package Reference\n\n   config <claf.config>\n   data <claf.data>\n   learn <claf.learn>\n   metric <claf.metric>\n   model <claf.model>\n   modules <claf.modules>\n   tokens <claf.tokens>\n\n\n.. toctree::\n   :glob:\n   :maxdepth: 1\n   :caption: Reports\n\n   reports/*\n\n\n.. toctree::\n   :glob:\n   :maxdepth: 1\n   :caption: Summary\n\n   summary/*\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: Appendix\n\n   References <references>\n\n\nIndices and tables\n==================\n\n* :ref:`genindex`\n* :ref:`modindex`\n"
  },
  {
    "path": "docs/make.bat",
    "content": "@ECHO OFF\r\n\r\npushd %~dp0\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sphinx-build\r\n)\r\nset SOURCEDIR=.\r\nset BUILDDIR=_build\r\nset SPHINXPROJ=rqa\r\n\r\nif \"%1\" == \"\" goto help\r\n\r\n%SPHINXBUILD% >NUL 2>NUL\r\nif errorlevel 9009 (\r\n\techo.\r\n\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx\r\n\techo.installed, then set the SPHINXBUILD environment variable to point\r\n\techo.to the full path of the 'sphinx-build' executable. Alternatively you\r\n\techo.may add the Sphinx directory to PATH.\r\n\techo.\r\n\techo.If you don't have Sphinx installed, grab it from\r\n\techo.http://sphinx-doc.org/\r\n\texit /b 1\r\n)\r\n\r\n%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%\r\ngoto end\r\n\r\n:help\r\n%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%\r\n\r\n:end\r\npopd\r\n"
  },
  {
    "path": "docs/modules.rst",
    "content": "claf\n====\n\n.. toctree::\n   :maxdepth: 4\n\n   claf\n"
  },
  {
    "path": "docs/references.md",
    "content": "# References\n\n\n- **Dataset**\n\t- Pranav Rajpurkar, Jian Zhang, Konstantin Lopyrev and Percy Liang. 2016, [SQuAD: 100,000+ Questions for Machine Comprehension of Text](https://arxiv.org/abs/1606.05250)\n\t- Pranav Rajpurkar, Robin Jia and Percy Liang. 2018, [Know What You Don't Know: Unanswerable Questions for SQuAD](https://arxiv.org/abs/1806.03822)\n\t- Victor Zhong, Caiming Xiong, and Richard Socher. 2017, [Seq2SQL: Generating Structured Queries from Natural Language using Reinforcement Learning](http://arxiv.org/abs/1709.00103)\n- **Model**\n   - Minjoon Seo, Aniruddha Kembhavi, Ali Farhadi and Hannaneh Hajishirzi. 2016, [Bidirectional Attention Flow for Machine Comprehension](https://arxiv.org/abs/1611.01603)\n   - Danqi Chen, Adam Fisch, Jason Weston and Antoine Bordes. 2017, [Reading Wikipedia to Answer Open-Domain Questions](https://arxiv.org/abs/1704.00051)\n   - Christopher Clark and Matt Gardner. 2017, [Simple and Effective Multi-Paragraph Reading Comprehension](https://arxiv.org/abs/1710.10723)\n   - Adams Wei Yu, David Dohan, Minh-Thang Luong, Rui Zhao, Kai Chen, Mohammad Norouzi and Quoc V. Le. 2018, [QANet: Combining Local Convolution with Global Self-Attention for Reading Comprehension](https://arxiv.org/abs/1804.09541)\n   - Jacob Devlin, Ming-Wei Chang, Kenton Lee and Kristina Toutanova. 2018, [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)\n   - Xiaojun Xu, Chang Liu and Dawn Song. 2017, [SQLNet: Generating Structured Queries From Natural Language Without Reinforcement Learning](https://arxiv.org/abs/1711.04436)\n- **Token**\n   - Yoon Kim,. 2014, [Convolutional Neural Networks for Sentence Classification](https://arxiv.org/abs/1408.5882)\n\t- B. McCann, J. Bradbury, C. Xiong, R. Socher, [Learned in Translation: Contextualized Word Vectors](http://papers.nips.cc/paper/7209-learned-in-translation-contextualized-word-vectors.pdf)\n\t- P. Bojanowski, E. Grave, A. Joulin, T. Mikolov, [Enriching Word Vectors with Subword Information](https://arxiv.org/abs/1607.04606)\n   - Matthew E. Peters, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee and Luke Zettlemoyer. 2018, [Deep contextualized word representations](https://arxiv.org/abs/1802.05365)\n- **Other Framework**\n    - Matt Gardner, Joel Grus, Mark Neumann, Oyvind Tafjord, Pradeep Dasigi, Nelson F. Liu, Matthew Peters, Michael Schmitz and Luke S. Zettlemoyer. 2017, [AllenNLP: A Deep Semantic Natural Language Processing Platform](https://www.semanticscholar.org/paper/AllenNLP%3A-A-Deep-Semantic-Natural-Language-Platform-Gardner-Grus/a5502187140cdd98d76ae711973dbcdaf1fef46d)\n    - Guillaume Klein, Yoon Kim, Yuntian Deng, Vincent Nguyen, Jean Senellart and Alexander M. Rush [OpenNMT: Neural Machine Translation Toolkit](https://arxiv.org/pdf/1805.11462)"
  },
  {
    "path": "docs/reports/glue.md",
    "content": "# GLUE\n\n- [`GLUE`](https://gluebenchmark.com/): The General Language Understanding Evaluation (GLUE) benchmark is a collection of resources for training, evaluating, and analyzing natural language understanding systems. \n\n---\n\n## Results\n\n### Dev Set\n\n- **Base** Size : 12-layer, 768-hidden, 12-heads, 110M parameters\n\n| Task (Metric) | Model | CLaF Result | Official Result | BaseConfig | \n| ------------- | ----- | ----- | -------- | ---------- |\n| **CoLA** (**Matthew's Corr**) | BERT-Base | 59.393 | 52.1 (Test set) | glue/cola_bert.json |\n|  | MT-DNN (BERT) Base | 54.658 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 64.828 | 63.6 | glue/cola_roberta.json |\n| **MNLI m/mm** (**Accuracy**) | BERT-Base | 83.923/84.306 | 84.6/83.4 (Test set) | glue/mnli{m/mm}_bert.json | \n|  | MT-DNN (BERT) Base | 84.452/84.225 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 87.305/87.236 | 87.6/- | glue/mnli{m/mm}_roberta.json |\n| **MRPC** (**Accuracy/F1**) | BERT-Base | 87.5/91.282 | 88.9 (Test set) | glue/mrpc_bert.json |\n|  | MT-DNN (BERT) Base | 87.5/91.005 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 88.480/91.681 | 90.2 | glue/mrpc_roberta.json |\n| **QNLI** (**Accuracy**) | BERT-Base | 88.521 | 90.5 (Test set) | glue/qnli_bert.json |\n|  | MT-DNN (BERT) Base | - | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 90.823 | 92.8 | glue/qnli_roberta.json |\n| **QQP** (**Accuracy/F1**) | BERT-Base | 90.378/87.171 | 71.2 (Test set) | glue/qqp_bert.json |\n|  | MT-DNN (BERT) Base | 91.261/88.219 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 91.541/88.768 | 91.9 | glue/qqp_roberta.json |\n| **RTE** (**Accuracy**) | BERT-Base | 69.314 | 66.4 (Test set) | glue/rte_bert.json |\n|  | MT-DNN (BERT) Base | 79.422 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 73.646 | 78.7 | glue/rte_roberta.json |\n| **SST-2** (**Accuracy**) | BERT-Base | 92.546 | 93.5 (Test set) | glue/sst_bert.json |\n|  | MT-DNN (BERT) Base | 93.005 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 94.495 | 94.8 | glue/sst_roberta.json |\n| **STS-B** (**Pearson/Spearman**) | BERT-Base | 88.070/87.881 | 85.8 (Test set) | glue/stsb_bert.json |\n|  | MT-DNN (BERT) Base | 88.444/88.807 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 89.003/89.094 | 91.2 | glue/stsb_roberta.json |\n| **WNLI** (**Accuracy**) | BERT-Base | 56.338 | 65.1 (Test set) | glue/wnli_bert.json |\n|  | MT-DNN (BERT) Base | 57.746 | - | 1. multi_task/bert_base_glue.json <br/> 2. `fine-fune` |\n|  | RoBERTa-Base | 60.563 | - | glue/wnli_roberta.json |\n\n\n- **Large** Size : 24-layer, 1024-hidden, 16-heads, 340M parameters\n\n| Task (Metric) | Model | CLaF Result | Official Result | BaseConfig | \n| ------------- | ----- | ----- | -------- | ---------- |\n| **CoLA** (**Matthew's Corr**) | BERT-Large | 61.151 | 60.6 | glue/cola_bert.json |\n|  | MT-DNN (BERT) Large | - | 63.5 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | - | 68.0 | glue/cola_roberta.json |\n| **MNLI m/mm** (**Accuracy**) | BERT-Large | - | 86.6/- | glue/mnli{m/mm}_bert.json |\n|  | MT-DNN (BERT) Large | - | 87.1/86.7 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | - | 90.2/90.2 | glue/mnli{m/mm}_roberta.json |\n| **MRPC** (**Accuracy/F1**) | BERT-Large | 87.255/90.845 | 88.0 | glue/mrpc_bert.json |\n|  | MT-DNN (BERT) Large | - | 91.0/87.5 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | 90.686/93.214 | 90.9 | glue/mrpc_roberta.json |\n| **QNLI** (**Accuracy**) | BERT-Large | 90.440 | 92.3 | glue/qnli_bert.json |\n|  | MT-DNN (BERT) Large | - | 87.1/86.7 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | - | 94.7 | glue/qnli_roberta.json |\n| **QQP** (**Accuracy/F1**) | BERT-Large | 91.640/88.745 | 91.3 | glue/qqp_bert.json |\n|  | MT-DNN (BERT) Large | - | 87.1/86.7 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | 91.848/89.031 | 92.2 | glue/qqp_roberta.json |\n| **RTE** (**Accuracy**) | BERT-Large | 69.675 | 70.4 | glue/rte_bert.json |\n|  | MT-DNN (BERT) Large | - | 83.4 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | 84.838 | 86.6 | glue/rte_roberta.json |\n| **SST-2** (**Accuracy**) | BERT-Large | 93.349 | 93.2 | glue/sst_bert.json |\n|  | MT-DNN (BERT) Large | - | 94.3 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | 95.642 | 96.4 | glue/sst_roberta.json |\n| **STS-B** (**Pearson/Spearman**) | BERT-Large | 90.041/89735 | 90.0 | glue/stsb_bert.json |\n|  | MT-DNN (BERT) Large | - | 90.7/90.6 | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | 91.980/91.764 | 92.4 | glue/stsb_roberta.json |\n| **WNLI** (**Accuracy**) | BERT-Large | 59.155 | - | glue/wnli_bert.json |\n|  | MT-DNN (BERT) Large | - | - | 1. multi_task/bert_large_glue.json <br/>  2. `fine-fune` |\n|  | RoBERTa-Large | - | 91.3 | - |"
  },
  {
    "path": "docs/reports/historyqa.md",
    "content": "# HistoryQA\n\n`Span Detector`\n\n- `HistoryQA`: Joseon History Question Answering Dataset\n\t- Train: 31901 / Dev: 3067\t\n\n---\n\n## Results\n\n- Dev Set\n\n| Model | EM | F1 | BaseConfig | Note |\n| --- | --- | --- | --- | --- | \n| **BiDAF** | 81.709 | 84.743 | history/bidaf.json | - |\n| **DocQA** | 85.099 | 87.789 | history/docqa.json | - |"
  },
  {
    "path": "docs/reports/korquad.md",
    "content": "# KorQuAD\n\n`Span Detector`\n\n- [`KorQuAD`](https://korquad.github.io/): KorQuAD는 한국어 Machine Reading Comprehension을 위해 만든 데이터셋입니다. 모든 질의에 대한 답변은 해당 Wikipedia 아티클 문단의 일부 하위 영역으로 이루어집니다. Stanford Question Answering Dataset(SQuAD) v1.0과 동일한 방식으로 구성되었습니다.\n\t- v1.0\n\t\t- Train: 60359 / Dev: 5774 \n\n---\n\n## Results\n\n- Dev Set\n\n| Model | EM | F1 | BaseConfig | Note |\n| --- | --- | --- | --- | --- |\n| **BiDAF** | 75.476 | 85.915 | korquad/bidaf.json | - |\n| **DocQA** | 77.693 | 88.115 | korquad/docqa.json | - |\n| **BERT**-Base, Multilingual Uncased | 81.573 | 90.679 | korquad/bert_base_multilingual_uncased.json | - |\n| **BERT**-Base, Multilingual Cased | 82.542 | 91.692 | korquad/bert_base_multilingual_cased.json | - |"
  },
  {
    "path": "docs/reports/squad.md",
    "content": "# SQuAD\n\n`Span Detector`, `No Answer`\n\n- [`SQuAD`](https://rajpurkar.github.io/SQuAD-explorer/): Stanford Question Answering Dataset (SQuAD), a new reading comprehension dataset consisting of 100,000+ questions posed by crowdworkers on a set of Wikipedia articles, where the answer to each question is a segment of text from the corresponding reading passage.\n    - v1.1\n    \t- Train: 87599 / Dev: 10570 / Test: 9533\n\t- v2.0 + no_answer\n\t    - Train : 130319 / Dev: 11873 / Test: 8862\n\n---\n\n## Results (v1.1)\n\n- Dev Set\n\n| Model | EM (official) | F1 (official) | BaseConfig | Note |\n| --- | --- | --- | --- | --- |\n| **BiDAF** | 68.108 (67.7) | 77.780 (77.3) | squad/bidaf.json | - |\n| **BiDAF + ELMo** | 74.295 | 82.727 | squad/bidaf+elmo.json | - |\n| **DrQA** | 68.316 (68.8) | 77.493 (78.0) | squad/drqa.json | - |\n| **DocQA** | 71.760 (71.513) | 80.635 (80.422) | squad/docqa.json | - |\n| **DocQA + ELMo** | 76.244 (77.5) | 84.372 (84.5) | squad/docqa+elmo.json | - |\n| **QANet** | 70.918 (73.6) | 79.800 (82.7) | squad/qanet.json | - |\n| **BERT**-Base Uncased | 79.508 (80.8) | 87.642 (88.5) | squad/bert_base_uncased.json | - |\n| **BERT**-Large Uncased | 83.254 (84.1) | 90.440 (90.9) | squad/bert_large_uncased.json | - |\n| **RoBERTa**-Base | 82.980 | 90.459 | roberta_base.json/bert_base_uncased.json | - |\n| **RoBERTa**-Large | 88.061 (88.9) | 94.034 (94.6) | squad/roberta_large.json | - |\n\n---\n\n\n## Results (v2.0)\n\n- Dev Set\n\n| Model | EM (official) | F1 (official) | BaseConfig | Note |\n| --- | --- | --- | --- | --- |\n| **BiDAF** | 62.570 | 65.461 | squad/bidaf_no_answer.json | - |\n| **DocQA** | 61.728 | 64.489 | squad/docqa_no_answer.json | - |"
  },
  {
    "path": "docs/reports/wikisql.md",
    "content": "# WikiSQL\n\n`Semantic Parsing`, `NL2SQL`\n\n- `WikiSQL`: A large crowd-sourced dataset for developing natural language interfaces for relational databases.\n\n---\n\n## Results\n\n- Column details\n\t* Agg: Aggregator \n\t* Sel: SELECT Column\n\t* Cond: Where clause\n\t* LF: Logical Form\n\t* EX: Execution\n\t* (): Paper result\n\n| Model | Agg | Sel | Cond | LF | EX | BaseConfig |\n| --- | --- | --- | --- | --- | --- | --- |\n| **SQLNet** | (90.1) | (91.1) | (72.1) | - | (69.8) | wikisql/sqlnet.json |"
  },
  {
    "path": "docs/requirements.txt",
    "content": "# Documentation\nSphinx\nrecommonmark\nsphinx_markdown_tables\ngit+https://github.com/DongjunLee/sphinx_rtd_theme.git"
  },
  {
    "path": "docs/summary/reading_comprehension.md",
    "content": "# Reading Comprehension\n\n\nFocus on Service orientied metrics (eg. 1-example inference latency)\n\n- Exists samples in `reports/summary/` directory\n\n## SQuAD v1.1\n\n\n| Model | Inference Latency <br/>(1-example/ms) | F1 (SQuAD) | BaseConfig | Note |\n| --- | --- | --- | --- | --- |\n| **BiDAF** | 142.644 `cpu` / 32.545 `gpu` | 77.747 | squad/bidaf.json | - |\n| **BiDAF + ELMo** | - `cpu` / - `gpu` | 82.288 | squad/bidaf+elmo.json | - |\n| **DrQA** | - `cpu` / - `gpu` | 77.049 | squad/drqa.json | - |\n| **DocQA** | - `cpu` / - `gpu` | 80.635 | squad/docqa.json | - |\n| **DocQA + ELMo** | - `cpu` / - `gpu` | 84.372 | squad/docqa+elmo.json | - |\n| **QANet** | - `cpu` / - `gpu` | 79.800 | squad/qanet.json | - |\n| **BERT** | - `cpu` / - `gpu` | 87.130 | squad/bert\\_base-_uncased.json | - |\n\n\n### Plot\n\n- Inference Latency (1-example)\n\n![images](../../images/inference_latency_chart-1000.png)"
  },
  {
    "path": "eval.py",
    "content": "# -*- coding: utf-8 -*-\n\n\nfrom claf.config import args\nfrom claf.learn.experiment import Experiment\nfrom claf.learn.mode import Mode\n\n\nif __name__ == \"__main__\":\n    config = args.config(mode=Mode.EVAL)\n\n    mode = Mode.EVAL\n    if config.inference_latency: # evaluate inference_latency\n        mode = Mode.INFER_EVAL\n\n    experiment = Experiment(mode, config)\n    experiment()\n"
  },
  {
    "path": "index.html",
    "content": "<meta http-equiv=\"refresh\" content=\"0; url=./docs/_build/html/index.html\" />\n"
  },
  {
    "path": "machine.py",
    "content": "# -*- coding: utf-8 -*-\n\nimport json\n\nfrom claf.config import args\nfrom claf.config.registry import Registry\nfrom claf.learn.mode import Mode\nfrom claf import utils as common_utils\n\n\nif __name__ == \"__main__\":\n    registry = Registry()\n\n    machine_config = args.config(mode=Mode.MACHINE)\n    machine_name = machine_config.name\n    config = getattr(machine_config, machine_name, {})\n\n    claf_machine = registry.get(f\"machine:{machine_name}\")(config)\n\n    while True:\n        question = common_utils.get_user_input(f\"{getattr(machine_config, 'user_input', 'Question')}\")\n        answer = claf_machine(question)\n        answer = json.dumps(answer, indent=4, ensure_ascii=False)\n        print(f\"{getattr(machine_config, 'system_response', 'Answer')}: {answer}\")\n"
  },
  {
    "path": "machine_config/ko_wiki.json",
    "content": " {\n  \"name\": \"open_qa\",\n  \"user_input\": \"Question\",\n  \"system_response\": \"Answer\",\n  \"open_qa\": {\n      \"tokenizers\": {\n          \"sent\": {\n              \"name\": \"punkt\"\n          },\n          \"word\": {\n              \"name\": \"mecab_ko\",\n              \"split_with_regex\": true\n          }\n      },\n      \"knowledge_base\": {\n          \"wiki\": \"<WikiExtractor output_path with --json>\"\n      },\n      \"reasoning\": {\n          \"document_retrieval\": {\n              \"type\": \"component\",\n              \"name\": \"tfidf\",\n              \"tfidf\": {\n                  \"k\": 5\n              }\n          },\n          \"reading_comprehension\": {\n              \"type\": \"experiment\",\n              \"checkpoint_path\": \"<checkpoint_path>\"\n          }\n      }\n    }\n }\n"
  },
  {
    "path": "machine_config/nlu.json",
    "content": "{\n  \"name\": \"nlu\",\n  \"user_input\": \"Utterance\",\n  \"system_response\": \"NLU Result\",\n  \"nlu\": {\n    \"tokenizers\": {\n      \"sent\": {\n        \"name\": \"punkt\"\n      },\n      \"subword\": {\n        \"name\": \"wordpiece\",\n        \"wordpiece\": {\n          \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual-cased-vocab.txt\"\n        }\n      }\n    },\n    \"nlu\": {\n      \"intent\": {\n        \"name\": \"intent\",\n        \"type\": \"experiment\",\n        \"checkpoint_path\": \"<model_checkpoint_path>\",\n        \"cuda_devices\": [0]\n      },\n      \"slots\": {\n        \"name\": \"slots\",\n        \"type\": \"experiment\",\n        \"checkpoint_path\": \"<model_checkpoint_path>\",\n        \"cuda_devices\": [1]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "predict.py",
    "content": "# -*- coding: utf-8 -*-\n\n\nfrom claf.config import args\nfrom claf.learn.experiment import Experiment\nfrom claf.learn.mode import Mode\n\n\nif __name__ == \"__main__\":\n    experiment = Experiment(Mode.PREDICT, args.config(mode=Mode.PREDICT))\n    result = experiment()\n\n    print(f\"Predict: {result}\")\n"
  },
  {
    "path": "pyproject.toml",
    "content": "# Example configuration for Black.\n\n# NOTE: you have to use single-quoted strings in TOML for regular expressions.\n# It's the equivalent of r-strings in Python.  Multiline strings are treated as\n# verbose regular expressions by Black.  Use [ ] to denote a significant space\n# character.\n\n[tool.black]\nline-length = 100\npy36 = true\ninclude = '\\.pyi?$'\nexclude = '''\n/(\n    \\.git\n  | \\.hg\n  | \\.mypy_cache\n  | \\.tox\n  | \\.venv\n  | _build\n  | buck-out\n  | build\n  | dist\n  # specific to claf\n  | setup.py\n  | __pycache__\n  | data\n  | images\n  | inference_result\n  | logs\n  | notebooks\n  | model_config\n  | script\n  | summary\n  # The following are specific to Black, you probably don't want those.\n  | blib2to3\n  | tests/data\n  | profiling\n)/\n'''\n"
  },
  {
    "path": "reports/inference_result/bert_for_qa-cpu.json",
    "content": "{\n    \"average_raw_to_tensor\": 0.7418926316078263,\n    \"average_tensor_to_predict\": 85.4424991992989,\n    \"average_end_to_end\": 86.18439183090672,\n    \"tensor_to_predicts\": [\n        {\n            \"elapsed_time\": 165.971040725708,\n            \"token_count\": 10\n        },\n        {\n            \"elapsed_time\": 136.68274879455566,\n            \"token_count\": 11\n        },\n        {\n            \"elapsed_time\": 154.79207038879395,\n            \"token_count\": 12\n        },\n        {\n            \"elapsed_time\": 173.23875427246094,\n            \"token_count\": 13\n        },\n        {\n            \"elapsed_time\": 190.60564041137695,\n            \"token_count\": 14\n        },\n        {\n            \"elapsed_time\": 207.2291374206543,\n            \"token_count\": 15\n        },\n        {\n            \"elapsed_time\": 177.94513702392578,\n            \"token_count\": 16\n        },\n        {\n            \"elapsed_time\": 169.35205459594727,\n            \"token_count\": 17\n        },\n        {\n            \"elapsed_time\": 178.36904525756836,\n            \"token_count\": 18\n        },\n        {\n            \"elapsed_time\": 230.90004920959473,\n            \"token_count\": 19\n        },\n        {\n            \"elapsed_time\": 186.1860752105713,\n            \"token_count\": 20\n        },\n        {\n            \"elapsed_time\": 205.7051658630371,\n            \"token_count\": 21\n        },\n        {\n            \"elapsed_time\": 188.7838840484619,\n            \"token_count\": 22\n        },\n        {\n            \"elapsed_time\": 199.5537281036377,\n            \"token_count\": 23\n        },\n        {\n            \"elapsed_time\": 202.04710960388184,\n            \"token_count\": 24\n        },\n        {\n            \"elapsed_time\": 198.06313514709473,\n            \"token_count\": 25\n        },\n        {\n            \"elapsed_time\": 194.227933883667,\n            \"token_count\": 26\n        },\n        {\n            \"elapsed_time\": 197.78108596801758,\n            \"token_count\": 27\n        },\n        {\n            \"elapsed_time\": 213.79780769348145,\n            \"token_count\": 28\n        },\n        {\n            \"elapsed_time\": 206.5870761871338,\n            \"token_count\": 29\n        },\n        {\n            \"elapsed_time\": 205.718994140625,\n            \"token_count\": 30\n        },\n        {\n            \"elapsed_time\": 208.95838737487793,\n            \"token_count\": 31\n        },\n        {\n            \"elapsed_time\": 222.90372848510742,\n            \"token_count\": 32\n        },\n        {\n            \"elapsed_time\": 227.0190715789795,\n            \"token_count\": 33\n        },\n        {\n            \"elapsed_time\": 221.44794464111328,\n            \"token_count\": 34\n        },\n        {\n            \"elapsed_time\": 241.27793312072754,\n            \"token_count\": 35\n        },\n        {\n            \"elapsed_time\": 225.35395622253418,\n            \"token_count\": 36\n        },\n        {\n            \"elapsed_time\": 269.5138454437256,\n            \"token_count\": 37\n        },\n        {\n            \"elapsed_time\": 295.05324363708496,\n            \"token_count\": 38\n        },\n        {\n            \"elapsed_time\": 254.86993789672852,\n            \"token_count\": 39\n        },\n        {\n            \"elapsed_time\": 307.0361614227295,\n            \"token_count\": 40\n        },\n        {\n            \"elapsed_time\": 245.2218532562256,\n            \"token_count\": 41\n        },\n        {\n            \"elapsed_time\": 259.52911376953125,\n            \"token_count\": 42\n        },\n        {\n            \"elapsed_time\": 286.4530086517334,\n            \"token_count\": 43\n        },\n        {\n            \"elapsed_time\": 249.1142749786377,\n            \"token_count\": 44\n        },\n        {\n            \"elapsed_time\": 287.2958183288574,\n            \"token_count\": 45\n        },\n        {\n            \"elapsed_time\": 274.45220947265625,\n            \"token_count\": 46\n        },\n        {\n            \"elapsed_time\": 306.7820072174072,\n            \"token_count\": 47\n        },\n        {\n            \"elapsed_time\": 300.2350330352783,\n            \"token_count\": 48\n        },\n        {\n            \"elapsed_time\": 303.76482009887695,\n            \"token_count\": 49\n        },\n        {\n            \"elapsed_time\": 258.76712799072266,\n            \"token_count\": 50\n        },\n        {\n            \"elapsed_time\": 287.23716735839844,\n            \"token_count\": 51\n        },\n        {\n            \"elapsed_time\": 306.8361282348633,\n            \"token_count\": 52\n        },\n        {\n            \"elapsed_time\": 312.97898292541504,\n            \"token_count\": 53\n        },\n        {\n            \"elapsed_time\": 319.52977180480957,\n            \"token_count\": 54\n        },\n        {\n            \"elapsed_time\": 316.7433738708496,\n            \"token_count\": 55\n        },\n        {\n            \"elapsed_time\": 296.46778106689453,\n            \"token_count\": 56\n        },\n        {\n            \"elapsed_time\": 328.6020755767822,\n            \"token_count\": 57\n        },\n        {\n            \"elapsed_time\": 335.73198318481445,\n            \"token_count\": 58\n        },\n        {\n            \"elapsed_time\": 356.5230369567871,\n            \"token_count\": 59\n        },\n        {\n            \"elapsed_time\": 371.95277214050293,\n            \"token_count\": 60\n        },\n        {\n            \"elapsed_time\": 349.3800163269043,\n            \"token_count\": 61\n        },\n        {\n            \"elapsed_time\": 344.71607208251953,\n            \"token_count\": 62\n        },\n        {\n            \"elapsed_time\": 340.18468856811523,\n            \"token_count\": 63\n        },\n        {\n            \"elapsed_time\": 356.83298110961914,\n            \"token_count\": 64\n        },\n        {\n            \"elapsed_time\": 348.0079174041748,\n            \"token_count\": 65\n        },\n        {\n            \"elapsed_time\": 390.51079750061035,\n            \"token_count\": 66\n        },\n        {\n            \"elapsed_time\": 386.43813133239746,\n            \"token_count\": 67\n        },\n        {\n            \"elapsed_time\": 391.3700580596924,\n            \"token_count\": 68\n        },\n        {\n            \"elapsed_time\": 383.5337162017822,\n            \"token_count\": 69\n        },\n        {\n            \"elapsed_time\": 348.6979007720947,\n            \"token_count\": 70\n        },\n        {\n            \"elapsed_time\": 388.57293128967285,\n            \"token_count\": 71\n        },\n        {\n            \"elapsed_time\": 379.19116020202637,\n            \"token_count\": 72\n        },\n        {\n            \"elapsed_time\": 426.4483451843262,\n            \"token_count\": 73\n        },\n        {\n            \"elapsed_time\": 381.3300132751465,\n            \"token_count\": 74\n        },\n        {\n            \"elapsed_time\": 400.34985542297363,\n            \"token_count\": 75\n        },\n        {\n            \"elapsed_time\": 403.1178951263428,\n            \"token_count\": 76\n        },\n        {\n            \"elapsed_time\": 395.18213272094727,\n            \"token_count\": 77\n        },\n        {\n            \"elapsed_time\": 413.30909729003906,\n            \"token_count\": 78\n        },\n        {\n            \"elapsed_time\": 404.61111068725586,\n            \"token_count\": 79\n        },\n        {\n            \"elapsed_time\": 429.3079376220703,\n            \"token_count\": 80\n        },\n        {\n            \"elapsed_time\": 454.20193672180176,\n            \"token_count\": 81\n        },\n        {\n            \"elapsed_time\": 448.97985458374023,\n            \"token_count\": 82\n        },\n        {\n            \"elapsed_time\": 428.3151626586914,\n            \"token_count\": 83\n        },\n        {\n            \"elapsed_time\": 474.23505783081055,\n            \"token_count\": 84\n        },\n        {\n            \"elapsed_time\": 484.2970371246338,\n            \"token_count\": 85\n        },\n        {\n            \"elapsed_time\": 470.9022045135498,\n            \"token_count\": 86\n        },\n        {\n            \"elapsed_time\": 488.6510372161865,\n            \"token_count\": 87\n        },\n        {\n            \"elapsed_time\": 477.9789447784424,\n            \"token_count\": 88\n        },\n        {\n            \"elapsed_time\": 520.4360485076904,\n            \"token_count\": 89\n        },\n        {\n            \"elapsed_time\": 478.06596755981445,\n            \"token_count\": 90\n        },\n        {\n            \"elapsed_time\": 538.3880138397217,\n            \"token_count\": 91\n        },\n        {\n            \"elapsed_time\": 519.0162658691406,\n            \"token_count\": 92\n        },\n        {\n            \"elapsed_time\": 537.1859073638916,\n            \"token_count\": 93\n        },\n        {\n            \"elapsed_time\": 489.7441864013672,\n            \"token_count\": 94\n        },\n        {\n            \"elapsed_time\": 507.720947265625,\n            \"token_count\": 95\n        },\n        {\n            \"elapsed_time\": 547.6353168487549,\n            \"token_count\": 96\n        },\n        {\n            \"elapsed_time\": 517.4188613891602,\n            \"token_count\": 97\n        },\n        {\n            \"elapsed_time\": 522.0952033996582,\n            \"token_count\": 98\n        },\n        {\n            \"elapsed_time\": 527.1692276000977,\n            \"token_count\": 99\n        },\n        {\n            \"elapsed_time\": 513.253927230835,\n            \"token_count\": 100\n        },\n        {\n            \"elapsed_time\": 527.54807472229,\n            \"token_count\": 101\n        },\n        {\n            \"elapsed_time\": 549.8991012573242,\n            \"token_count\": 102\n        },\n        {\n            \"elapsed_time\": 600.9378433227539,\n            \"token_count\": 103\n        },\n        {\n            \"elapsed_time\": 585.5910778045654,\n            \"token_count\": 104\n        },\n        {\n            \"elapsed_time\": 616.5471076965332,\n            \"token_count\": 105\n        },\n        {\n            \"elapsed_time\": 541.7020320892334,\n            \"token_count\": 106\n        },\n        {\n            \"elapsed_time\": 532.3741436004639,\n            \"token_count\": 107\n        },\n        {\n            \"elapsed_time\": 532.3798656463623,\n            \"token_count\": 108\n        },\n        {\n            \"elapsed_time\": 603.1248569488525,\n            \"token_count\": 109\n        },\n        {\n            \"elapsed_time\": 603.3599376678467,\n            \"token_count\": 110\n        },\n        {\n            \"elapsed_time\": 583.3499431610107,\n            \"token_count\": 111\n        },\n        {\n            \"elapsed_time\": 579.2579650878906,\n            \"token_count\": 112\n        },\n        {\n            \"elapsed_time\": 621.3488578796387,\n            \"token_count\": 113\n        },\n        {\n            \"elapsed_time\": 636.3058090209961,\n            \"token_count\": 114\n        },\n        {\n            \"elapsed_time\": 567.2318935394287,\n            \"token_count\": 115\n        },\n        {\n            \"elapsed_time\": 585.3190422058105,\n            \"token_count\": 116\n        },\n        {\n            \"elapsed_time\": 609.0958118438721,\n            \"token_count\": 117\n        },\n        {\n            \"elapsed_time\": 640.0949954986572,\n            \"token_count\": 118\n        },\n        {\n            \"elapsed_time\": 621.1788654327393,\n            \"token_count\": 119\n        },\n        {\n            \"elapsed_time\": 620.668888092041,\n            \"token_count\": 120\n        },\n        {\n            \"elapsed_time\": 620.9800243377686,\n            \"token_count\": 121\n        },\n        {\n            \"elapsed_time\": 660.9649658203125,\n            \"token_count\": 122\n        },\n        {\n            \"elapsed_time\": 604.9530506134033,\n            \"token_count\": 123\n        },\n        {\n            \"elapsed_time\": 598.1481075286865,\n            \"token_count\": 124\n        },\n        {\n            \"elapsed_time\": 679.0461540222168,\n            \"token_count\": 125\n        },\n        {\n            \"elapsed_time\": 607.1128845214844,\n            \"token_count\": 126\n        },\n        {\n            \"elapsed_time\": 645.9732055664062,\n            \"token_count\": 127\n        },\n        {\n            \"elapsed_time\": 646.8539237976074,\n            \"token_count\": 128\n        },\n        {\n            \"elapsed_time\": 637.1009349822998,\n            \"token_count\": 129\n        },\n        {\n            \"elapsed_time\": 679.2159080505371,\n            \"token_count\": 130\n        },\n        {\n            \"elapsed_time\": 649.979829788208,\n            \"token_count\": 131\n        },\n        {\n            \"elapsed_time\": 654.9172401428223,\n            \"token_count\": 132\n        },\n        {\n            \"elapsed_time\": 684.7538948059082,\n            \"token_count\": 133\n        },\n        {\n            \"elapsed_time\": 710.5560302734375,\n            \"token_count\": 134\n        },\n        {\n            \"elapsed_time\": 750.6282329559326,\n            \"token_count\": 135\n        },\n        {\n            \"elapsed_time\": 703.193187713623,\n            \"token_count\": 136\n        },\n        {\n            \"elapsed_time\": 764.772891998291,\n            \"token_count\": 137\n        },\n        {\n            \"elapsed_time\": 719.7620868682861,\n            \"token_count\": 138\n        },\n        {\n            \"elapsed_time\": 709.5608711242676,\n            \"token_count\": 139\n        },\n        {\n            \"elapsed_time\": 697.6878643035889,\n            \"token_count\": 140\n        },\n        {\n            \"elapsed_time\": 718.1949615478516,\n            \"token_count\": 141\n        },\n        {\n            \"elapsed_time\": 785.1710319519043,\n            \"token_count\": 142\n        },\n        {\n            \"elapsed_time\": 790.3251647949219,\n            \"token_count\": 143\n        },\n        {\n            \"elapsed_time\": 707.4730396270752,\n            \"token_count\": 144\n        },\n        {\n            \"elapsed_time\": 673.3918190002441,\n            \"token_count\": 145\n        },\n        {\n            \"elapsed_time\": 719.782829284668,\n            \"token_count\": 146\n        },\n        {\n            \"elapsed_time\": 749.7279644012451,\n            \"token_count\": 147\n        },\n        {\n            \"elapsed_time\": 780.7950973510742,\n            \"token_count\": 148\n        },\n        {\n            \"elapsed_time\": 771.7950344085693,\n            \"token_count\": 149\n        },\n        {\n            \"elapsed_time\": 727.4320125579834,\n            \"token_count\": 150\n        },\n        {\n            \"elapsed_time\": 833.5781097412109,\n            \"token_count\": 151\n        },\n        {\n            \"elapsed_time\": 798.9060878753662,\n            \"token_count\": 152\n        },\n        {\n            \"elapsed_time\": 758.4891319274902,\n            \"token_count\": 153\n        },\n        {\n            \"elapsed_time\": 789.5581722259521,\n            \"token_count\": 154\n        },\n        {\n            \"elapsed_time\": 859.1389656066895,\n            \"token_count\": 155\n        },\n        {\n            \"elapsed_time\": 824.2921829223633,\n            \"token_count\": 156\n        },\n        {\n            \"elapsed_time\": 847.944974899292,\n            \"token_count\": 157\n        },\n        {\n            \"elapsed_time\": 809.7872734069824,\n            \"token_count\": 158\n        },\n        {\n            \"elapsed_time\": 809.3380928039551,\n            \"token_count\": 159\n        },\n        {\n            \"elapsed_time\": 788.1348133087158,\n            \"token_count\": 160\n        },\n        {\n            \"elapsed_time\": 827.103853225708,\n            \"token_count\": 161\n        },\n        {\n            \"elapsed_time\": 813.5678768157959,\n            \"token_count\": 162\n        },\n        {\n            \"elapsed_time\": 981.788158416748,\n            \"token_count\": 163\n        },\n        {\n            \"elapsed_time\": 894.0699100494385,\n            \"token_count\": 164\n        },\n        {\n            \"elapsed_time\": 834.8019123077393,\n            \"token_count\": 165\n        },\n        {\n            \"elapsed_time\": 845.6692695617676,\n            \"token_count\": 166\n        },\n        {\n            \"elapsed_time\": 823.1420516967773,\n            \"token_count\": 167\n        },\n        {\n            \"elapsed_time\": 891.5278911590576,\n            \"token_count\": 168\n        },\n        {\n            \"elapsed_time\": 834.7651958465576,\n            \"token_count\": 169\n        },\n        {\n            \"elapsed_time\": 845.1728820800781,\n            \"token_count\": 170\n        },\n        {\n            \"elapsed_time\": 866.7709827423096,\n            \"token_count\": 171\n        },\n        {\n            \"elapsed_time\": 860.828161239624,\n            \"token_count\": 172\n        },\n        {\n            \"elapsed_time\": 834.5828056335449,\n            \"token_count\": 173\n        },\n        {\n            \"elapsed_time\": 2639.5750045776367,\n            \"token_count\": 174\n        }\n    ],\n    \"max_token_count_per_time\": {\n        \"200\": 27,\n        \"300\": 56,\n        \"400\": 77,\n        \"500\": 94,\n        \"600\": 124,\n        \"700\": 145,\n        \"800\": 160,\n        \"900\": 173,\n        \"1000\": 173,\n        \"1100\": 173,\n        \"1200\": 173,\n        \"1300\": 173,\n        \"1400\": 173,\n        \"1500\": 173\n    }\n}"
  },
  {
    "path": "reports/inference_result/bidaf+elmo-cpu.json",
    "content": "{\n    \"average_raw_to_tensor\": 0.08636821400035512,\n    \"average_tensor_to_predict\": 35.91229337634462,\n    \"average_end_to_end\": 35.99866159034498,\n    \"tensor_to_predicts\": [\n        {\n            \"elapsed_time\": 409.0240001678467,\n            \"token_count\": 10\n        },\n        {\n            \"elapsed_time\": 424.2978096008301,\n            \"token_count\": 11\n        },\n        {\n            \"elapsed_time\": 453.9320468902588,\n            \"token_count\": 12\n        },\n        {\n            \"elapsed_time\": 484.1651916503906,\n            \"token_count\": 13\n        },\n        {\n            \"elapsed_time\": 516.8399810791016,\n            \"token_count\": 14\n        },\n        {\n            \"elapsed_time\": 553.3709526062012,\n            \"token_count\": 15\n        },\n        {\n            \"elapsed_time\": 577.5477886199951,\n            \"token_count\": 16\n        },\n        {\n            \"elapsed_time\": 614.0329837799072,\n            \"token_count\": 17\n        },\n        {\n            \"elapsed_time\": 651.1709690093994,\n            \"token_count\": 18\n        },\n        {\n            \"elapsed_time\": 670.1388359069824,\n            \"token_count\": 19\n        },\n        {\n            \"elapsed_time\": 749.9408721923828,\n            \"token_count\": 20\n        },\n        {\n            \"elapsed_time\": 765.0890350341797,\n            \"token_count\": 21\n        },\n        {\n            \"elapsed_time\": 735.0962162017822,\n            \"token_count\": 22\n        },\n        {\n            \"elapsed_time\": 782.1478843688965,\n            \"token_count\": 23\n        },\n        {\n            \"elapsed_time\": 796.2613105773926,\n            \"token_count\": 24\n        },\n        {\n            \"elapsed_time\": 839.2610549926758,\n            \"token_count\": 25\n        },\n        {\n            \"elapsed_time\": 824.5720863342285,\n            \"token_count\": 26\n        },\n        {\n            \"elapsed_time\": 854.9871444702148,\n            \"token_count\": 27\n        },\n        {\n            \"elapsed_time\": 906.904935836792,\n            \"token_count\": 28\n        },\n        {\n            \"elapsed_time\": 916.7580604553223,\n            \"token_count\": 29\n        },\n        {\n            \"elapsed_time\": 956.9301605224609,\n            \"token_count\": 30\n        },\n        {\n            \"elapsed_time\": 1003.1847953796387,\n            \"token_count\": 31\n        },\n        {\n            \"elapsed_time\": 1117.8290843963623,\n            \"token_count\": 32\n        },\n        {\n            \"elapsed_time\": 1066.0440921783447,\n            \"token_count\": 33\n        },\n        {\n            \"elapsed_time\": 1074.455976486206,\n            \"token_count\": 34\n        },\n        {\n            \"elapsed_time\": 1105.8878898620605,\n            \"token_count\": 35\n        },\n        {\n            \"elapsed_time\": 1122.76291847229,\n            \"token_count\": 36\n        },\n        {\n            \"elapsed_time\": 1168.5528755187988,\n            \"token_count\": 37\n        },\n        {\n            \"elapsed_time\": 1191.5271282196045,\n            \"token_count\": 38\n        },\n        {\n            \"elapsed_time\": 1234.421968460083,\n            \"token_count\": 39\n        },\n        {\n            \"elapsed_time\": 1255.2640438079834,\n            \"token_count\": 40\n        },\n        {\n            \"elapsed_time\": 1317.5408840179443,\n            \"token_count\": 41\n        },\n        {\n            \"elapsed_time\": 1329.1430473327637,\n            \"token_count\": 42\n        },\n        {\n            \"elapsed_time\": 1338.5398387908936,\n            \"token_count\": 43\n        },\n        {\n            \"elapsed_time\": 1363.4569644927979,\n            \"token_count\": 44\n        },\n        {\n            \"elapsed_time\": 1412.2247695922852,\n            \"token_count\": 45\n        },\n        {\n            \"elapsed_time\": 1462.920904159546,\n            \"token_count\": 46\n        },\n        {\n            \"elapsed_time\": 1506.943941116333,\n            \"token_count\": 47\n        }\n    ],\n    \"max_token_count_per_time\": {\n        \"500\": 13,\n        \"600\": 16,\n        \"700\": 19,\n        \"800\": 24,\n        \"900\": 27,\n        \"1000\": 30,\n        \"1100\": 34,\n        \"1200\": 38,\n        \"1300\": 40,\n        \"1400\": 44,\n        \"1500\": 46\n    }\n}"
  },
  {
    "path": "reports/inference_result/bidaf-cpu.json",
    "content": "{\n    \"average_raw_to_tensor\": 5.867820315890842,\n    \"average_tensor_to_predict\": 335.21361013855596,\n    \"average_end_to_end\": 341.08143045444683,\n    \"tensor_to_predicts\": [\n        {\n            \"elapsed_time\": 62.13784217834473,\n            \"token_count\": 10\n        },\n        {\n            \"elapsed_time\": 16.222238540649414,\n            \"token_count\": 11\n        },\n        {\n            \"elapsed_time\": 16.011953353881836,\n            \"token_count\": 12\n        },\n        {\n            \"elapsed_time\": 17.163991928100586,\n            \"token_count\": 13\n        },\n        {\n            \"elapsed_time\": 18.846988677978516,\n            \"token_count\": 14\n        },\n        {\n            \"elapsed_time\": 19.0279483795166,\n            \"token_count\": 15\n        },\n        {\n            \"elapsed_time\": 19.305944442749023,\n            \"token_count\": 16\n        },\n        {\n            \"elapsed_time\": 20.991086959838867,\n            \"token_count\": 17\n        },\n        {\n            \"elapsed_time\": 21.973133087158203,\n            \"token_count\": 18\n        },\n        {\n            \"elapsed_time\": 24.37877655029297,\n            \"token_count\": 19\n        },\n        {\n            \"elapsed_time\": 23.483991622924805,\n            \"token_count\": 20\n        },\n        {\n            \"elapsed_time\": 25.213956832885742,\n            \"token_count\": 21\n        },\n        {\n            \"elapsed_time\": 25.713205337524414,\n            \"token_count\": 22\n        },\n        {\n            \"elapsed_time\": 27.135133743286133,\n            \"token_count\": 23\n        },\n        {\n            \"elapsed_time\": 27.87923812866211,\n            \"token_count\": 24\n        },\n        {\n            \"elapsed_time\": 29.041290283203125,\n            \"token_count\": 25\n        },\n        {\n            \"elapsed_time\": 31.92901611328125,\n            \"token_count\": 26\n        },\n        {\n            \"elapsed_time\": 35.86316108703613,\n            \"token_count\": 27\n        },\n        {\n            \"elapsed_time\": 32.334089279174805,\n            \"token_count\": 28\n        },\n        {\n            \"elapsed_time\": 33.53714942932129,\n            \"token_count\": 29\n        },\n        {\n            \"elapsed_time\": 35.82119941711426,\n            \"token_count\": 30\n        },\n        {\n            \"elapsed_time\": 38.6960506439209,\n            \"token_count\": 31\n        },\n        {\n            \"elapsed_time\": 37.36686706542969,\n            \"token_count\": 32\n        },\n        {\n            \"elapsed_time\": 41.869163513183594,\n            \"token_count\": 33\n        },\n        {\n            \"elapsed_time\": 39.75200653076172,\n            \"token_count\": 34\n        },\n        {\n            \"elapsed_time\": 40.361881256103516,\n            \"token_count\": 35\n        },\n        {\n            \"elapsed_time\": 42.598724365234375,\n            \"token_count\": 36\n        },\n        {\n            \"elapsed_time\": 43.7779426574707,\n            \"token_count\": 37\n        },\n        {\n            \"elapsed_time\": 44.051170349121094,\n            \"token_count\": 38\n        },\n        {\n            \"elapsed_time\": 48.08402061462402,\n            \"token_count\": 39\n        },\n        {\n            \"elapsed_time\": 46.10419273376465,\n            \"token_count\": 40\n        },\n        {\n            \"elapsed_time\": 49.285888671875,\n            \"token_count\": 41\n        },\n        {\n            \"elapsed_time\": 54.31175231933594,\n            \"token_count\": 42\n        },\n        {\n            \"elapsed_time\": 51.783084869384766,\n            \"token_count\": 43\n        },\n        {\n            \"elapsed_time\": 54.353952407836914,\n            \"token_count\": 44\n        },\n        {\n            \"elapsed_time\": 59.13496017456055,\n            \"token_count\": 45\n        },\n        {\n            \"elapsed_time\": 56.42294883728027,\n            \"token_count\": 46\n        },\n        {\n            \"elapsed_time\": 58.589935302734375,\n            \"token_count\": 47\n        },\n        {\n            \"elapsed_time\": 57.83200263977051,\n            \"token_count\": 48\n        },\n        {\n            \"elapsed_time\": 58.294057846069336,\n            \"token_count\": 49\n        },\n        {\n            \"elapsed_time\": 58.44879150390625,\n            \"token_count\": 50\n        },\n        {\n            \"elapsed_time\": 62.30425834655762,\n            \"token_count\": 51\n        },\n        {\n            \"elapsed_time\": 62.01767921447754,\n            \"token_count\": 52\n        },\n        {\n            \"elapsed_time\": 63.64321708679199,\n            \"token_count\": 53\n        },\n        {\n            \"elapsed_time\": 65.79303741455078,\n            \"token_count\": 54\n        },\n        {\n            \"elapsed_time\": 66.87211990356445,\n            \"token_count\": 55\n        },\n        {\n            \"elapsed_time\": 68.1452751159668,\n            \"token_count\": 56\n        },\n        {\n            \"elapsed_time\": 67.0778751373291,\n            \"token_count\": 57\n        },\n        {\n            \"elapsed_time\": 67.70110130310059,\n            \"token_count\": 58\n        },\n        {\n            \"elapsed_time\": 71.57492637634277,\n            \"token_count\": 59\n        },\n        {\n            \"elapsed_time\": 71.33722305297852,\n            \"token_count\": 60\n        },\n        {\n            \"elapsed_time\": 74.10407066345215,\n            \"token_count\": 61\n        },\n        {\n            \"elapsed_time\": 78.57704162597656,\n            \"token_count\": 62\n        },\n        {\n            \"elapsed_time\": 78.96971702575684,\n            \"token_count\": 63\n        },\n        {\n            \"elapsed_time\": 78.47476005554199,\n            \"token_count\": 64\n        },\n        {\n            \"elapsed_time\": 82.55791664123535,\n            \"token_count\": 65\n        },\n        {\n            \"elapsed_time\": 83.16898345947266,\n            \"token_count\": 66\n        },\n        {\n            \"elapsed_time\": 85.07394790649414,\n            \"token_count\": 67\n        },\n        {\n            \"elapsed_time\": 84.61689949035645,\n            \"token_count\": 68\n        },\n        {\n            \"elapsed_time\": 87.51821517944336,\n            \"token_count\": 69\n        },\n        {\n            \"elapsed_time\": 86.29393577575684,\n            \"token_count\": 70\n        },\n        {\n            \"elapsed_time\": 87.97216415405273,\n            \"token_count\": 71\n        },\n        {\n            \"elapsed_time\": 87.57925033569336,\n            \"token_count\": 72\n        },\n        {\n            \"elapsed_time\": 90.8820629119873,\n            \"token_count\": 73\n        },\n        {\n            \"elapsed_time\": 93.00613403320312,\n            \"token_count\": 74\n        },\n        {\n            \"elapsed_time\": 94.38586235046387,\n            \"token_count\": 75\n        },\n        {\n            \"elapsed_time\": 98.09422492980957,\n            \"token_count\": 76\n        },\n        {\n            \"elapsed_time\": 98.31595420837402,\n            \"token_count\": 77\n        },\n        {\n            \"elapsed_time\": 97.38397598266602,\n            \"token_count\": 78\n        },\n        {\n            \"elapsed_time\": 100.89397430419922,\n            \"token_count\": 79\n        },\n        {\n            \"elapsed_time\": 99.67780113220215,\n            \"token_count\": 80\n        },\n        {\n            \"elapsed_time\": 101.14288330078125,\n            \"token_count\": 81\n        },\n        {\n            \"elapsed_time\": 111.35220527648926,\n            \"token_count\": 82\n        },\n        {\n            \"elapsed_time\": 108.67094993591309,\n            \"token_count\": 83\n        },\n        {\n            \"elapsed_time\": 107.03277587890625,\n            \"token_count\": 84\n        },\n        {\n            \"elapsed_time\": 110.61596870422363,\n            \"token_count\": 85\n        },\n        {\n            \"elapsed_time\": 114.74990844726562,\n            \"token_count\": 86\n        },\n        {\n            \"elapsed_time\": 113.78312110900879,\n            \"token_count\": 87\n        },\n        {\n            \"elapsed_time\": 114.03489112854004,\n            \"token_count\": 88\n        },\n        {\n            \"elapsed_time\": 119.4310188293457,\n            \"token_count\": 89\n        },\n        {\n            \"elapsed_time\": 118.51787567138672,\n            \"token_count\": 90\n        },\n        {\n            \"elapsed_time\": 117.49768257141113,\n            \"token_count\": 91\n        },\n        {\n            \"elapsed_time\": 118.64495277404785,\n            \"token_count\": 92\n        },\n        {\n            \"elapsed_time\": 121.5522289276123,\n            \"token_count\": 93\n        },\n        {\n            \"elapsed_time\": 127.58016586303711,\n            \"token_count\": 94\n        },\n        {\n            \"elapsed_time\": 123.76904487609863,\n            \"token_count\": 95\n        },\n        {\n            \"elapsed_time\": 128.75604629516602,\n            \"token_count\": 96\n        },\n        {\n            \"elapsed_time\": 128.5421848297119,\n            \"token_count\": 97\n        },\n        {\n            \"elapsed_time\": 129.12487983703613,\n            \"token_count\": 98\n        },\n        {\n            \"elapsed_time\": 130.34701347351074,\n            \"token_count\": 99\n        },\n        {\n            \"elapsed_time\": 137.50696182250977,\n            \"token_count\": 100\n        },\n        {\n            \"elapsed_time\": 134.9341869354248,\n            \"token_count\": 101\n        },\n        {\n            \"elapsed_time\": 138.17977905273438,\n            \"token_count\": 102\n        },\n        {\n            \"elapsed_time\": 140.9752368927002,\n            \"token_count\": 103\n        },\n        {\n            \"elapsed_time\": 139.86802101135254,\n            \"token_count\": 104\n        },\n        {\n            \"elapsed_time\": 139.07098770141602,\n            \"token_count\": 105\n        },\n        {\n            \"elapsed_time\": 142.47798919677734,\n            \"token_count\": 106\n        },\n        {\n            \"elapsed_time\": 146.39711380004883,\n            \"token_count\": 107\n        },\n        {\n            \"elapsed_time\": 147.14717864990234,\n            \"token_count\": 108\n        },\n        {\n            \"elapsed_time\": 151.0782241821289,\n            \"token_count\": 109\n        },\n        {\n            \"elapsed_time\": 150.7718563079834,\n            \"token_count\": 110\n        },\n        {\n            \"elapsed_time\": 149.71375465393066,\n            \"token_count\": 111\n        },\n        {\n            \"elapsed_time\": 152.82392501831055,\n            \"token_count\": 112\n        },\n        {\n            \"elapsed_time\": 152.84490585327148,\n            \"token_count\": 113\n        },\n        {\n            \"elapsed_time\": 156.4350128173828,\n            \"token_count\": 114\n        },\n        {\n            \"elapsed_time\": 165.1589870452881,\n            \"token_count\": 115\n        },\n        {\n            \"elapsed_time\": 155.11083602905273,\n            \"token_count\": 116\n        },\n        {\n            \"elapsed_time\": 156.81791305541992,\n            \"token_count\": 117\n        },\n        {\n            \"elapsed_time\": 185.23025512695312,\n            \"token_count\": 118\n        },\n        {\n            \"elapsed_time\": 189.79501724243164,\n            \"token_count\": 119\n        },\n        {\n            \"elapsed_time\": 166.3830280303955,\n            \"token_count\": 120\n        },\n        {\n            \"elapsed_time\": 167.36197471618652,\n            \"token_count\": 121\n        },\n        {\n            \"elapsed_time\": 168.60198974609375,\n            \"token_count\": 122\n        },\n        {\n            \"elapsed_time\": 169.20924186706543,\n            \"token_count\": 123\n        },\n        {\n            \"elapsed_time\": 165.70186614990234,\n            \"token_count\": 124\n        },\n        {\n            \"elapsed_time\": 168.40124130249023,\n            \"token_count\": 125\n        },\n        {\n            \"elapsed_time\": 169.97289657592773,\n            \"token_count\": 126\n        },\n        {\n            \"elapsed_time\": 174.9289035797119,\n            \"token_count\": 127\n        },\n        {\n            \"elapsed_time\": 177.9332160949707,\n            \"token_count\": 128\n        },\n        {\n            \"elapsed_time\": 186.9361400604248,\n            \"token_count\": 129\n        },\n        {\n            \"elapsed_time\": 181.50711059570312,\n            \"token_count\": 130\n        },\n        {\n            \"elapsed_time\": 185.3930950164795,\n            \"token_count\": 131\n        },\n        {\n            \"elapsed_time\": 187.3338222503662,\n            \"token_count\": 132\n        },\n        {\n            \"elapsed_time\": 188.9479160308838,\n            \"token_count\": 133\n        },\n        {\n            \"elapsed_time\": 185.4879856109619,\n            \"token_count\": 134\n        },\n        {\n            \"elapsed_time\": 193.09210777282715,\n            \"token_count\": 135\n        },\n        {\n            \"elapsed_time\": 194.12469863891602,\n            \"token_count\": 136\n        },\n        {\n            \"elapsed_time\": 193.20178031921387,\n            \"token_count\": 137\n        },\n        {\n            \"elapsed_time\": 202.51083374023438,\n            \"token_count\": 138\n        },\n        {\n            \"elapsed_time\": 197.56317138671875,\n            \"token_count\": 139\n        },\n        {\n            \"elapsed_time\": 197.5119113922119,\n            \"token_count\": 140\n        },\n        {\n            \"elapsed_time\": 204.29611206054688,\n            \"token_count\": 141\n        },\n        {\n            \"elapsed_time\": 211.94195747375488,\n            \"token_count\": 142\n        },\n        {\n            \"elapsed_time\": 224.75862503051758,\n            \"token_count\": 143\n        },\n        {\n            \"elapsed_time\": 220.66712379455566,\n            \"token_count\": 144\n        },\n        {\n            \"elapsed_time\": 212.80717849731445,\n            \"token_count\": 145\n        },\n        {\n            \"elapsed_time\": 216.4897918701172,\n            \"token_count\": 146\n        },\n        {\n            \"elapsed_time\": 224.39289093017578,\n            \"token_count\": 147\n        },\n        {\n            \"elapsed_time\": 225.4958152770996,\n            \"token_count\": 148\n        },\n        {\n            \"elapsed_time\": 223.88195991516113,\n            \"token_count\": 149\n        },\n        {\n            \"elapsed_time\": 222.53894805908203,\n            \"token_count\": 150\n        },\n        {\n            \"elapsed_time\": 227.2341251373291,\n            \"token_count\": 151\n        },\n        {\n            \"elapsed_time\": 234.94195938110352,\n            \"token_count\": 152\n        },\n        {\n            \"elapsed_time\": 230.147123336792,\n            \"token_count\": 153\n        },\n        {\n            \"elapsed_time\": 230.87072372436523,\n            \"token_count\": 154\n        },\n        {\n            \"elapsed_time\": 232.12695121765137,\n            \"token_count\": 155\n        },\n        {\n            \"elapsed_time\": 241.40596389770508,\n            \"token_count\": 156\n        },\n        {\n            \"elapsed_time\": 242.41209030151367,\n            \"token_count\": 157\n        },\n        {\n            \"elapsed_time\": 239.9299144744873,\n            \"token_count\": 158\n        },\n        {\n            \"elapsed_time\": 237.17188835144043,\n            \"token_count\": 159\n        },\n        {\n            \"elapsed_time\": 245.01991271972656,\n            \"token_count\": 160\n        },\n        {\n            \"elapsed_time\": 238.65079879760742,\n            \"token_count\": 161\n        },\n        {\n            \"elapsed_time\": 242.27476119995117,\n            \"token_count\": 162\n        },\n        {\n            \"elapsed_time\": 254.75788116455078,\n            \"token_count\": 163\n        },\n        {\n            \"elapsed_time\": 254.15706634521484,\n            \"token_count\": 164\n        },\n        {\n            \"elapsed_time\": 252.48408317565918,\n            \"token_count\": 165\n        },\n        {\n            \"elapsed_time\": 286.1020565032959,\n            \"token_count\": 166\n        },\n        {\n            \"elapsed_time\": 264.57810401916504,\n            \"token_count\": 167\n        },\n        {\n            \"elapsed_time\": 254.62985038757324,\n            \"token_count\": 168\n        },\n        {\n            \"elapsed_time\": 254.70685958862305,\n            \"token_count\": 169\n        },\n        {\n            \"elapsed_time\": 257.9371929168701,\n            \"token_count\": 170\n        },\n        {\n            \"elapsed_time\": 257.0948600769043,\n            \"token_count\": 171\n        },\n        {\n            \"elapsed_time\": 264.62578773498535,\n            \"token_count\": 172\n        },\n        {\n            \"elapsed_time\": 263.8969421386719,\n            \"token_count\": 173\n        },\n        {\n            \"elapsed_time\": 266.603946685791,\n            \"token_count\": 174\n        },\n        {\n            \"elapsed_time\": 277.7128219604492,\n            \"token_count\": 175\n        },\n        {\n            \"elapsed_time\": 271.49009704589844,\n            \"token_count\": 176\n        },\n        {\n            \"elapsed_time\": 274.8551368713379,\n            \"token_count\": 177\n        },\n        {\n            \"elapsed_time\": 276.7610549926758,\n            \"token_count\": 178\n        },\n        {\n            \"elapsed_time\": 281.4028263092041,\n            \"token_count\": 179\n        },\n        {\n            \"elapsed_time\": 285.02702713012695,\n            \"token_count\": 180\n        },\n        {\n            \"elapsed_time\": 280.03525733947754,\n            \"token_count\": 181\n        },\n        {\n            \"elapsed_time\": 286.7908477783203,\n            \"token_count\": 182\n        },\n        {\n            \"elapsed_time\": 288.87200355529785,\n            \"token_count\": 183\n        },\n        {\n            \"elapsed_time\": 292.6919460296631,\n            \"token_count\": 184\n        },\n        {\n            \"elapsed_time\": 289.304256439209,\n            \"token_count\": 185\n        },\n        {\n            \"elapsed_time\": 293.3039665222168,\n            \"token_count\": 186\n        },\n        {\n            \"elapsed_time\": 293.20597648620605,\n            \"token_count\": 187\n        },\n        {\n            \"elapsed_time\": 300.9510040283203,\n            \"token_count\": 188\n        },\n        {\n            \"elapsed_time\": 305.8469295501709,\n            \"token_count\": 189\n        },\n        {\n            \"elapsed_time\": 302.00982093811035,\n            \"token_count\": 190\n        },\n        {\n            \"elapsed_time\": 306.7891597747803,\n            \"token_count\": 191\n        },\n        {\n            \"elapsed_time\": 316.4820671081543,\n            \"token_count\": 192\n        },\n        {\n            \"elapsed_time\": 304.14319038391113,\n            \"token_count\": 193\n        },\n        {\n            \"elapsed_time\": 310.38689613342285,\n            \"token_count\": 194\n        },\n        {\n            \"elapsed_time\": 313.3249282836914,\n            \"token_count\": 195\n        },\n        {\n            \"elapsed_time\": 315.26994705200195,\n            \"token_count\": 196\n        },\n        {\n            \"elapsed_time\": 311.63501739501953,\n            \"token_count\": 197\n        },\n        {\n            \"elapsed_time\": 315.57703018188477,\n            \"token_count\": 198\n        },\n        {\n            \"elapsed_time\": 331.58397674560547,\n            \"token_count\": 199\n        },\n        {\n            \"elapsed_time\": 336.7290496826172,\n            \"token_count\": 200\n        },\n        {\n            \"elapsed_time\": 344.620943069458,\n            \"token_count\": 201\n        },\n        {\n            \"elapsed_time\": 329.3278217315674,\n            \"token_count\": 202\n        },\n        {\n            \"elapsed_time\": 325.6492614746094,\n            \"token_count\": 203\n        },\n        {\n            \"elapsed_time\": 333.97507667541504,\n            \"token_count\": 204\n        },\n        {\n            \"elapsed_time\": 335.9990119934082,\n            \"token_count\": 205\n        },\n        {\n            \"elapsed_time\": 340.33703804016113,\n            \"token_count\": 206\n        },\n        {\n            \"elapsed_time\": 344.44308280944824,\n            \"token_count\": 207\n        },\n        {\n            \"elapsed_time\": 344.1309928894043,\n            \"token_count\": 208\n        },\n        {\n            \"elapsed_time\": 345.3068733215332,\n            \"token_count\": 209\n        },\n        {\n            \"elapsed_time\": 355.1821708679199,\n            \"token_count\": 210\n        },\n        {\n            \"elapsed_time\": 374.6027946472168,\n            \"token_count\": 211\n        },\n        {\n            \"elapsed_time\": 361.3901138305664,\n            \"token_count\": 212\n        },\n        {\n            \"elapsed_time\": 358.11495780944824,\n            \"token_count\": 213\n        },\n        {\n            \"elapsed_time\": 355.5760383605957,\n            \"token_count\": 214\n        },\n        {\n            \"elapsed_time\": 366.69421195983887,\n            \"token_count\": 215\n        },\n        {\n            \"elapsed_time\": 359.8208427429199,\n            \"token_count\": 216\n        },\n        {\n            \"elapsed_time\": 365.8251762390137,\n            \"token_count\": 217\n        },\n        {\n            \"elapsed_time\": 365.8897876739502,\n            \"token_count\": 218\n        },\n        {\n            \"elapsed_time\": 369.11797523498535,\n            \"token_count\": 219\n        },\n        {\n            \"elapsed_time\": 365.0979995727539,\n            \"token_count\": 220\n        },\n        {\n            \"elapsed_time\": 371.0436820983887,\n            \"token_count\": 221\n        },\n        {\n            \"elapsed_time\": 378.57794761657715,\n            \"token_count\": 222\n        },\n        {\n            \"elapsed_time\": 380.0618648529053,\n            \"token_count\": 223\n        },\n        {\n            \"elapsed_time\": 380.5208206176758,\n            \"token_count\": 224\n        },\n        {\n            \"elapsed_time\": 396.2109088897705,\n            \"token_count\": 225\n        },\n        {\n            \"elapsed_time\": 378.8738250732422,\n            \"token_count\": 226\n        },\n        {\n            \"elapsed_time\": 392.53902435302734,\n            \"token_count\": 227\n        },\n        {\n            \"elapsed_time\": 412.625789642334,\n            \"token_count\": 228\n        },\n        {\n            \"elapsed_time\": 400.84385871887207,\n            \"token_count\": 229\n        },\n        {\n            \"elapsed_time\": 395.24197578430176,\n            \"token_count\": 230\n        },\n        {\n            \"elapsed_time\": 399.5180130004883,\n            \"token_count\": 231\n        },\n        {\n            \"elapsed_time\": 402.25720405578613,\n            \"token_count\": 232\n        },\n        {\n            \"elapsed_time\": 403.2571315765381,\n            \"token_count\": 233\n        },\n        {\n            \"elapsed_time\": 401.79920196533203,\n            \"token_count\": 234\n        },\n        {\n            \"elapsed_time\": 401.5331268310547,\n            \"token_count\": 235\n        },\n        {\n            \"elapsed_time\": 399.3878364562988,\n            \"token_count\": 236\n        },\n        {\n            \"elapsed_time\": 425.7321357727051,\n            \"token_count\": 237\n        },\n        {\n            \"elapsed_time\": 407.9318046569824,\n            \"token_count\": 238\n        },\n        {\n            \"elapsed_time\": 417.72007942199707,\n            \"token_count\": 239\n        },\n        {\n            \"elapsed_time\": 415.2061939239502,\n            \"token_count\": 240\n        },\n        {\n            \"elapsed_time\": 418.8380241394043,\n            \"token_count\": 241\n        },\n        {\n            \"elapsed_time\": 425.85301399230957,\n            \"token_count\": 242\n        },\n        {\n            \"elapsed_time\": 420.6819534301758,\n            \"token_count\": 243\n        },\n        {\n            \"elapsed_time\": 417.0877933502197,\n            \"token_count\": 244\n        },\n        {\n            \"elapsed_time\": 426.131010055542,\n            \"token_count\": 245\n        },\n        {\n            \"elapsed_time\": 420.92084884643555,\n            \"token_count\": 246\n        },\n        {\n            \"elapsed_time\": 426.50508880615234,\n            \"token_count\": 247\n        },\n        {\n            \"elapsed_time\": 429.9001693725586,\n            \"token_count\": 248\n        },\n        {\n            \"elapsed_time\": 435.1069927215576,\n            \"token_count\": 249\n        },\n        {\n            \"elapsed_time\": 429.72278594970703,\n            \"token_count\": 250\n        },\n        {\n            \"elapsed_time\": 446.80023193359375,\n            \"token_count\": 251\n        },\n        {\n            \"elapsed_time\": 494.2159652709961,\n            \"token_count\": 252\n        },\n        {\n            \"elapsed_time\": 455.03783226013184,\n            \"token_count\": 253\n        },\n        {\n            \"elapsed_time\": 451.8866539001465,\n            \"token_count\": 254\n        },\n        {\n            \"elapsed_time\": 452.4967670440674,\n            \"token_count\": 255\n        },\n        {\n            \"elapsed_time\": 448.06694984436035,\n            \"token_count\": 256\n        },\n        {\n            \"elapsed_time\": 450.3498077392578,\n            \"token_count\": 257\n        },\n        {\n            \"elapsed_time\": 462.3229503631592,\n            \"token_count\": 258\n        },\n        {\n            \"elapsed_time\": 450.897216796875,\n            \"token_count\": 259\n        },\n        {\n            \"elapsed_time\": 463.34099769592285,\n            \"token_count\": 260\n        },\n        {\n            \"elapsed_time\": 468.00875663757324,\n            \"token_count\": 261\n        },\n        {\n            \"elapsed_time\": 462.4669551849365,\n            \"token_count\": 262\n        },\n        {\n            \"elapsed_time\": 466.43567085266113,\n            \"token_count\": 263\n        },\n        {\n            \"elapsed_time\": 465.5437469482422,\n            \"token_count\": 264\n        },\n        {\n            \"elapsed_time\": 473.7050533294678,\n            \"token_count\": 265\n        },\n        {\n            \"elapsed_time\": 480.4959297180176,\n            \"token_count\": 266\n        },\n        {\n            \"elapsed_time\": 484.72118377685547,\n            \"token_count\": 267\n        },\n        {\n            \"elapsed_time\": 477.4348735809326,\n            \"token_count\": 268\n        },\n        {\n            \"elapsed_time\": 478.02090644836426,\n            \"token_count\": 269\n        },\n        {\n            \"elapsed_time\": 491.2538528442383,\n            \"token_count\": 270\n        },\n        {\n            \"elapsed_time\": 499.15480613708496,\n            \"token_count\": 271\n        },\n        {\n            \"elapsed_time\": 492.2609329223633,\n            \"token_count\": 272\n        },\n        {\n            \"elapsed_time\": 502.20274925231934,\n            \"token_count\": 273\n        },\n        {\n            \"elapsed_time\": 547.1611022949219,\n            \"token_count\": 274\n        },\n        {\n            \"elapsed_time\": 505.0802230834961,\n            \"token_count\": 275\n        },\n        {\n            \"elapsed_time\": 498.05593490600586,\n            \"token_count\": 276\n        },\n        {\n            \"elapsed_time\": 508.85009765625,\n            \"token_count\": 277\n        },\n        {\n            \"elapsed_time\": 504.1229724884033,\n            \"token_count\": 278\n        },\n        {\n            \"elapsed_time\": 499.7239112854004,\n            \"token_count\": 279\n        },\n        {\n            \"elapsed_time\": 508.44502449035645,\n            \"token_count\": 280\n        },\n        {\n            \"elapsed_time\": 511.9926929473877,\n            \"token_count\": 281\n        },\n        {\n            \"elapsed_time\": 523.6489772796631,\n            \"token_count\": 282\n        },\n        {\n            \"elapsed_time\": 523.4718322753906,\n            \"token_count\": 283\n        },\n        {\n            \"elapsed_time\": 519.3850994110107,\n            \"token_count\": 284\n        },\n        {\n            \"elapsed_time\": 525.7408618927002,\n            \"token_count\": 285\n        },\n        {\n            \"elapsed_time\": 527.3730754852295,\n            \"token_count\": 286\n        },\n        {\n            \"elapsed_time\": 524.1899490356445,\n            \"token_count\": 287\n        },\n        {\n            \"elapsed_time\": 529.7901630401611,\n            \"token_count\": 288\n        },\n        {\n            \"elapsed_time\": 536.9760990142822,\n            \"token_count\": 289\n        },\n        {\n            \"elapsed_time\": 539.2229557037354,\n            \"token_count\": 290\n        },\n        {\n            \"elapsed_time\": 539.2158031463623,\n            \"token_count\": 291\n        },\n        {\n            \"elapsed_time\": 542.9210662841797,\n            \"token_count\": 292\n        },\n        {\n            \"elapsed_time\": 581.6259384155273,\n            \"token_count\": 293\n        },\n        {\n            \"elapsed_time\": 564.2130374908447,\n            \"token_count\": 294\n        },\n        {\n            \"elapsed_time\": 550.5759716033936,\n            \"token_count\": 295\n        },\n        {\n            \"elapsed_time\": 553.462028503418,\n            \"token_count\": 296\n        },\n        {\n            \"elapsed_time\": 551.6600608825684,\n            \"token_count\": 297\n        },\n        {\n            \"elapsed_time\": 558.5448741912842,\n            \"token_count\": 298\n        },\n        {\n            \"elapsed_time\": 554.3992519378662,\n            \"token_count\": 299\n        },\n        {\n            \"elapsed_time\": 563.8749599456787,\n            \"token_count\": 300\n        },\n        {\n            \"elapsed_time\": 571.8111991882324,\n            \"token_count\": 301\n        },\n        {\n            \"elapsed_time\": 565.9127235412598,\n            \"token_count\": 302\n        },\n        {\n            \"elapsed_time\": 575.6180286407471,\n            \"token_count\": 303\n        },\n        {\n            \"elapsed_time\": 578.5820484161377,\n            \"token_count\": 304\n        },\n        {\n            \"elapsed_time\": 575.4501819610596,\n            \"token_count\": 305\n        },\n        {\n            \"elapsed_time\": 573.8921165466309,\n            \"token_count\": 306\n        },\n        {\n            \"elapsed_time\": 588.1481170654297,\n            \"token_count\": 307\n        },\n        {\n            \"elapsed_time\": 584.0880870819092,\n            \"token_count\": 308\n        },\n        {\n            \"elapsed_time\": 586.5657329559326,\n            \"token_count\": 309\n        },\n        {\n            \"elapsed_time\": 595.5183506011963,\n            \"token_count\": 310\n        },\n        {\n            \"elapsed_time\": 637.9220485687256,\n            \"token_count\": 311\n        },\n        {\n            \"elapsed_time\": 600.0270843505859,\n            \"token_count\": 312\n        },\n        {\n            \"elapsed_time\": 605.3450107574463,\n            \"token_count\": 313\n        },\n        {\n            \"elapsed_time\": 599.0078449249268,\n            \"token_count\": 314\n        },\n        {\n            \"elapsed_time\": 598.7069606781006,\n            \"token_count\": 315\n        },\n        {\n            \"elapsed_time\": 597.0721244812012,\n            \"token_count\": 316\n        },\n        {\n            \"elapsed_time\": 607.7761650085449,\n            \"token_count\": 317\n        },\n        {\n            \"elapsed_time\": 613.6441230773926,\n            \"token_count\": 318\n        },\n        {\n            \"elapsed_time\": 612.2570037841797,\n            \"token_count\": 319\n        },\n        {\n            \"elapsed_time\": 612.6351356506348,\n            \"token_count\": 320\n        },\n        {\n            \"elapsed_time\": 624.769926071167,\n            \"token_count\": 321\n        },\n        {\n            \"elapsed_time\": 621.1049556732178,\n            \"token_count\": 322\n        },\n        {\n            \"elapsed_time\": 625.6289482116699,\n            \"token_count\": 323\n        },\n        {\n            \"elapsed_time\": 649.1332054138184,\n            \"token_count\": 324\n        },\n        {\n            \"elapsed_time\": 632.9991817474365,\n            \"token_count\": 325\n        },\n        {\n            \"elapsed_time\": 631.7660808563232,\n            \"token_count\": 326\n        },\n        {\n            \"elapsed_time\": 672.1367835998535,\n            \"token_count\": 327\n        },\n        {\n            \"elapsed_time\": 644.9418067932129,\n            \"token_count\": 328\n        },\n        {\n            \"elapsed_time\": 640.0299072265625,\n            \"token_count\": 329\n        },\n        {\n            \"elapsed_time\": 637.0010375976562,\n            \"token_count\": 330\n        },\n        {\n            \"elapsed_time\": 641.8001651763916,\n            \"token_count\": 331\n        },\n        {\n            \"elapsed_time\": 654.6058654785156,\n            \"token_count\": 332\n        },\n        {\n            \"elapsed_time\": 666.7661666870117,\n            \"token_count\": 333\n        },\n        {\n            \"elapsed_time\": 659.5032215118408,\n            \"token_count\": 334\n        },\n        {\n            \"elapsed_time\": 665.7872200012207,\n            \"token_count\": 335\n        },\n        {\n            \"elapsed_time\": 665.0857925415039,\n            \"token_count\": 336\n        },\n        {\n            \"elapsed_time\": 668.2066917419434,\n            \"token_count\": 337\n        },\n        {\n            \"elapsed_time\": 673.3362674713135,\n            \"token_count\": 338\n        },\n        {\n            \"elapsed_time\": 677.4981021881104,\n            \"token_count\": 339\n        },\n        {\n            \"elapsed_time\": 677.1011352539062,\n            \"token_count\": 340\n        },\n        {\n            \"elapsed_time\": 676.5961647033691,\n            \"token_count\": 341\n        },\n        {\n            \"elapsed_time\": 709.9220752716064,\n            \"token_count\": 342\n        },\n        {\n            \"elapsed_time\": 715.717077255249,\n            \"token_count\": 343\n        },\n        {\n            \"elapsed_time\": 688.7779235839844,\n            \"token_count\": 344\n        },\n        {\n            \"elapsed_time\": 688.8248920440674,\n            \"token_count\": 345\n        },\n        {\n            \"elapsed_time\": 704.2229175567627,\n            \"token_count\": 346\n        },\n        {\n            \"elapsed_time\": 694.2873001098633,\n            \"token_count\": 347\n        },\n        {\n            \"elapsed_time\": 698.40407371521,\n            \"token_count\": 348\n        },\n        {\n            \"elapsed_time\": 699.6040344238281,\n            \"token_count\": 349\n        },\n        {\n            \"elapsed_time\": 722.3861217498779,\n            \"token_count\": 350\n        },\n        {\n            \"elapsed_time\": 697.0219612121582,\n            \"token_count\": 351\n        },\n        {\n            \"elapsed_time\": 712.6810550689697,\n            \"token_count\": 352\n        },\n        {\n            \"elapsed_time\": 709.8731994628906,\n            \"token_count\": 353\n        },\n        {\n            \"elapsed_time\": 734.27414894104,\n            \"token_count\": 354\n        },\n        {\n            \"elapsed_time\": 724.8461246490479,\n            \"token_count\": 355\n        },\n        {\n            \"elapsed_time\": 725.2058982849121,\n            \"token_count\": 356\n        },\n        {\n            \"elapsed_time\": 777.3990631103516,\n            \"token_count\": 357\n        },\n        {\n            \"elapsed_time\": 733.6368560791016,\n            \"token_count\": 358\n        },\n        {\n            \"elapsed_time\": 732.6760292053223,\n            \"token_count\": 359\n        },\n        {\n            \"elapsed_time\": 735.4631423950195,\n            \"token_count\": 360\n        },\n        {\n            \"elapsed_time\": 738.9090061187744,\n            \"token_count\": 361\n        },\n        {\n            \"elapsed_time\": 739.6328449249268,\n            \"token_count\": 362\n        },\n        {\n            \"elapsed_time\": 742.6891326904297,\n            \"token_count\": 363\n        },\n        {\n            \"elapsed_time\": 754.1179656982422,\n            \"token_count\": 364\n        },\n        {\n            \"elapsed_time\": 754.0450096130371,\n            \"token_count\": 365\n        },\n        {\n            \"elapsed_time\": 767.8468227386475,\n            \"token_count\": 366\n        },\n        {\n            \"elapsed_time\": 771.4192867279053,\n            \"token_count\": 367\n        },\n        {\n            \"elapsed_time\": 785.4800224304199,\n            \"token_count\": 368\n        },\n        {\n            \"elapsed_time\": 797.9602813720703,\n            \"token_count\": 369\n        },\n        {\n            \"elapsed_time\": 817.5239562988281,\n            \"token_count\": 370\n        },\n        {\n            \"elapsed_time\": 767.4849033355713,\n            \"token_count\": 371\n        },\n        {\n            \"elapsed_time\": 787.7838611602783,\n            \"token_count\": 372\n        },\n        {\n            \"elapsed_time\": 782.1598052978516,\n            \"token_count\": 373\n        },\n        {\n            \"elapsed_time\": 794.9643135070801,\n            \"token_count\": 374\n        },\n        {\n            \"elapsed_time\": 783.6089134216309,\n            \"token_count\": 375\n        },\n        {\n            \"elapsed_time\": 811.6679191589355,\n            \"token_count\": 376\n        },\n        {\n            \"elapsed_time\": 794.8837280273438,\n            \"token_count\": 377\n        },\n        {\n            \"elapsed_time\": 801.6860485076904,\n            \"token_count\": 378\n        },\n        {\n            \"elapsed_time\": 795.116662979126,\n            \"token_count\": 379\n        },\n        {\n            \"elapsed_time\": 799.0620136260986,\n            \"token_count\": 380\n        },\n        {\n            \"elapsed_time\": 811.8622303009033,\n            \"token_count\": 381\n        },\n        {\n            \"elapsed_time\": 814.7976398468018,\n            \"token_count\": 382\n        },\n        {\n            \"elapsed_time\": 858.6070537567139,\n            \"token_count\": 383\n        },\n        {\n            \"elapsed_time\": 831.3829898834229,\n            \"token_count\": 384\n        },\n        {\n            \"elapsed_time\": 829.2961120605469,\n            \"token_count\": 385\n        },\n        {\n            \"elapsed_time\": 853.9199829101562,\n            \"token_count\": 386\n        },\n        {\n            \"elapsed_time\": 824.6307373046875,\n            \"token_count\": 387\n        },\n        {\n            \"elapsed_time\": 834.3989849090576,\n            \"token_count\": 388\n        },\n        {\n            \"elapsed_time\": 826.8558979034424,\n            \"token_count\": 389\n        },\n        {\n            \"elapsed_time\": 832.2029113769531,\n            \"token_count\": 390\n        },\n        {\n            \"elapsed_time\": 850.4238128662109,\n            \"token_count\": 391\n        },\n        {\n            \"elapsed_time\": 829.322099685669,\n            \"token_count\": 392\n        },\n        {\n            \"elapsed_time\": 845.3800678253174,\n            \"token_count\": 393\n        },\n        {\n            \"elapsed_time\": 855.89599609375,\n            \"token_count\": 394\n        },\n        {\n            \"elapsed_time\": 882.4560642242432,\n            \"token_count\": 395\n        },\n        {\n            \"elapsed_time\": 853.701114654541,\n            \"token_count\": 396\n        },\n        {\n            \"elapsed_time\": 856.7061424255371,\n            \"token_count\": 397\n        },\n        {\n            \"elapsed_time\": 859.3971729278564,\n            \"token_count\": 398\n        },\n        {\n            \"elapsed_time\": 857.6898574829102,\n            \"token_count\": 399\n        },\n        {\n            \"elapsed_time\": 866.3430213928223,\n            \"token_count\": 400\n        },\n        {\n            \"elapsed_time\": 871.574878692627,\n            \"token_count\": 401\n        },\n        {\n            \"elapsed_time\": 869.5089817047119,\n            \"token_count\": 402\n        },\n        {\n            \"elapsed_time\": 873.8663196563721,\n            \"token_count\": 403\n        },\n        {\n            \"elapsed_time\": 875.709056854248,\n            \"token_count\": 404\n        },\n        {\n            \"elapsed_time\": 872.5948333740234,\n            \"token_count\": 405\n        },\n        {\n            \"elapsed_time\": 921.6487407684326,\n            \"token_count\": 406\n        },\n        {\n            \"elapsed_time\": 857.60498046875,\n            \"token_count\": 407\n        },\n        {\n            \"elapsed_time\": 850.5361080169678,\n            \"token_count\": 408\n        },\n        {\n            \"elapsed_time\": 856.9450378417969,\n            \"token_count\": 409\n        },\n        {\n            \"elapsed_time\": 876.5008449554443,\n            \"token_count\": 410\n        },\n        {\n            \"elapsed_time\": 865.0968074798584,\n            \"token_count\": 411\n        },\n        {\n            \"elapsed_time\": 866.1119937896729,\n            \"token_count\": 412\n        },\n        {\n            \"elapsed_time\": 918.0610179901123,\n            \"token_count\": 413\n        },\n        {\n            \"elapsed_time\": 908.1909656524658,\n            \"token_count\": 414\n        },\n        {\n            \"elapsed_time\": 904.60205078125,\n            \"token_count\": 415\n        },\n        {\n            \"elapsed_time\": 932.1341514587402,\n            \"token_count\": 416\n        },\n        {\n            \"elapsed_time\": 930.2082061767578,\n            \"token_count\": 417\n        },\n        {\n            \"elapsed_time\": 947.8180408477783,\n            \"token_count\": 418\n        },\n        {\n            \"elapsed_time\": 914.9999618530273,\n            \"token_count\": 419\n        },\n        {\n            \"elapsed_time\": 892.1658992767334,\n            \"token_count\": 420\n        },\n        {\n            \"elapsed_time\": 903.8169384002686,\n            \"token_count\": 421\n        },\n        {\n            \"elapsed_time\": 892.0462131500244,\n            \"token_count\": 422\n        },\n        {\n            \"elapsed_time\": 907.1600437164307,\n            \"token_count\": 423\n        },\n        {\n            \"elapsed_time\": 917.8471565246582,\n            \"token_count\": 424\n        },\n        {\n            \"elapsed_time\": 925.3268241882324,\n            \"token_count\": 425\n        },\n        {\n            \"elapsed_time\": 908.4153175354004,\n            \"token_count\": 426\n        },\n        {\n            \"elapsed_time\": 943.4559345245361,\n            \"token_count\": 427\n        },\n        {\n            \"elapsed_time\": 910.0527763366699,\n            \"token_count\": 428\n        },\n        {\n            \"elapsed_time\": 958.9219093322754,\n            \"token_count\": 429\n        },\n        {\n            \"elapsed_time\": 937.086820602417,\n            \"token_count\": 430\n        },\n        {\n            \"elapsed_time\": 921.4839935302734,\n            \"token_count\": 431\n        },\n        {\n            \"elapsed_time\": 921.7789173126221,\n            \"token_count\": 432\n        },\n        {\n            \"elapsed_time\": 949.0938186645508,\n            \"token_count\": 433\n        },\n        {\n            \"elapsed_time\": 933.8688850402832,\n            \"token_count\": 434\n        },\n        {\n            \"elapsed_time\": 932.9617023468018,\n            \"token_count\": 435\n        },\n        {\n            \"elapsed_time\": 942.4290657043457,\n            \"token_count\": 436\n        },\n        {\n            \"elapsed_time\": 958.8119983673096,\n            \"token_count\": 437\n        },\n        {\n            \"elapsed_time\": 973.6158847808838,\n            \"token_count\": 438\n        },\n        {\n            \"elapsed_time\": 987.7569675445557,\n            \"token_count\": 439\n        },\n        {\n            \"elapsed_time\": 982.8140735626221,\n            \"token_count\": 440\n        },\n        {\n            \"elapsed_time\": 966.7000770568848,\n            \"token_count\": 441\n        },\n        {\n            \"elapsed_time\": 962.3968601226807,\n            \"token_count\": 442\n        },\n        {\n            \"elapsed_time\": 1024.6531963348389,\n            \"token_count\": 443\n        },\n        {\n            \"elapsed_time\": 1018.359899520874,\n            \"token_count\": 444\n        },\n        {\n            \"elapsed_time\": 1047.145128250122,\n            \"token_count\": 445\n        },\n        {\n            \"elapsed_time\": 1052.8199672698975,\n            \"token_count\": 446\n        },\n        {\n            \"elapsed_time\": 1054.7068119049072,\n            \"token_count\": 447\n        },\n        {\n            \"elapsed_time\": 1080.5950164794922,\n            \"token_count\": 448\n        },\n        {\n            \"elapsed_time\": 1061.5050792694092,\n            \"token_count\": 449\n        },\n        {\n            \"elapsed_time\": 1031.270980834961,\n            \"token_count\": 450\n        },\n        {\n            \"elapsed_time\": 1032.196044921875,\n            \"token_count\": 451\n        },\n        {\n            \"elapsed_time\": 1065.216064453125,\n            \"token_count\": 452\n        },\n        {\n            \"elapsed_time\": 1094.2878723144531,\n            \"token_count\": 453\n        },\n        {\n            \"elapsed_time\": 1073.3230113983154,\n            \"token_count\": 454\n        },\n        {\n            \"elapsed_time\": 1071.3698863983154,\n            \"token_count\": 455\n        },\n        {\n            \"elapsed_time\": 1057.5852394104004,\n            \"token_count\": 456\n        },\n        {\n            \"elapsed_time\": 1107.8059673309326,\n            \"token_count\": 457\n        },\n        {\n            \"elapsed_time\": 1127.4433135986328,\n            \"token_count\": 458\n        },\n        {\n            \"elapsed_time\": 1143.3451175689697,\n            \"token_count\": 459\n        },\n        {\n            \"elapsed_time\": 1123.2619285583496,\n            \"token_count\": 460\n        },\n        {\n            \"elapsed_time\": 1148.8351821899414,\n            \"token_count\": 461\n        },\n        {\n            \"elapsed_time\": 1138.772964477539,\n            \"token_count\": 462\n        },\n        {\n            \"elapsed_time\": 1167.6979064941406,\n            \"token_count\": 463\n        },\n        {\n            \"elapsed_time\": 1132.261037826538,\n            \"token_count\": 464\n        },\n        {\n            \"elapsed_time\": 1194.6890354156494,\n            \"token_count\": 465\n        },\n        {\n            \"elapsed_time\": 1432.2509765625,\n            \"token_count\": 466\n        },\n        {\n            \"elapsed_time\": 1198.3931064605713,\n            \"token_count\": 467\n        },\n        {\n            \"elapsed_time\": 1233.3378791809082,\n            \"token_count\": 468\n        },\n        {\n            \"elapsed_time\": 1266.793966293335,\n            \"token_count\": 469\n        },\n        {\n            \"elapsed_time\": 1271.022081375122,\n            \"token_count\": 470\n        },\n        {\n            \"elapsed_time\": 1214.1079902648926,\n            \"token_count\": 471\n        },\n        {\n            \"elapsed_time\": 1184.654951095581,\n            \"token_count\": 472\n        },\n        {\n            \"elapsed_time\": 1153.2421112060547,\n            \"token_count\": 473\n        },\n        {\n            \"elapsed_time\": 1178.3607006072998,\n            \"token_count\": 474\n        },\n        {\n            \"elapsed_time\": 1214.2219543457031,\n            \"token_count\": 475\n        },\n        {\n            \"elapsed_time\": 1210.4589939117432,\n            \"token_count\": 476\n        },\n        {\n            \"elapsed_time\": 1219.1529273986816,\n            \"token_count\": 477\n        },\n        {\n            \"elapsed_time\": 1241.7538166046143,\n            \"token_count\": 478\n        },\n        {\n            \"elapsed_time\": 1210.547924041748,\n            \"token_count\": 479\n        },\n        {\n            \"elapsed_time\": 1197.5979804992676,\n            \"token_count\": 480\n        },\n        {\n            \"elapsed_time\": 1188.7669563293457,\n            \"token_count\": 481\n        },\n        {\n            \"elapsed_time\": 1217.8168296813965,\n            \"token_count\": 482\n        },\n        {\n            \"elapsed_time\": 1164.4926071166992,\n            \"token_count\": 483\n        },\n        {\n            \"elapsed_time\": 1176.1510372161865,\n            \"token_count\": 484\n        },\n        {\n            \"elapsed_time\": 1107.550859451294,\n            \"token_count\": 485\n        },\n        {\n            \"elapsed_time\": 1131.697177886963,\n            \"token_count\": 486\n        },\n        {\n            \"elapsed_time\": 1123.6543655395508,\n            \"token_count\": 487\n        },\n        {\n            \"elapsed_time\": 1133.2111358642578,\n            \"token_count\": 488\n        },\n        {\n            \"elapsed_time\": 1137.9001140594482,\n            \"token_count\": 489\n        },\n        {\n            \"elapsed_time\": 1174.6058464050293,\n            \"token_count\": 490\n        },\n        {\n            \"elapsed_time\": 1131.3810348510742,\n            \"token_count\": 491\n        },\n        {\n            \"elapsed_time\": 1181.5741062164307,\n            \"token_count\": 492\n        },\n        {\n            \"elapsed_time\": 1147.5169658660889,\n            \"token_count\": 493\n        },\n        {\n            \"elapsed_time\": 1164.6482944488525,\n            \"token_count\": 494\n        },\n        {\n            \"elapsed_time\": 1161.9091033935547,\n            \"token_count\": 495\n        },\n        {\n            \"elapsed_time\": 1195.410966873169,\n            \"token_count\": 496\n        },\n        {\n            \"elapsed_time\": 1156.3117504119873,\n            \"token_count\": 497\n        },\n        {\n            \"elapsed_time\": 1169.6851253509521,\n            \"token_count\": 498\n        },\n        {\n            \"elapsed_time\": 1188.3528232574463,\n            \"token_count\": 499\n        },\n        {\n            \"elapsed_time\": 1292.7989959716797,\n            \"token_count\": 500\n        },\n        {\n            \"elapsed_time\": 1279.282808303833,\n            \"token_count\": 501\n        },\n        {\n            \"elapsed_time\": 1291.952133178711,\n            \"token_count\": 502\n        },\n        {\n            \"elapsed_time\": 1195.1370239257812,\n            \"token_count\": 503\n        },\n        {\n            \"elapsed_time\": 1183.1729412078857,\n            \"token_count\": 504\n        },\n        {\n            \"elapsed_time\": 1198.080062866211,\n            \"token_count\": 505\n        },\n        {\n            \"elapsed_time\": 1285.5160236358643,\n            \"token_count\": 506\n        },\n        {\n            \"elapsed_time\": 1305.0501346588135,\n            \"token_count\": 507\n        },\n        {\n            \"elapsed_time\": 1299.062967300415,\n            \"token_count\": 508\n        },\n        {\n            \"elapsed_time\": 1315.5882358551025,\n            \"token_count\": 509\n        },\n        {\n            \"elapsed_time\": 1279.1218757629395,\n            \"token_count\": 510\n        },\n        {\n            \"elapsed_time\": 1215.500831604004,\n            \"token_count\": 511\n        },\n        {\n            \"elapsed_time\": 1238.5451793670654,\n            \"token_count\": 512\n        },\n        {\n            \"elapsed_time\": 1254.9030780792236,\n            \"token_count\": 513\n        },\n        {\n            \"elapsed_time\": 1304.1479587554932,\n            \"token_count\": 514\n        },\n        {\n            \"elapsed_time\": 1275.6831645965576,\n            \"token_count\": 515\n        },\n        {\n            \"elapsed_time\": 1230.5200099945068,\n            \"token_count\": 516\n        },\n        {\n            \"elapsed_time\": 1297.7912425994873,\n            \"token_count\": 517\n        },\n        {\n            \"elapsed_time\": 1331.8791389465332,\n            \"token_count\": 518\n        },\n        {\n            \"elapsed_time\": 1304.5508861541748,\n            \"token_count\": 519\n        },\n        {\n            \"elapsed_time\": 1338.1831645965576,\n            \"token_count\": 520\n        },\n        {\n            \"elapsed_time\": 1294.1901683807373,\n            \"token_count\": 521\n        },\n        {\n            \"elapsed_time\": 1304.9578666687012,\n            \"token_count\": 522\n        },\n        {\n            \"elapsed_time\": 1263.8070583343506,\n            \"token_count\": 523\n        },\n        {\n            \"elapsed_time\": 1287.3060703277588,\n            \"token_count\": 524\n        },\n        {\n            \"elapsed_time\": 1266.0417556762695,\n            \"token_count\": 525\n        },\n        {\n            \"elapsed_time\": 1349.0638732910156,\n            \"token_count\": 526\n        },\n        {\n            \"elapsed_time\": 1363.2400035858154,\n            \"token_count\": 527\n        },\n        {\n            \"elapsed_time\": 1316.6241645812988,\n            \"token_count\": 528\n        },\n        {\n            \"elapsed_time\": 1336.1079692840576,\n            \"token_count\": 529\n        },\n        {\n            \"elapsed_time\": 1408.46586227417,\n            \"token_count\": 530\n        },\n        {\n            \"elapsed_time\": 1351.6149520874023,\n            \"token_count\": 531\n        },\n        {\n            \"elapsed_time\": 1389.7731304168701,\n            \"token_count\": 532\n        },\n        {\n            \"elapsed_time\": 1391.4060592651367,\n            \"token_count\": 533\n        },\n        {\n            \"elapsed_time\": 1353.4770011901855,\n            \"token_count\": 534\n        },\n        {\n            \"elapsed_time\": 1348.2348918914795,\n            \"token_count\": 535\n        },\n        {\n            \"elapsed_time\": 1355.9558391571045,\n            \"token_count\": 536\n        },\n        {\n            \"elapsed_time\": 1384.7899436950684,\n            \"token_count\": 537\n        },\n        {\n            \"elapsed_time\": 1400.4020690917969,\n            \"token_count\": 538\n        },\n        {\n            \"elapsed_time\": 1424.4599342346191,\n            \"token_count\": 539\n        },\n        {\n            \"elapsed_time\": 1400.9671211242676,\n            \"token_count\": 540\n        },\n        {\n            \"elapsed_time\": 1414.28804397583,\n            \"token_count\": 541\n        },\n        {\n            \"elapsed_time\": 1394.6771621704102,\n            \"token_count\": 542\n        },\n        {\n            \"elapsed_time\": 1399.5170593261719,\n            \"token_count\": 543\n        },\n        {\n            \"elapsed_time\": 1408.1230163574219,\n            \"token_count\": 544\n        },\n        {\n            \"elapsed_time\": 1413.0239486694336,\n            \"token_count\": 545\n        },\n        {\n            \"elapsed_time\": 1456.8629264831543,\n            \"token_count\": 546\n        },\n        {\n            \"elapsed_time\": 1413.060188293457,\n            \"token_count\": 547\n        },\n        {\n            \"elapsed_time\": 1438.474178314209,\n            \"token_count\": 548\n        },\n        {\n            \"elapsed_time\": 1461.0569477081299,\n            \"token_count\": 549\n        },\n        {\n            \"elapsed_time\": 1424.1957664489746,\n            \"token_count\": 550\n        },\n        {\n            \"elapsed_time\": 1457.3068618774414,\n            \"token_count\": 551\n        },\n        {\n            \"elapsed_time\": 1439.4941329956055,\n            \"token_count\": 552\n        },\n        {\n            \"elapsed_time\": 1476.3391017913818,\n            \"token_count\": 553\n        },\n        {\n            \"elapsed_time\": 1464.7092819213867,\n            \"token_count\": 554\n        },\n        {\n            \"elapsed_time\": 1460.942029953003,\n            \"token_count\": 555\n        },\n        {\n            \"elapsed_time\": 1454.3590545654297,\n            \"token_count\": 556\n        },\n        {\n            \"elapsed_time\": 1452.3730278015137,\n            \"token_count\": 557\n        },\n        {\n            \"elapsed_time\": 1474.50590133667,\n            \"token_count\": 558\n        },\n        {\n            \"elapsed_time\": 1486.8419170379639,\n            \"token_count\": 559\n        },\n        {\n            \"elapsed_time\": 1672.7290153503418,\n            \"token_count\": 560\n        }\n    ],\n    \"max_token_count_per_time\": {\n        \"100\": 80,\n        \"200\": 140,\n        \"300\": 187,\n        \"400\": 236,\n        \"500\": 279,\n        \"600\": 316,\n        \"700\": 351,\n        \"800\": 380,\n        \"900\": 422,\n        \"1000\": 442,\n        \"1100\": 456,\n        \"1200\": 505,\n        \"1300\": 525,\n        \"1400\": 543,\n        \"1500\": 559\n    }\n}"
  },
  {
    "path": "reports/inference_result/docqa+elmo-cpu.json",
    "content": "{\n    \"average_raw_to_tensor\": 0.07495759713529336,\n    \"average_tensor_to_predict\": 29.947829728174693,\n    \"average_end_to_end\": 30.022787325309984,\n    \"tensor_to_predicts\": [\n        {\n            \"elapsed_time\": 444.81778144836426,\n            \"token_count\": 10\n        },\n        {\n            \"elapsed_time\": 450.63209533691406,\n            \"token_count\": 11\n        },\n        {\n            \"elapsed_time\": 596.3921546936035,\n            \"token_count\": 12\n        },\n        {\n            \"elapsed_time\": 516.448974609375,\n            \"token_count\": 13\n        },\n        {\n            \"elapsed_time\": 548.5560894012451,\n            \"token_count\": 14\n        },\n        {\n            \"elapsed_time\": 592.1571254730225,\n            \"token_count\": 15\n        },\n        {\n            \"elapsed_time\": 632.4970722198486,\n            \"token_count\": 16\n        },\n        {\n            \"elapsed_time\": 637.9246711730957,\n            \"token_count\": 17\n        },\n        {\n            \"elapsed_time\": 678.7707805633545,\n            \"token_count\": 18\n        },\n        {\n            \"elapsed_time\": 695.0058937072754,\n            \"token_count\": 19\n        },\n        {\n            \"elapsed_time\": 710.7388973236084,\n            \"token_count\": 20\n        },\n        {\n            \"elapsed_time\": 734.1299057006836,\n            \"token_count\": 21\n        },\n        {\n            \"elapsed_time\": 756.6919326782227,\n            \"token_count\": 22\n        },\n        {\n            \"elapsed_time\": 773.4048366546631,\n            \"token_count\": 23\n        },\n        {\n            \"elapsed_time\": 891.1871910095215,\n            \"token_count\": 24\n        },\n        {\n            \"elapsed_time\": 893.3582305908203,\n            \"token_count\": 25\n        },\n        {\n            \"elapsed_time\": 905.0338268280029,\n            \"token_count\": 26\n        },\n        {\n            \"elapsed_time\": 1026.8008708953857,\n            \"token_count\": 27\n        },\n        {\n            \"elapsed_time\": 1394.300937652588,\n            \"token_count\": 28\n        },\n        {\n            \"elapsed_time\": 1192.229986190796,\n            \"token_count\": 29\n        },\n        {\n            \"elapsed_time\": 1254.958152770996,\n            \"token_count\": 30\n        },\n        {\n            \"elapsed_time\": 1283.6709022521973,\n            \"token_count\": 31\n        },\n        {\n            \"elapsed_time\": 1169.0359115600586,\n            \"token_count\": 32\n        },\n        {\n            \"elapsed_time\": 1295.1133251190186,\n            \"token_count\": 33\n        },\n        {\n            \"elapsed_time\": 1141.5653228759766,\n            \"token_count\": 34\n        },\n        {\n            \"elapsed_time\": 1361.8967533111572,\n            \"token_count\": 35\n        },\n        {\n            \"elapsed_time\": 1390.589952468872,\n            \"token_count\": 36\n        },\n        {\n            \"elapsed_time\": 1358.548879623413,\n            \"token_count\": 37\n        },\n        {\n            \"elapsed_time\": 1374.4440078735352,\n            \"token_count\": 38\n        },\n        {\n            \"elapsed_time\": 1428.9610385894775,\n            \"token_count\": 39\n        },\n        {\n            \"elapsed_time\": 1518.4879302978516,\n            \"token_count\": 40\n        }\n    ],\n    \"max_token_count_per_time\": {\n        \"500\": 11,\n        \"600\": 15,\n        \"700\": 19,\n        \"800\": 23,\n        \"900\": 25,\n        \"1000\": 26,\n        \"1100\": 27,\n        \"1200\": 34,\n        \"1300\": 34,\n        \"1400\": 38,\n        \"1500\": 39\n    }\n}"
  },
  {
    "path": "reports/inference_result/docqa-cpu.json",
    "content": "{\n    \"average_raw_to_tensor\": 18.26483384527341,\n    \"average_tensor_to_predict\": 513.9520310392284,\n    \"average_end_to_end\": 532.2168648845018,\n    \"tensor_to_predicts\": [\n        {\n            \"elapsed_time\": 22.011995315551758,\n            \"token_count\": 10\n        },\n        {\n            \"elapsed_time\": 15.34271240234375,\n            \"token_count\": 11\n        },\n        {\n            \"elapsed_time\": 14.614105224609375,\n            \"token_count\": 12\n        },\n        {\n            \"elapsed_time\": 15.957117080688477,\n            \"token_count\": 13\n        },\n        {\n            \"elapsed_time\": 18.05901527404785,\n            \"token_count\": 14\n        },\n        {\n            \"elapsed_time\": 18.22209358215332,\n            \"token_count\": 15\n        },\n        {\n            \"elapsed_time\": 19.58298683166504,\n            \"token_count\": 16\n        },\n        {\n            \"elapsed_time\": 20.28179168701172,\n            \"token_count\": 17\n        },\n        {\n            \"elapsed_time\": 20.82514762878418,\n            \"token_count\": 18\n        },\n        {\n            \"elapsed_time\": 21.533966064453125,\n            \"token_count\": 19\n        },\n        {\n            \"elapsed_time\": 23.40412139892578,\n            \"token_count\": 20\n        },\n        {\n            \"elapsed_time\": 24.00684356689453,\n            \"token_count\": 21\n        },\n        {\n            \"elapsed_time\": 23.82373809814453,\n            \"token_count\": 22\n        },\n        {\n            \"elapsed_time\": 25.18606185913086,\n            \"token_count\": 23\n        },\n        {\n            \"elapsed_time\": 26.07893943786621,\n            \"token_count\": 24\n        },\n        {\n            \"elapsed_time\": 26.406049728393555,\n            \"token_count\": 25\n        },\n        {\n            \"elapsed_time\": 27.061939239501953,\n            \"token_count\": 26\n        },\n        {\n            \"elapsed_time\": 28.91087532043457,\n            \"token_count\": 27\n        },\n        {\n            \"elapsed_time\": 30.031919479370117,\n            \"token_count\": 28\n        },\n        {\n            \"elapsed_time\": 30.4567813873291,\n            \"token_count\": 29\n        },\n        {\n            \"elapsed_time\": 30.633926391601562,\n            \"token_count\": 30\n        },\n        {\n            \"elapsed_time\": 31.593799591064453,\n            \"token_count\": 31\n        },\n        {\n            \"elapsed_time\": 32.19199180603027,\n            \"token_count\": 32\n        },\n        {\n            \"elapsed_time\": 33.66994857788086,\n            \"token_count\": 33\n        },\n        {\n            \"elapsed_time\": 35.0039005279541,\n            \"token_count\": 34\n        },\n        {\n            \"elapsed_time\": 36.3619327545166,\n            \"token_count\": 35\n        },\n        {\n            \"elapsed_time\": 37.146806716918945,\n            \"token_count\": 36\n        },\n        {\n            \"elapsed_time\": 38.95378112792969,\n            \"token_count\": 37\n        },\n        {\n            \"elapsed_time\": 38.66982460021973,\n            \"token_count\": 38\n        },\n        {\n            \"elapsed_time\": 39.273977279663086,\n            \"token_count\": 39\n        },\n        {\n            \"elapsed_time\": 40.8329963684082,\n            \"token_count\": 40\n        },\n        {\n            \"elapsed_time\": 41.92209243774414,\n            \"token_count\": 41\n        },\n        {\n            \"elapsed_time\": 43.81895065307617,\n            \"token_count\": 42\n        },\n        {\n            \"elapsed_time\": 44.09003257751465,\n            \"token_count\": 43\n        },\n        {\n            \"elapsed_time\": 44.90208625793457,\n            \"token_count\": 44\n        },\n        {\n            \"elapsed_time\": 45.2120304107666,\n            \"token_count\": 45\n        },\n        {\n            \"elapsed_time\": 46.88310623168945,\n            \"token_count\": 46\n        },\n        {\n            \"elapsed_time\": 47.926902770996094,\n            \"token_count\": 47\n        },\n        {\n            \"elapsed_time\": 48.39491844177246,\n            \"token_count\": 48\n        },\n        {\n            \"elapsed_time\": 49.23868179321289,\n            \"token_count\": 49\n        },\n        {\n            \"elapsed_time\": 51.863670349121094,\n            \"token_count\": 50\n        },\n        {\n            \"elapsed_time\": 51.2080192565918,\n            \"token_count\": 51\n        },\n        {\n            \"elapsed_time\": 51.53608322143555,\n            \"token_count\": 52\n        },\n        {\n            \"elapsed_time\": 53.71212959289551,\n            \"token_count\": 53\n        },\n        {\n            \"elapsed_time\": 53.76410484313965,\n            \"token_count\": 54\n        },\n        {\n            \"elapsed_time\": 55.06777763366699,\n            \"token_count\": 55\n        },\n        {\n            \"elapsed_time\": 56.52594566345215,\n            \"token_count\": 56\n        },\n        {\n            \"elapsed_time\": 57.60693550109863,\n            \"token_count\": 57\n        },\n        {\n            \"elapsed_time\": 58.896780014038086,\n            \"token_count\": 58\n        },\n        {\n            \"elapsed_time\": 58.7918758392334,\n            \"token_count\": 59\n        },\n        {\n            \"elapsed_time\": 59.01002883911133,\n            \"token_count\": 60\n        },\n        {\n            \"elapsed_time\": 67.39282608032227,\n            \"token_count\": 61\n        },\n        {\n            \"elapsed_time\": 61.95783615112305,\n            \"token_count\": 62\n        },\n        {\n            \"elapsed_time\": 63.0640983581543,\n            \"token_count\": 63\n        },\n        {\n            \"elapsed_time\": 63.09008598327637,\n            \"token_count\": 64\n        },\n        {\n            \"elapsed_time\": 63.7509822845459,\n            \"token_count\": 65\n        },\n        {\n            \"elapsed_time\": 65.15789031982422,\n            \"token_count\": 66\n        },\n        {\n            \"elapsed_time\": 66.28894805908203,\n            \"token_count\": 67\n        },\n        {\n            \"elapsed_time\": 67.36111640930176,\n            \"token_count\": 68\n        },\n        {\n            \"elapsed_time\": 70.6949234008789,\n            \"token_count\": 69\n        },\n        {\n            \"elapsed_time\": 70.15132904052734,\n            \"token_count\": 70\n        },\n        {\n            \"elapsed_time\": 69.6871280670166,\n            \"token_count\": 71\n        },\n        {\n            \"elapsed_time\": 71.19488716125488,\n            \"token_count\": 72\n        },\n        {\n            \"elapsed_time\": 71.08712196350098,\n            \"token_count\": 73\n        },\n        {\n            \"elapsed_time\": 71.746826171875,\n            \"token_count\": 74\n        },\n        {\n            \"elapsed_time\": 73.26412200927734,\n            \"token_count\": 75\n        },\n        {\n            \"elapsed_time\": 73.58002662658691,\n            \"token_count\": 76\n        },\n        {\n            \"elapsed_time\": 75.87504386901855,\n            \"token_count\": 77\n        },\n        {\n            \"elapsed_time\": 75.714111328125,\n            \"token_count\": 78\n        },\n        {\n            \"elapsed_time\": 77.69608497619629,\n            \"token_count\": 79\n        },\n        {\n            \"elapsed_time\": 78.66907119750977,\n            \"token_count\": 80\n        },\n        {\n            \"elapsed_time\": 79.22911643981934,\n            \"token_count\": 81\n        },\n        {\n            \"elapsed_time\": 79.54883575439453,\n            \"token_count\": 82\n        },\n        {\n            \"elapsed_time\": 84.93208885192871,\n            \"token_count\": 83\n        },\n        {\n            \"elapsed_time\": 85.33787727355957,\n            \"token_count\": 84\n        },\n        {\n            \"elapsed_time\": 82.7798843383789,\n            \"token_count\": 85\n        },\n        {\n            \"elapsed_time\": 83.96220207214355,\n            \"token_count\": 86\n        },\n        {\n            \"elapsed_time\": 84.62190628051758,\n            \"token_count\": 87\n        },\n        {\n            \"elapsed_time\": 85.68811416625977,\n            \"token_count\": 88\n        },\n        {\n            \"elapsed_time\": 89.02716636657715,\n            \"token_count\": 89\n        },\n        {\n            \"elapsed_time\": 87.21113204956055,\n            \"token_count\": 90\n        },\n        {\n            \"elapsed_time\": 88.7598991394043,\n            \"token_count\": 91\n        },\n        {\n            \"elapsed_time\": 91.01486206054688,\n            \"token_count\": 92\n        },\n        {\n            \"elapsed_time\": 93.02711486816406,\n            \"token_count\": 93\n        },\n        {\n            \"elapsed_time\": 94.0561294555664,\n            \"token_count\": 94\n        },\n        {\n            \"elapsed_time\": 95.55602073669434,\n            \"token_count\": 95\n        },\n        {\n            \"elapsed_time\": 97.86295890808105,\n            \"token_count\": 96\n        },\n        {\n            \"elapsed_time\": 94.36583518981934,\n            \"token_count\": 97\n        },\n        {\n            \"elapsed_time\": 97.54300117492676,\n            \"token_count\": 98\n        },\n        {\n            \"elapsed_time\": 94.78235244750977,\n            \"token_count\": 99\n        },\n        {\n            \"elapsed_time\": 99.12705421447754,\n            \"token_count\": 100\n        },\n        {\n            \"elapsed_time\": 100.07214546203613,\n            \"token_count\": 101\n        },\n        {\n            \"elapsed_time\": 101.99403762817383,\n            \"token_count\": 102\n        },\n        {\n            \"elapsed_time\": 106.48012161254883,\n            \"token_count\": 103\n        },\n        {\n            \"elapsed_time\": 124.58515167236328,\n            \"token_count\": 104\n        },\n        {\n            \"elapsed_time\": 109.36999320983887,\n            \"token_count\": 105\n        },\n        {\n            \"elapsed_time\": 105.76009750366211,\n            \"token_count\": 106\n        },\n        {\n            \"elapsed_time\": 103.45792770385742,\n            \"token_count\": 107\n        },\n        {\n            \"elapsed_time\": 105.90291023254395,\n            \"token_count\": 108\n        },\n        {\n            \"elapsed_time\": 106.58884048461914,\n            \"token_count\": 109\n        },\n        {\n            \"elapsed_time\": 106.76193237304688,\n            \"token_count\": 110\n        },\n        {\n            \"elapsed_time\": 106.87065124511719,\n            \"token_count\": 111\n        },\n        {\n            \"elapsed_time\": 108.45398902893066,\n            \"token_count\": 112\n        },\n        {\n            \"elapsed_time\": 109.87401008605957,\n            \"token_count\": 113\n        },\n        {\n            \"elapsed_time\": 110.44788360595703,\n            \"token_count\": 114\n        },\n        {\n            \"elapsed_time\": 112.53595352172852,\n            \"token_count\": 115\n        },\n        {\n            \"elapsed_time\": 110.50796508789062,\n            \"token_count\": 116\n        },\n        {\n            \"elapsed_time\": 113.97099494934082,\n            \"token_count\": 117\n        },\n        {\n            \"elapsed_time\": 113.83390426635742,\n            \"token_count\": 118\n        },\n        {\n            \"elapsed_time\": 115.86475372314453,\n            \"token_count\": 119\n        },\n        {\n            \"elapsed_time\": 116.42813682556152,\n            \"token_count\": 120\n        },\n        {\n            \"elapsed_time\": 117.83814430236816,\n            \"token_count\": 121\n        },\n        {\n            \"elapsed_time\": 120.54610252380371,\n            \"token_count\": 122\n        },\n        {\n            \"elapsed_time\": 125.65398216247559,\n            \"token_count\": 123\n        },\n        {\n            \"elapsed_time\": 120.2549934387207,\n            \"token_count\": 124\n        },\n        {\n            \"elapsed_time\": 121.26612663269043,\n            \"token_count\": 125\n        },\n        {\n            \"elapsed_time\": 121.81591987609863,\n            \"token_count\": 126\n        },\n        {\n            \"elapsed_time\": 122.53618240356445,\n            \"token_count\": 127\n        },\n        {\n            \"elapsed_time\": 124.64213371276855,\n            \"token_count\": 128\n        },\n        {\n            \"elapsed_time\": 126.0077953338623,\n            \"token_count\": 129\n        },\n        {\n            \"elapsed_time\": 127.73990631103516,\n            \"token_count\": 130\n        },\n        {\n            \"elapsed_time\": 128.8909912109375,\n            \"token_count\": 131\n        },\n        {\n            \"elapsed_time\": 129.9278736114502,\n            \"token_count\": 132\n        },\n        {\n            \"elapsed_time\": 129.02402877807617,\n            \"token_count\": 133\n        },\n        {\n            \"elapsed_time\": 137.800931930542,\n            \"token_count\": 134\n        },\n        {\n            \"elapsed_time\": 130.20682334899902,\n            \"token_count\": 135\n        },\n        {\n            \"elapsed_time\": 132.05504417419434,\n            \"token_count\": 136\n        },\n        {\n            \"elapsed_time\": 133.74996185302734,\n            \"token_count\": 137\n        },\n        {\n            \"elapsed_time\": 137.07804679870605,\n            \"token_count\": 138\n        },\n        {\n            \"elapsed_time\": 141.59417152404785,\n            \"token_count\": 139\n        },\n        {\n            \"elapsed_time\": 135.6191635131836,\n            \"token_count\": 140\n        },\n        {\n            \"elapsed_time\": 136.65318489074707,\n            \"token_count\": 141\n        },\n        {\n            \"elapsed_time\": 139.1921043395996,\n            \"token_count\": 142\n        },\n        {\n            \"elapsed_time\": 140.13981819152832,\n            \"token_count\": 143\n        },\n        {\n            \"elapsed_time\": 147.78804779052734,\n            \"token_count\": 144\n        },\n        {\n            \"elapsed_time\": 139.05811309814453,\n            \"token_count\": 145\n        },\n        {\n            \"elapsed_time\": 142.84396171569824,\n            \"token_count\": 146\n        },\n        {\n            \"elapsed_time\": 142.8511142730713,\n            \"token_count\": 147\n        },\n        {\n            \"elapsed_time\": 143.6331272125244,\n            \"token_count\": 148\n        },\n        {\n            \"elapsed_time\": 143.76306533813477,\n            \"token_count\": 149\n        },\n        {\n            \"elapsed_time\": 146.1501121520996,\n            \"token_count\": 150\n        },\n        {\n            \"elapsed_time\": 146.4681625366211,\n            \"token_count\": 151\n        },\n        {\n            \"elapsed_time\": 147.2008228302002,\n            \"token_count\": 152\n        },\n        {\n            \"elapsed_time\": 149.45411682128906,\n            \"token_count\": 153\n        },\n        {\n            \"elapsed_time\": 149.65486526489258,\n            \"token_count\": 154\n        },\n        {\n            \"elapsed_time\": 149.91497993469238,\n            \"token_count\": 155\n        },\n        {\n            \"elapsed_time\": 152.17995643615723,\n            \"token_count\": 156\n        },\n        {\n            \"elapsed_time\": 152.4820327758789,\n            \"token_count\": 157\n        },\n        {\n            \"elapsed_time\": 153.93686294555664,\n            \"token_count\": 158\n        },\n        {\n            \"elapsed_time\": 152.94909477233887,\n            \"token_count\": 159\n        },\n        {\n            \"elapsed_time\": 155.75075149536133,\n            \"token_count\": 160\n        },\n        {\n            \"elapsed_time\": 155.472993850708,\n            \"token_count\": 161\n        },\n        {\n            \"elapsed_time\": 157.5329303741455,\n            \"token_count\": 162\n        },\n        {\n            \"elapsed_time\": 159.93118286132812,\n            \"token_count\": 163\n        },\n        {\n            \"elapsed_time\": 160.44068336486816,\n            \"token_count\": 164\n        },\n        {\n            \"elapsed_time\": 161.9699001312256,\n            \"token_count\": 165\n        },\n        {\n            \"elapsed_time\": 162.0180606842041,\n            \"token_count\": 166\n        },\n        {\n            \"elapsed_time\": 169.98004913330078,\n            \"token_count\": 167\n        },\n        {\n            \"elapsed_time\": 169.62718963623047,\n            \"token_count\": 168\n        },\n        {\n            \"elapsed_time\": 172.4081039428711,\n            \"token_count\": 169\n        },\n        {\n            \"elapsed_time\": 167.62924194335938,\n            \"token_count\": 170\n        },\n        {\n            \"elapsed_time\": 165.4222011566162,\n            \"token_count\": 171\n        },\n        {\n            \"elapsed_time\": 169.46816444396973,\n            \"token_count\": 172\n        },\n        {\n            \"elapsed_time\": 171.33402824401855,\n            \"token_count\": 173\n        },\n        {\n            \"elapsed_time\": 174.0267276763916,\n            \"token_count\": 174\n        },\n        {\n            \"elapsed_time\": 180.15813827514648,\n            \"token_count\": 175\n        },\n        {\n            \"elapsed_time\": 189.7289752960205,\n            \"token_count\": 176\n        },\n        {\n            \"elapsed_time\": 173.56109619140625,\n            \"token_count\": 177\n        },\n        {\n            \"elapsed_time\": 180.6657314300537,\n            \"token_count\": 178\n        },\n        {\n            \"elapsed_time\": 176.8949031829834,\n            \"token_count\": 179\n        },\n        {\n            \"elapsed_time\": 181.01811408996582,\n            \"token_count\": 180\n        },\n        {\n            \"elapsed_time\": 183.05277824401855,\n            \"token_count\": 181\n        },\n        {\n            \"elapsed_time\": 178.84278297424316,\n            \"token_count\": 182\n        },\n        {\n            \"elapsed_time\": 180.0861358642578,\n            \"token_count\": 183\n        },\n        {\n            \"elapsed_time\": 181.08391761779785,\n            \"token_count\": 184\n        },\n        {\n            \"elapsed_time\": 181.99491500854492,\n            \"token_count\": 185\n        },\n        {\n            \"elapsed_time\": 184.15284156799316,\n            \"token_count\": 186\n        },\n        {\n            \"elapsed_time\": 181.884765625,\n            \"token_count\": 187\n        },\n        {\n            \"elapsed_time\": 185.75572967529297,\n            \"token_count\": 188\n        },\n        {\n            \"elapsed_time\": 188.20905685424805,\n            \"token_count\": 189\n        },\n        {\n            \"elapsed_time\": 191.9088363647461,\n            \"token_count\": 190\n        },\n        {\n            \"elapsed_time\": 187.09182739257812,\n            \"token_count\": 191\n        },\n        {\n            \"elapsed_time\": 190.31500816345215,\n            \"token_count\": 192\n        },\n        {\n            \"elapsed_time\": 192.9159164428711,\n            \"token_count\": 193\n        },\n        {\n            \"elapsed_time\": 192.80099868774414,\n            \"token_count\": 194\n        },\n        {\n            \"elapsed_time\": 191.5581226348877,\n            \"token_count\": 195\n        },\n        {\n            \"elapsed_time\": 195.5549716949463,\n            \"token_count\": 196\n        },\n        {\n            \"elapsed_time\": 193.76707077026367,\n            \"token_count\": 197\n        },\n        {\n            \"elapsed_time\": 200.6840705871582,\n            \"token_count\": 198\n        },\n        {\n            \"elapsed_time\": 199.9228000640869,\n            \"token_count\": 199\n        },\n        {\n            \"elapsed_time\": 209.4428539276123,\n            \"token_count\": 200\n        },\n        {\n            \"elapsed_time\": 201.25389099121094,\n            \"token_count\": 201\n        },\n        {\n            \"elapsed_time\": 200.6399631500244,\n            \"token_count\": 202\n        },\n        {\n            \"elapsed_time\": 203.0961513519287,\n            \"token_count\": 203\n        },\n        {\n            \"elapsed_time\": 202.65698432922363,\n            \"token_count\": 204\n        },\n        {\n            \"elapsed_time\": 206.27999305725098,\n            \"token_count\": 205\n        },\n        {\n            \"elapsed_time\": 206.88104629516602,\n            \"token_count\": 206\n        },\n        {\n            \"elapsed_time\": 206.74610137939453,\n            \"token_count\": 207\n        },\n        {\n            \"elapsed_time\": 211.15708351135254,\n            \"token_count\": 208\n        },\n        {\n            \"elapsed_time\": 210.56890487670898,\n            \"token_count\": 209\n        },\n        {\n            \"elapsed_time\": 212.08500862121582,\n            \"token_count\": 210\n        },\n        {\n            \"elapsed_time\": 211.35282516479492,\n            \"token_count\": 211\n        },\n        {\n            \"elapsed_time\": 211.63296699523926,\n            \"token_count\": 212\n        },\n        {\n            \"elapsed_time\": 213.029146194458,\n            \"token_count\": 213\n        },\n        {\n            \"elapsed_time\": 216.0940170288086,\n            \"token_count\": 214\n        },\n        {\n            \"elapsed_time\": 217.95082092285156,\n            \"token_count\": 215\n        },\n        {\n            \"elapsed_time\": 218.28603744506836,\n            \"token_count\": 216\n        },\n        {\n            \"elapsed_time\": 214.7970199584961,\n            \"token_count\": 217\n        },\n        {\n            \"elapsed_time\": 217.0848846435547,\n            \"token_count\": 218\n        },\n        {\n            \"elapsed_time\": 217.3750400543213,\n            \"token_count\": 219\n        },\n        {\n            \"elapsed_time\": 217.29612350463867,\n            \"token_count\": 220\n        },\n        {\n            \"elapsed_time\": 219.35296058654785,\n            \"token_count\": 221\n        },\n        {\n            \"elapsed_time\": 223.18291664123535,\n            \"token_count\": 222\n        },\n        {\n            \"elapsed_time\": 223.61207008361816,\n            \"token_count\": 223\n        },\n        {\n            \"elapsed_time\": 226.52292251586914,\n            \"token_count\": 224\n        },\n        {\n            \"elapsed_time\": 251.3289451599121,\n            \"token_count\": 225\n        },\n        {\n            \"elapsed_time\": 237.1211051940918,\n            \"token_count\": 226\n        },\n        {\n            \"elapsed_time\": 226.90272331237793,\n            \"token_count\": 227\n        },\n        {\n            \"elapsed_time\": 228.54876518249512,\n            \"token_count\": 228\n        },\n        {\n            \"elapsed_time\": 229.6581268310547,\n            \"token_count\": 229\n        },\n        {\n            \"elapsed_time\": 230.0422191619873,\n            \"token_count\": 230\n        },\n        {\n            \"elapsed_time\": 232.0230007171631,\n            \"token_count\": 231\n        },\n        {\n            \"elapsed_time\": 232.41662979125977,\n            \"token_count\": 232\n        },\n        {\n            \"elapsed_time\": 232.2678565979004,\n            \"token_count\": 233\n        },\n        {\n            \"elapsed_time\": 237.60628700256348,\n            \"token_count\": 234\n        },\n        {\n            \"elapsed_time\": 236.23085021972656,\n            \"token_count\": 235\n        },\n        {\n            \"elapsed_time\": 234.2069149017334,\n            \"token_count\": 236\n        },\n        {\n            \"elapsed_time\": 235.7008457183838,\n            \"token_count\": 237\n        },\n        {\n            \"elapsed_time\": 239.45307731628418,\n            \"token_count\": 238\n        },\n        {\n            \"elapsed_time\": 242.93971061706543,\n            \"token_count\": 239\n        },\n        {\n            \"elapsed_time\": 244.95601654052734,\n            \"token_count\": 240\n        },\n        {\n            \"elapsed_time\": 241.8079376220703,\n            \"token_count\": 241\n        },\n        {\n            \"elapsed_time\": 240.94080924987793,\n            \"token_count\": 242\n        },\n        {\n            \"elapsed_time\": 244.82202529907227,\n            \"token_count\": 243\n        },\n        {\n            \"elapsed_time\": 245.06211280822754,\n            \"token_count\": 244\n        },\n        {\n            \"elapsed_time\": 244.06790733337402,\n            \"token_count\": 245\n        },\n        {\n            \"elapsed_time\": 245.23377418518066,\n            \"token_count\": 246\n        },\n        {\n            \"elapsed_time\": 256.270170211792,\n            \"token_count\": 247\n        },\n        {\n            \"elapsed_time\": 246.08302116394043,\n            \"token_count\": 248\n        },\n        {\n            \"elapsed_time\": 248.3201026916504,\n            \"token_count\": 249\n        },\n        {\n            \"elapsed_time\": 249.11212921142578,\n            \"token_count\": 250\n        },\n        {\n            \"elapsed_time\": 252.63500213623047,\n            \"token_count\": 251\n        },\n        {\n            \"elapsed_time\": 249.87483024597168,\n            \"token_count\": 252\n        },\n        {\n            \"elapsed_time\": 255.54418563842773,\n            \"token_count\": 253\n        },\n        {\n            \"elapsed_time\": 255.4757595062256,\n            \"token_count\": 254\n        },\n        {\n            \"elapsed_time\": 260.9391212463379,\n            \"token_count\": 255\n        },\n        {\n            \"elapsed_time\": 255.35821914672852,\n            \"token_count\": 256\n        },\n        {\n            \"elapsed_time\": 256.80017471313477,\n            \"token_count\": 257\n        },\n        {\n            \"elapsed_time\": 259.36388969421387,\n            \"token_count\": 258\n        },\n        {\n            \"elapsed_time\": 259.14669036865234,\n            \"token_count\": 259\n        },\n        {\n            \"elapsed_time\": 261.04092597961426,\n            \"token_count\": 260\n        },\n        {\n            \"elapsed_time\": 259.45401191711426,\n            \"token_count\": 261\n        },\n        {\n            \"elapsed_time\": 263.9880180358887,\n            \"token_count\": 262\n        },\n        {\n            \"elapsed_time\": 266.3249969482422,\n            \"token_count\": 263\n        },\n        {\n            \"elapsed_time\": 261.3518238067627,\n            \"token_count\": 264\n        },\n        {\n            \"elapsed_time\": 285.16578674316406,\n            \"token_count\": 265\n        },\n        {\n            \"elapsed_time\": 275.4840850830078,\n            \"token_count\": 266\n        },\n        {\n            \"elapsed_time\": 269.2747116088867,\n            \"token_count\": 267\n        },\n        {\n            \"elapsed_time\": 270.69687843322754,\n            \"token_count\": 268\n        },\n        {\n            \"elapsed_time\": 268.9981460571289,\n            \"token_count\": 269\n        },\n        {\n            \"elapsed_time\": 270.0989246368408,\n            \"token_count\": 270\n        },\n        {\n            \"elapsed_time\": 269.75274085998535,\n            \"token_count\": 271\n        },\n        {\n            \"elapsed_time\": 272.9229927062988,\n            \"token_count\": 272\n        },\n        {\n            \"elapsed_time\": 274.64795112609863,\n            \"token_count\": 273\n        },\n        {\n            \"elapsed_time\": 273.0908393859863,\n            \"token_count\": 274\n        },\n        {\n            \"elapsed_time\": 273.9260196685791,\n            \"token_count\": 275\n        },\n        {\n            \"elapsed_time\": 276.1831283569336,\n            \"token_count\": 276\n        },\n        {\n            \"elapsed_time\": 275.8491039276123,\n            \"token_count\": 277\n        },\n        {\n            \"elapsed_time\": 281.0189723968506,\n            \"token_count\": 278\n        },\n        {\n            \"elapsed_time\": 277.0402431488037,\n            \"token_count\": 279\n        },\n        {\n            \"elapsed_time\": 282.0549011230469,\n            \"token_count\": 280\n        },\n        {\n            \"elapsed_time\": 282.088041305542,\n            \"token_count\": 281\n        },\n        {\n            \"elapsed_time\": 283.22625160217285,\n            \"token_count\": 282\n        },\n        {\n            \"elapsed_time\": 282.2577953338623,\n            \"token_count\": 283\n        },\n        {\n            \"elapsed_time\": 286.6480350494385,\n            \"token_count\": 284\n        },\n        {\n            \"elapsed_time\": 283.0181121826172,\n            \"token_count\": 285\n        },\n        {\n            \"elapsed_time\": 285.9029769897461,\n            \"token_count\": 286\n        },\n        {\n            \"elapsed_time\": 286.91601753234863,\n            \"token_count\": 287\n        },\n        {\n            \"elapsed_time\": 292.94419288635254,\n            \"token_count\": 288\n        },\n        {\n            \"elapsed_time\": 290.74621200561523,\n            \"token_count\": 289\n        },\n        {\n            \"elapsed_time\": 293.95198822021484,\n            \"token_count\": 290\n        },\n        {\n            \"elapsed_time\": 296.2679862976074,\n            \"token_count\": 291\n        },\n        {\n            \"elapsed_time\": 295.318603515625,\n            \"token_count\": 292\n        },\n        {\n            \"elapsed_time\": 304.0449619293213,\n            \"token_count\": 293\n        },\n        {\n            \"elapsed_time\": 292.1290397644043,\n            \"token_count\": 294\n        },\n        {\n            \"elapsed_time\": 295.4821586608887,\n            \"token_count\": 295\n        },\n        {\n            \"elapsed_time\": 295.5801486968994,\n            \"token_count\": 296\n        },\n        {\n            \"elapsed_time\": 300.42386054992676,\n            \"token_count\": 297\n        },\n        {\n            \"elapsed_time\": 297.5497245788574,\n            \"token_count\": 298\n        },\n        {\n            \"elapsed_time\": 299.1049289703369,\n            \"token_count\": 299\n        },\n        {\n            \"elapsed_time\": 336.3640308380127,\n            \"token_count\": 300\n        },\n        {\n            \"elapsed_time\": 301.8522262573242,\n            \"token_count\": 301\n        },\n        {\n            \"elapsed_time\": 305.1719665527344,\n            \"token_count\": 302\n        },\n        {\n            \"elapsed_time\": 302.45208740234375,\n            \"token_count\": 303\n        },\n        {\n            \"elapsed_time\": 301.4500141143799,\n            \"token_count\": 304\n        },\n        {\n            \"elapsed_time\": 306.7131042480469,\n            \"token_count\": 305\n        },\n        {\n            \"elapsed_time\": 306.4439296722412,\n            \"token_count\": 306\n        },\n        {\n            \"elapsed_time\": 310.29391288757324,\n            \"token_count\": 307\n        },\n        {\n            \"elapsed_time\": 311.42568588256836,\n            \"token_count\": 308\n        },\n        {\n            \"elapsed_time\": 308.07995796203613,\n            \"token_count\": 309\n        },\n        {\n            \"elapsed_time\": 307.58094787597656,\n            \"token_count\": 310\n        },\n        {\n            \"elapsed_time\": 336.6107940673828,\n            \"token_count\": 311\n        },\n        {\n            \"elapsed_time\": 317.2111511230469,\n            \"token_count\": 312\n        },\n        {\n            \"elapsed_time\": 313.53282928466797,\n            \"token_count\": 313\n        },\n        {\n            \"elapsed_time\": 315.57297706604004,\n            \"token_count\": 314\n        },\n        {\n            \"elapsed_time\": 312.15786933898926,\n            \"token_count\": 315\n        },\n        {\n            \"elapsed_time\": 313.7197494506836,\n            \"token_count\": 316\n        },\n        {\n            \"elapsed_time\": 320.8651542663574,\n            \"token_count\": 317\n        },\n        {\n            \"elapsed_time\": 318.77899169921875,\n            \"token_count\": 318\n        },\n        {\n            \"elapsed_time\": 317.7759647369385,\n            \"token_count\": 319\n        },\n        {\n            \"elapsed_time\": 326.6417980194092,\n            \"token_count\": 320\n        },\n        {\n            \"elapsed_time\": 318.8762664794922,\n            \"token_count\": 321\n        },\n        {\n            \"elapsed_time\": 318.10998916625977,\n            \"token_count\": 322\n        },\n        {\n            \"elapsed_time\": 319.2269802093506,\n            \"token_count\": 323\n        },\n        {\n            \"elapsed_time\": 321.7320442199707,\n            \"token_count\": 324\n        },\n        {\n            \"elapsed_time\": 324.4171142578125,\n            \"token_count\": 325\n        },\n        {\n            \"elapsed_time\": 332.5479030609131,\n            \"token_count\": 326\n        },\n        {\n            \"elapsed_time\": 333.04882049560547,\n            \"token_count\": 327\n        },\n        {\n            \"elapsed_time\": 329.4830322265625,\n            \"token_count\": 328\n        },\n        {\n            \"elapsed_time\": 328.9341926574707,\n            \"token_count\": 329\n        },\n        {\n            \"elapsed_time\": 329.0398120880127,\n            \"token_count\": 330\n        },\n        {\n            \"elapsed_time\": 354.0470600128174,\n            \"token_count\": 331\n        },\n        {\n            \"elapsed_time\": 332.73983001708984,\n            \"token_count\": 332\n        },\n        {\n            \"elapsed_time\": 331.91895484924316,\n            \"token_count\": 333\n        },\n        {\n            \"elapsed_time\": 334.2170715332031,\n            \"token_count\": 334\n        },\n        {\n            \"elapsed_time\": 337.3422622680664,\n            \"token_count\": 335\n        },\n        {\n            \"elapsed_time\": 334.5921039581299,\n            \"token_count\": 336\n        },\n        {\n            \"elapsed_time\": 335.7560634613037,\n            \"token_count\": 337\n        },\n        {\n            \"elapsed_time\": 341.005802154541,\n            \"token_count\": 338\n        },\n        {\n            \"elapsed_time\": 334.8731994628906,\n            \"token_count\": 339\n        },\n        {\n            \"elapsed_time\": 341.9320583343506,\n            \"token_count\": 340\n        },\n        {\n            \"elapsed_time\": 344.0670967102051,\n            \"token_count\": 341\n        },\n        {\n            \"elapsed_time\": 343.70899200439453,\n            \"token_count\": 342\n        },\n        {\n            \"elapsed_time\": 341.3829803466797,\n            \"token_count\": 343\n        },\n        {\n            \"elapsed_time\": 348.93107414245605,\n            \"token_count\": 344\n        },\n        {\n            \"elapsed_time\": 344.174861907959,\n            \"token_count\": 345\n        },\n        {\n            \"elapsed_time\": 345.81995010375977,\n            \"token_count\": 346\n        },\n        {\n            \"elapsed_time\": 348.7520217895508,\n            \"token_count\": 347\n        },\n        {\n            \"elapsed_time\": 348.3738899230957,\n            \"token_count\": 348\n        },\n        {\n            \"elapsed_time\": 345.8671569824219,\n            \"token_count\": 349\n        },\n        {\n            \"elapsed_time\": 350.0561714172363,\n            \"token_count\": 350\n        },\n        {\n            \"elapsed_time\": 347.4860191345215,\n            \"token_count\": 351\n        },\n        {\n            \"elapsed_time\": 352.05078125,\n            \"token_count\": 352\n        },\n        {\n            \"elapsed_time\": 350.1091003417969,\n            \"token_count\": 353\n        },\n        {\n            \"elapsed_time\": 355.0229072570801,\n            \"token_count\": 354\n        },\n        {\n            \"elapsed_time\": 357.105016708374,\n            \"token_count\": 355\n        },\n        {\n            \"elapsed_time\": 359.464168548584,\n            \"token_count\": 356\n        },\n        {\n            \"elapsed_time\": 358.7932586669922,\n            \"token_count\": 357\n        },\n        {\n            \"elapsed_time\": 363.2500171661377,\n            \"token_count\": 358\n        },\n        {\n            \"elapsed_time\": 369.2049980163574,\n            \"token_count\": 359\n        },\n        {\n            \"elapsed_time\": 384.37819480895996,\n            \"token_count\": 360\n        },\n        {\n            \"elapsed_time\": 365.94080924987793,\n            \"token_count\": 361\n        },\n        {\n            \"elapsed_time\": 363.8288974761963,\n            \"token_count\": 362\n        },\n        {\n            \"elapsed_time\": 365.9951686859131,\n            \"token_count\": 363\n        },\n        {\n            \"elapsed_time\": 365.1881217956543,\n            \"token_count\": 364\n        },\n        {\n            \"elapsed_time\": 370.5451488494873,\n            \"token_count\": 365\n        },\n        {\n            \"elapsed_time\": 367.04421043395996,\n            \"token_count\": 366\n        },\n        {\n            \"elapsed_time\": 366.15896224975586,\n            \"token_count\": 367\n        },\n        {\n            \"elapsed_time\": 370.7408905029297,\n            \"token_count\": 368\n        },\n        {\n            \"elapsed_time\": 374.71723556518555,\n            \"token_count\": 369\n        },\n        {\n            \"elapsed_time\": 370.95093727111816,\n            \"token_count\": 370\n        },\n        {\n            \"elapsed_time\": 368.5319423675537,\n            \"token_count\": 371\n        },\n        {\n            \"elapsed_time\": 371.4439868927002,\n            \"token_count\": 372\n        },\n        {\n            \"elapsed_time\": 372.1799850463867,\n            \"token_count\": 373\n        },\n        {\n            \"elapsed_time\": 376.2097358703613,\n            \"token_count\": 374\n        },\n        {\n            \"elapsed_time\": 375.87904930114746,\n            \"token_count\": 375\n        },\n        {\n            \"elapsed_time\": 378.0653476715088,\n            \"token_count\": 376\n        },\n        {\n            \"elapsed_time\": 377.11501121520996,\n            \"token_count\": 377\n        },\n        {\n            \"elapsed_time\": 384.5939636230469,\n            \"token_count\": 378\n        },\n        {\n            \"elapsed_time\": 385.43009757995605,\n            \"token_count\": 379\n        },\n        {\n            \"elapsed_time\": 378.277063369751,\n            \"token_count\": 380\n        },\n        {\n            \"elapsed_time\": 383.90398025512695,\n            \"token_count\": 381\n        },\n        {\n            \"elapsed_time\": 383.8071823120117,\n            \"token_count\": 382\n        },\n        {\n            \"elapsed_time\": 384.5667839050293,\n            \"token_count\": 383\n        },\n        {\n            \"elapsed_time\": 387.7251148223877,\n            \"token_count\": 384\n        },\n        {\n            \"elapsed_time\": 409.31105613708496,\n            \"token_count\": 385\n        },\n        {\n            \"elapsed_time\": 417.7131652832031,\n            \"token_count\": 386\n        },\n        {\n            \"elapsed_time\": 400.2389907836914,\n            \"token_count\": 387\n        },\n        {\n            \"elapsed_time\": 408.91075134277344,\n            \"token_count\": 388\n        },\n        {\n            \"elapsed_time\": 416.3250923156738,\n            \"token_count\": 389\n        },\n        {\n            \"elapsed_time\": 426.1159896850586,\n            \"token_count\": 390\n        },\n        {\n            \"elapsed_time\": 408.397912979126,\n            \"token_count\": 391\n        },\n        {\n            \"elapsed_time\": 388.1049156188965,\n            \"token_count\": 392\n        },\n        {\n            \"elapsed_time\": 383.00490379333496,\n            \"token_count\": 393\n        },\n        {\n            \"elapsed_time\": 424.3659973144531,\n            \"token_count\": 394\n        },\n        {\n            \"elapsed_time\": 398.3330726623535,\n            \"token_count\": 395\n        },\n        {\n            \"elapsed_time\": 392.54307746887207,\n            \"token_count\": 396\n        },\n        {\n            \"elapsed_time\": 477.85496711730957,\n            \"token_count\": 397\n        },\n        {\n            \"elapsed_time\": 440.6557083129883,\n            \"token_count\": 398\n        },\n        {\n            \"elapsed_time\": 441.8160915374756,\n            \"token_count\": 399\n        },\n        {\n            \"elapsed_time\": 456.50315284729004,\n            \"token_count\": 400\n        },\n        {\n            \"elapsed_time\": 411.6809368133545,\n            \"token_count\": 401\n        },\n        {\n            \"elapsed_time\": 417.77896881103516,\n            \"token_count\": 402\n        },\n        {\n            \"elapsed_time\": 407.74011611938477,\n            \"token_count\": 403\n        },\n        {\n            \"elapsed_time\": 406.7211151123047,\n            \"token_count\": 404\n        },\n        {\n            \"elapsed_time\": 407.82904624938965,\n            \"token_count\": 405\n        },\n        {\n            \"elapsed_time\": 424.335241317749,\n            \"token_count\": 406\n        },\n        {\n            \"elapsed_time\": 445.2629089355469,\n            \"token_count\": 407\n        },\n        {\n            \"elapsed_time\": 428.9829730987549,\n            \"token_count\": 408\n        },\n        {\n            \"elapsed_time\": 467.9739475250244,\n            \"token_count\": 409\n        },\n        {\n            \"elapsed_time\": 427.49881744384766,\n            \"token_count\": 410\n        },\n        {\n            \"elapsed_time\": 447.6337432861328,\n            \"token_count\": 411\n        },\n        {\n            \"elapsed_time\": 417.7069664001465,\n            \"token_count\": 412\n        },\n        {\n            \"elapsed_time\": 426.30887031555176,\n            \"token_count\": 413\n        },\n        {\n            \"elapsed_time\": 434.2389106750488,\n            \"token_count\": 414\n        },\n        {\n            \"elapsed_time\": 428.8160800933838,\n            \"token_count\": 415\n        },\n        {\n            \"elapsed_time\": 506.3459873199463,\n            \"token_count\": 416\n        },\n        {\n            \"elapsed_time\": 438.31396102905273,\n            \"token_count\": 417\n        },\n        {\n            \"elapsed_time\": 428.0991554260254,\n            \"token_count\": 418\n        },\n        {\n            \"elapsed_time\": 424.893856048584,\n            \"token_count\": 419\n        },\n        {\n            \"elapsed_time\": 433.1321716308594,\n            \"token_count\": 420\n        },\n        {\n            \"elapsed_time\": 430.67121505737305,\n            \"token_count\": 421\n        },\n        {\n            \"elapsed_time\": 438.9798641204834,\n            \"token_count\": 422\n        },\n        {\n            \"elapsed_time\": 421.0679531097412,\n            \"token_count\": 423\n        },\n        {\n            \"elapsed_time\": 426.4037609100342,\n            \"token_count\": 424\n        },\n        {\n            \"elapsed_time\": 416.1832332611084,\n            \"token_count\": 425\n        },\n        {\n            \"elapsed_time\": 409.7311496734619,\n            \"token_count\": 426\n        },\n        {\n            \"elapsed_time\": 417.1748161315918,\n            \"token_count\": 427\n        },\n        {\n            \"elapsed_time\": 448.0559825897217,\n            \"token_count\": 428\n        },\n        {\n            \"elapsed_time\": 437.2999668121338,\n            \"token_count\": 429\n        },\n        {\n            \"elapsed_time\": 421.44274711608887,\n            \"token_count\": 430\n        },\n        {\n            \"elapsed_time\": 425.0040054321289,\n            \"token_count\": 431\n        },\n        {\n            \"elapsed_time\": 441.12682342529297,\n            \"token_count\": 432\n        },\n        {\n            \"elapsed_time\": 435.57095527648926,\n            \"token_count\": 433\n        },\n        {\n            \"elapsed_time\": 416.2321090698242,\n            \"token_count\": 434\n        },\n        {\n            \"elapsed_time\": 419.2769527435303,\n            \"token_count\": 435\n        },\n        {\n            \"elapsed_time\": 429.2941093444824,\n            \"token_count\": 436\n        },\n        {\n            \"elapsed_time\": 461.21907234191895,\n            \"token_count\": 437\n        },\n        {\n            \"elapsed_time\": 466.1281108856201,\n            \"token_count\": 438\n        },\n        {\n            \"elapsed_time\": 465.40212631225586,\n            \"token_count\": 439\n        },\n        {\n            \"elapsed_time\": 488.9678955078125,\n            \"token_count\": 440\n        },\n        {\n            \"elapsed_time\": 464.59197998046875,\n            \"token_count\": 441\n        },\n        {\n            \"elapsed_time\": 460.94799041748047,\n            \"token_count\": 442\n        },\n        {\n            \"elapsed_time\": 445.404052734375,\n            \"token_count\": 443\n        },\n        {\n            \"elapsed_time\": 453.6876678466797,\n            \"token_count\": 444\n        },\n        {\n            \"elapsed_time\": 445.02782821655273,\n            \"token_count\": 445\n        },\n        {\n            \"elapsed_time\": 490.4487133026123,\n            \"token_count\": 446\n        },\n        {\n            \"elapsed_time\": 436.722993850708,\n            \"token_count\": 447\n        },\n        {\n            \"elapsed_time\": 434.948205947876,\n            \"token_count\": 448\n        },\n        {\n            \"elapsed_time\": 437.9758834838867,\n            \"token_count\": 449\n        },\n        {\n            \"elapsed_time\": 434.99112129211426,\n            \"token_count\": 450\n        },\n        {\n            \"elapsed_time\": 444.4091320037842,\n            \"token_count\": 451\n        },\n        {\n            \"elapsed_time\": 436.3710880279541,\n            \"token_count\": 452\n        },\n        {\n            \"elapsed_time\": 437.76512145996094,\n            \"token_count\": 453\n        },\n        {\n            \"elapsed_time\": 469.7380065917969,\n            \"token_count\": 454\n        },\n        {\n            \"elapsed_time\": 450.8390426635742,\n            \"token_count\": 455\n        },\n        {\n            \"elapsed_time\": 445.85394859313965,\n            \"token_count\": 456\n        },\n        {\n            \"elapsed_time\": 444.27490234375,\n            \"token_count\": 457\n        },\n        {\n            \"elapsed_time\": 453.5098075866699,\n            \"token_count\": 458\n        },\n        {\n            \"elapsed_time\": 449.1729736328125,\n            \"token_count\": 459\n        },\n        {\n            \"elapsed_time\": 499.47404861450195,\n            \"token_count\": 460\n        },\n        {\n            \"elapsed_time\": 570.4200267791748,\n            \"token_count\": 461\n        },\n        {\n            \"elapsed_time\": 493.44801902770996,\n            \"token_count\": 462\n        },\n        {\n            \"elapsed_time\": 496.5167045593262,\n            \"token_count\": 463\n        },\n        {\n            \"elapsed_time\": 461.5209102630615,\n            \"token_count\": 464\n        },\n        {\n            \"elapsed_time\": 459.2139720916748,\n            \"token_count\": 465\n        },\n        {\n            \"elapsed_time\": 453.20606231689453,\n            \"token_count\": 466\n        },\n        {\n            \"elapsed_time\": 462.4667167663574,\n            \"token_count\": 467\n        },\n        {\n            \"elapsed_time\": 461.4448547363281,\n            \"token_count\": 468\n        },\n        {\n            \"elapsed_time\": 456.1190605163574,\n            \"token_count\": 469\n        },\n        {\n            \"elapsed_time\": 458.65917205810547,\n            \"token_count\": 470\n        },\n        {\n            \"elapsed_time\": 470.3030586242676,\n            \"token_count\": 471\n        },\n        {\n            \"elapsed_time\": 461.6281986236572,\n            \"token_count\": 472\n        },\n        {\n            \"elapsed_time\": 461.8861675262451,\n            \"token_count\": 473\n        },\n        {\n            \"elapsed_time\": 456.89916610717773,\n            \"token_count\": 474\n        },\n        {\n            \"elapsed_time\": 494.52710151672363,\n            \"token_count\": 475\n        },\n        {\n            \"elapsed_time\": 465.670108795166,\n            \"token_count\": 476\n        },\n        {\n            \"elapsed_time\": 473.36769104003906,\n            \"token_count\": 477\n        },\n        {\n            \"elapsed_time\": 460.8421325683594,\n            \"token_count\": 478\n        },\n        {\n            \"elapsed_time\": 462.3439311981201,\n            \"token_count\": 479\n        },\n        {\n            \"elapsed_time\": 485.84604263305664,\n            \"token_count\": 480\n        },\n        {\n            \"elapsed_time\": 493.72410774230957,\n            \"token_count\": 481\n        },\n        {\n            \"elapsed_time\": 507.74502754211426,\n            \"token_count\": 482\n        },\n        {\n            \"elapsed_time\": 484.48801040649414,\n            \"token_count\": 483\n        },\n        {\n            \"elapsed_time\": 474.3969440460205,\n            \"token_count\": 484\n        },\n        {\n            \"elapsed_time\": 472.7020263671875,\n            \"token_count\": 485\n        },\n        {\n            \"elapsed_time\": 472.1040725708008,\n            \"token_count\": 486\n        },\n        {\n            \"elapsed_time\": 475.95906257629395,\n            \"token_count\": 487\n        },\n        {\n            \"elapsed_time\": 477.8859615325928,\n            \"token_count\": 488\n        },\n        {\n            \"elapsed_time\": 477.327823638916,\n            \"token_count\": 489\n        },\n        {\n            \"elapsed_time\": 477.26988792419434,\n            \"token_count\": 490\n        },\n        {\n            \"elapsed_time\": 478.53803634643555,\n            \"token_count\": 491\n        },\n        {\n            \"elapsed_time\": 496.6771602630615,\n            \"token_count\": 492\n        },\n        {\n            \"elapsed_time\": 556.1008453369141,\n            \"token_count\": 493\n        },\n        {\n            \"elapsed_time\": 490.1928901672363,\n            \"token_count\": 494\n        },\n        {\n            \"elapsed_time\": 500.03623962402344,\n            \"token_count\": 495\n        },\n        {\n            \"elapsed_time\": 486.71889305114746,\n            \"token_count\": 496\n        },\n        {\n            \"elapsed_time\": 480.3178310394287,\n            \"token_count\": 497\n        },\n        {\n            \"elapsed_time\": 484.6360683441162,\n            \"token_count\": 498\n        },\n        {\n            \"elapsed_time\": 482.41186141967773,\n            \"token_count\": 499\n        },\n        {\n            \"elapsed_time\": 521.5590000152588,\n            \"token_count\": 500\n        },\n        {\n            \"elapsed_time\": 519.4799900054932,\n            \"token_count\": 501\n        },\n        {\n            \"elapsed_time\": 512.2461318969727,\n            \"token_count\": 502\n        },\n        {\n            \"elapsed_time\": 497.71976470947266,\n            \"token_count\": 503\n        },\n        {\n            \"elapsed_time\": 490.63587188720703,\n            \"token_count\": 504\n        },\n        {\n            \"elapsed_time\": 495.24617195129395,\n            \"token_count\": 505\n        },\n        {\n            \"elapsed_time\": 491.3179874420166,\n            \"token_count\": 506\n        },\n        {\n            \"elapsed_time\": 510.59579849243164,\n            \"token_count\": 507\n        },\n        {\n            \"elapsed_time\": 495.6858158111572,\n            \"token_count\": 508\n        },\n        {\n            \"elapsed_time\": 502.8700828552246,\n            \"token_count\": 509\n        },\n        {\n            \"elapsed_time\": 514.8937702178955,\n            \"token_count\": 510\n        },\n        {\n            \"elapsed_time\": 496.0649013519287,\n            \"token_count\": 511\n        },\n        {\n            \"elapsed_time\": 497.32112884521484,\n            \"token_count\": 512\n        },\n        {\n            \"elapsed_time\": 501.6951560974121,\n            \"token_count\": 513\n        },\n        {\n            \"elapsed_time\": 499.5579719543457,\n            \"token_count\": 514\n        },\n        {\n            \"elapsed_time\": 525.2909660339355,\n            \"token_count\": 515\n        },\n        {\n            \"elapsed_time\": 508.52203369140625,\n            \"token_count\": 516\n        },\n        {\n            \"elapsed_time\": 500.12803077697754,\n            \"token_count\": 517\n        },\n        {\n            \"elapsed_time\": 503.83782386779785,\n            \"token_count\": 518\n        },\n        {\n            \"elapsed_time\": 533.4410667419434,\n            \"token_count\": 519\n        },\n        {\n            \"elapsed_time\": 559.0431690216064,\n            \"token_count\": 520\n        },\n        {\n            \"elapsed_time\": 559.8242282867432,\n            \"token_count\": 521\n        },\n        {\n            \"elapsed_time\": 521.9700336456299,\n            \"token_count\": 522\n        },\n        {\n            \"elapsed_time\": 526.6900062561035,\n            \"token_count\": 523\n        },\n        {\n            \"elapsed_time\": 511.0049247741699,\n            \"token_count\": 524\n        },\n        {\n            \"elapsed_time\": 514.5778656005859,\n            \"token_count\": 525\n        },\n        {\n            \"elapsed_time\": 514.1708850860596,\n            \"token_count\": 526\n        },\n        {\n            \"elapsed_time\": 516.7269706726074,\n            \"token_count\": 527\n        },\n        {\n            \"elapsed_time\": 525.9373188018799,\n            \"token_count\": 528\n        },\n        {\n            \"elapsed_time\": 525.1889228820801,\n            \"token_count\": 529\n        },\n        {\n            \"elapsed_time\": 518.6707973480225,\n            \"token_count\": 530\n        },\n        {\n            \"elapsed_time\": 528.0117988586426,\n            \"token_count\": 531\n        },\n        {\n            \"elapsed_time\": 519.6027755737305,\n            \"token_count\": 532\n        },\n        {\n            \"elapsed_time\": 525.0160694122314,\n            \"token_count\": 533\n        },\n        {\n            \"elapsed_time\": 550.6200790405273,\n            \"token_count\": 534\n        },\n        {\n            \"elapsed_time\": 522.7260589599609,\n            \"token_count\": 535\n        },\n        {\n            \"elapsed_time\": 517.3521041870117,\n            \"token_count\": 536\n        },\n        {\n            \"elapsed_time\": 535.7329845428467,\n            \"token_count\": 537\n        },\n        {\n            \"elapsed_time\": 549.4029521942139,\n            \"token_count\": 538\n        },\n        {\n            \"elapsed_time\": 568.2649612426758,\n            \"token_count\": 539\n        },\n        {\n            \"elapsed_time\": 539.3872261047363,\n            \"token_count\": 540\n        },\n        {\n            \"elapsed_time\": 535.4480743408203,\n            \"token_count\": 541\n        },\n        {\n            \"elapsed_time\": 527.4639129638672,\n            \"token_count\": 542\n        },\n        {\n            \"elapsed_time\": 528.648853302002,\n            \"token_count\": 543\n        },\n        {\n            \"elapsed_time\": 523.05006980896,\n            \"token_count\": 544\n        },\n        {\n            \"elapsed_time\": 540.1520729064941,\n            \"token_count\": 545\n        },\n        {\n            \"elapsed_time\": 539.6311283111572,\n            \"token_count\": 546\n        },\n        {\n            \"elapsed_time\": 548.1328964233398,\n            \"token_count\": 547\n        },\n        {\n            \"elapsed_time\": 561.5191459655762,\n            \"token_count\": 548\n        },\n        {\n            \"elapsed_time\": 534.7428321838379,\n            \"token_count\": 549\n        },\n        {\n            \"elapsed_time\": 539.0269756317139,\n            \"token_count\": 550\n        },\n        {\n            \"elapsed_time\": 537.045955657959,\n            \"token_count\": 551\n        },\n        {\n            \"elapsed_time\": 563.9400482177734,\n            \"token_count\": 552\n        },\n        {\n            \"elapsed_time\": 539.4518375396729,\n            \"token_count\": 553\n        },\n        {\n            \"elapsed_time\": 540.3928756713867,\n            \"token_count\": 554\n        },\n        {\n            \"elapsed_time\": 565.2949810028076,\n            \"token_count\": 555\n        },\n        {\n            \"elapsed_time\": 559.8609447479248,\n            \"token_count\": 556\n        },\n        {\n            \"elapsed_time\": 564.2290115356445,\n            \"token_count\": 557\n        },\n        {\n            \"elapsed_time\": 554.7668933868408,\n            \"token_count\": 558\n        },\n        {\n            \"elapsed_time\": 543.7991619110107,\n            \"token_count\": 559\n        },\n        {\n            \"elapsed_time\": 548.3779907226562,\n            \"token_count\": 560\n        },\n        {\n            \"elapsed_time\": 554.896354675293,\n            \"token_count\": 561\n        },\n        {\n            \"elapsed_time\": 549.4740009307861,\n            \"token_count\": 562\n        },\n        {\n            \"elapsed_time\": 548.583984375,\n            \"token_count\": 563\n        },\n        {\n            \"elapsed_time\": 548.9439964294434,\n            \"token_count\": 564\n        },\n        {\n            \"elapsed_time\": 561.2199306488037,\n            \"token_count\": 565\n        },\n        {\n            \"elapsed_time\": 550.1072406768799,\n            \"token_count\": 566\n        },\n        {\n            \"elapsed_time\": 550.8038997650146,\n            \"token_count\": 567\n        },\n        {\n            \"elapsed_time\": 554.7902584075928,\n            \"token_count\": 568\n        },\n        {\n            \"elapsed_time\": 559.8747730255127,\n            \"token_count\": 569\n        },\n        {\n            \"elapsed_time\": 578.2039165496826,\n            \"token_count\": 570\n        },\n        {\n            \"elapsed_time\": 560.9710216522217,\n            \"token_count\": 571\n        },\n        {\n            \"elapsed_time\": 561.2380504608154,\n            \"token_count\": 572\n        },\n        {\n            \"elapsed_time\": 586.9040489196777,\n            \"token_count\": 573\n        },\n        {\n            \"elapsed_time\": 605.8380603790283,\n            \"token_count\": 574\n        },\n        {\n            \"elapsed_time\": 583.1217765808105,\n            \"token_count\": 575\n        },\n        {\n            \"elapsed_time\": 564.8770332336426,\n            \"token_count\": 576\n        },\n        {\n            \"elapsed_time\": 564.9909973144531,\n            \"token_count\": 577\n        },\n        {\n            \"elapsed_time\": 562.7660751342773,\n            \"token_count\": 578\n        },\n        {\n            \"elapsed_time\": 567.4760341644287,\n            \"token_count\": 579\n        },\n        {\n            \"elapsed_time\": 570.4531669616699,\n            \"token_count\": 580\n        },\n        {\n            \"elapsed_time\": 570.8537101745605,\n            \"token_count\": 581\n        },\n        {\n            \"elapsed_time\": 570.5368518829346,\n            \"token_count\": 582\n        },\n        {\n            \"elapsed_time\": 569.8349475860596,\n            \"token_count\": 583\n        },\n        {\n            \"elapsed_time\": 571.5010166168213,\n            \"token_count\": 584\n        },\n        {\n            \"elapsed_time\": 579.1959762573242,\n            \"token_count\": 585\n        },\n        {\n            \"elapsed_time\": 572.4055767059326,\n            \"token_count\": 586\n        },\n        {\n            \"elapsed_time\": 592.7660465240479,\n            \"token_count\": 587\n        },\n        {\n            \"elapsed_time\": 582.8151702880859,\n            \"token_count\": 588\n        },\n        {\n            \"elapsed_time\": 581.9079875946045,\n            \"token_count\": 589\n        },\n        {\n            \"elapsed_time\": 597.4950790405273,\n            \"token_count\": 590\n        },\n        {\n            \"elapsed_time\": 612.7002239227295,\n            \"token_count\": 591\n        },\n        {\n            \"elapsed_time\": 590.4951095581055,\n            \"token_count\": 592\n        },\n        {\n            \"elapsed_time\": 580.7859897613525,\n            \"token_count\": 593\n        },\n        {\n            \"elapsed_time\": 597.8291034698486,\n            \"token_count\": 594\n        },\n        {\n            \"elapsed_time\": 605.043888092041,\n            \"token_count\": 595\n        },\n        {\n            \"elapsed_time\": 619.1518306732178,\n            \"token_count\": 596\n        },\n        {\n            \"elapsed_time\": 583.9929580688477,\n            \"token_count\": 597\n        },\n        {\n            \"elapsed_time\": 591.2821292877197,\n            \"token_count\": 598\n        },\n        {\n            \"elapsed_time\": 613.26003074646,\n            \"token_count\": 599\n        },\n        {\n            \"elapsed_time\": 592.9069519042969,\n            \"token_count\": 600\n        },\n        {\n            \"elapsed_time\": 596.6241359710693,\n            \"token_count\": 601\n        },\n        {\n            \"elapsed_time\": 599.308967590332,\n            \"token_count\": 602\n        },\n        {\n            \"elapsed_time\": 601.0639667510986,\n            \"token_count\": 603\n        },\n        {\n            \"elapsed_time\": 623.3329772949219,\n            \"token_count\": 604\n        },\n        {\n            \"elapsed_time\": 598.0930328369141,\n            \"token_count\": 605\n        },\n        {\n            \"elapsed_time\": 632.274866104126,\n            \"token_count\": 606\n        },\n        {\n            \"elapsed_time\": 645.4660892486572,\n            \"token_count\": 607\n        },\n        {\n            \"elapsed_time\": 609.9510192871094,\n            \"token_count\": 608\n        },\n        {\n            \"elapsed_time\": 597.5987911224365,\n            \"token_count\": 609\n        },\n        {\n            \"elapsed_time\": 600.2588272094727,\n            \"token_count\": 610\n        },\n        {\n            \"elapsed_time\": 610.1539134979248,\n            \"token_count\": 611\n        },\n        {\n            \"elapsed_time\": 604.8843860626221,\n            \"token_count\": 612\n        },\n        {\n            \"elapsed_time\": 594.1450595855713,\n            \"token_count\": 613\n        },\n        {\n            \"elapsed_time\": 600.4259586334229,\n            \"token_count\": 614\n        },\n        {\n            \"elapsed_time\": 611.975908279419,\n            \"token_count\": 615\n        },\n        {\n            \"elapsed_time\": 611.6209030151367,\n            \"token_count\": 616\n        },\n        {\n            \"elapsed_time\": 640.1662826538086,\n            \"token_count\": 617\n        },\n        {\n            \"elapsed_time\": 618.4589862823486,\n            \"token_count\": 618\n        },\n        {\n            \"elapsed_time\": 620.1009750366211,\n            \"token_count\": 619\n        },\n        {\n            \"elapsed_time\": 646.6770172119141,\n            \"token_count\": 620\n        },\n        {\n            \"elapsed_time\": 621.64306640625,\n            \"token_count\": 621\n        },\n        {\n            \"elapsed_time\": 726.8228530883789,\n            \"token_count\": 622\n        },\n        {\n            \"elapsed_time\": 710.4299068450928,\n            \"token_count\": 623\n        },\n        {\n            \"elapsed_time\": 628.183126449585,\n            \"token_count\": 624\n        },\n        {\n            \"elapsed_time\": 619.276762008667,\n            \"token_count\": 625\n        },\n        {\n            \"elapsed_time\": 613.8589382171631,\n            \"token_count\": 626\n        },\n        {\n            \"elapsed_time\": 620.3219890594482,\n            \"token_count\": 627\n        },\n        {\n            \"elapsed_time\": 649.1000652313232,\n            \"token_count\": 628\n        },\n        {\n            \"elapsed_time\": 617.3152923583984,\n            \"token_count\": 629\n        },\n        {\n            \"elapsed_time\": 643.151044845581,\n            \"token_count\": 630\n        },\n        {\n            \"elapsed_time\": 643.4428691864014,\n            \"token_count\": 631\n        },\n        {\n            \"elapsed_time\": 641.9332027435303,\n            \"token_count\": 632\n        },\n        {\n            \"elapsed_time\": 644.2077159881592,\n            \"token_count\": 633\n        },\n        {\n            \"elapsed_time\": 648.3910083770752,\n            \"token_count\": 634\n        },\n        {\n            \"elapsed_time\": 681.6592216491699,\n            \"token_count\": 635\n        },\n        {\n            \"elapsed_time\": 651.1030197143555,\n            \"token_count\": 636\n        },\n        {\n            \"elapsed_time\": 661.7991924285889,\n            \"token_count\": 637\n        },\n        {\n            \"elapsed_time\": 667.7999496459961,\n            \"token_count\": 638\n        },\n        {\n            \"elapsed_time\": 684.6127510070801,\n            \"token_count\": 639\n        },\n        {\n            \"elapsed_time\": 660.477876663208,\n            \"token_count\": 640\n        },\n        {\n            \"elapsed_time\": 649.94215965271,\n            \"token_count\": 641\n        },\n        {\n            \"elapsed_time\": 655.6398868560791,\n            \"token_count\": 642\n        },\n        {\n            \"elapsed_time\": 654.2057991027832,\n            \"token_count\": 643\n        },\n        {\n            \"elapsed_time\": 651.4029502868652,\n            \"token_count\": 644\n        },\n        {\n            \"elapsed_time\": 654.1929244995117,\n            \"token_count\": 645\n        },\n        {\n            \"elapsed_time\": 656.9077968597412,\n            \"token_count\": 646\n        },\n        {\n            \"elapsed_time\": 658.581018447876,\n            \"token_count\": 647\n        },\n        {\n            \"elapsed_time\": 661.2038612365723,\n            \"token_count\": 648\n        },\n        {\n            \"elapsed_time\": 667.8159236907959,\n            \"token_count\": 649\n        },\n        {\n            \"elapsed_time\": 708.7538242340088,\n            \"token_count\": 650\n        },\n        {\n            \"elapsed_time\": 712.4860286712646,\n            \"token_count\": 651\n        },\n        {\n            \"elapsed_time\": 684.7560405731201,\n            \"token_count\": 652\n        },\n        {\n            \"elapsed_time\": 685.575008392334,\n            \"token_count\": 653\n        },\n        {\n            \"elapsed_time\": 679.354190826416,\n            \"token_count\": 654\n        },\n        {\n            \"elapsed_time\": 665.9941673278809,\n            \"token_count\": 655\n        },\n        {\n            \"elapsed_time\": 671.2608337402344,\n            \"token_count\": 656\n        },\n        {\n            \"elapsed_time\": 665.4930114746094,\n            \"token_count\": 657\n        },\n        {\n            \"elapsed_time\": 665.9131050109863,\n            \"token_count\": 658\n        },\n        {\n            \"elapsed_time\": 669.295072555542,\n            \"token_count\": 659\n        },\n        {\n            \"elapsed_time\": 662.956953048706,\n            \"token_count\": 660\n        },\n        {\n            \"elapsed_time\": 670.1853275299072,\n            \"token_count\": 661\n        },\n        {\n            \"elapsed_time\": 668.8430309295654,\n            \"token_count\": 662\n        },\n        {\n            \"elapsed_time\": 668.4768199920654,\n            \"token_count\": 663\n        },\n        {\n            \"elapsed_time\": 674.0128993988037,\n            \"token_count\": 664\n        },\n        {\n            \"elapsed_time\": 720.0701236724854,\n            \"token_count\": 665\n        },\n        {\n            \"elapsed_time\": 681.542158126831,\n            \"token_count\": 666\n        },\n        {\n            \"elapsed_time\": 677.8302192687988,\n            \"token_count\": 667\n        },\n        {\n            \"elapsed_time\": 673.5413074493408,\n            \"token_count\": 668\n        },\n        {\n            \"elapsed_time\": 673.1760501861572,\n            \"token_count\": 669\n        },\n        {\n            \"elapsed_time\": 677.3147583007812,\n            \"token_count\": 670\n        },\n        {\n            \"elapsed_time\": 680.4599761962891,\n            \"token_count\": 671\n        },\n        {\n            \"elapsed_time\": 685.36376953125,\n            \"token_count\": 672\n        },\n        {\n            \"elapsed_time\": 684.7589015960693,\n            \"token_count\": 673\n        },\n        {\n            \"elapsed_time\": 685.128927230835,\n            \"token_count\": 674\n        },\n        {\n            \"elapsed_time\": 685.4660511016846,\n            \"token_count\": 675\n        },\n        {\n            \"elapsed_time\": 687.8349781036377,\n            \"token_count\": 676\n        },\n        {\n            \"elapsed_time\": 692.0487880706787,\n            \"token_count\": 677\n        },\n        {\n            \"elapsed_time\": 688.1997585296631,\n            \"token_count\": 678\n        },\n        {\n            \"elapsed_time\": 712.3813629150391,\n            \"token_count\": 679\n        },\n        {\n            \"elapsed_time\": 696.4809894561768,\n            \"token_count\": 680\n        },\n        {\n            \"elapsed_time\": 693.6180591583252,\n            \"token_count\": 681\n        },\n        {\n            \"elapsed_time\": 693.9289569854736,\n            \"token_count\": 682\n        },\n        {\n            \"elapsed_time\": 695.7530975341797,\n            \"token_count\": 683\n        },\n        {\n            \"elapsed_time\": 692.4891471862793,\n            \"token_count\": 684\n        },\n        {\n            \"elapsed_time\": 691.3399696350098,\n            \"token_count\": 685\n        },\n        {\n            \"elapsed_time\": 697.0570087432861,\n            \"token_count\": 686\n        },\n        {\n            \"elapsed_time\": 700.7420063018799,\n            \"token_count\": 687\n        },\n        {\n            \"elapsed_time\": 698.5862255096436,\n            \"token_count\": 688\n        },\n        {\n            \"elapsed_time\": 703.6690711975098,\n            \"token_count\": 689\n        },\n        {\n            \"elapsed_time\": 697.3750591278076,\n            \"token_count\": 690\n        },\n        {\n            \"elapsed_time\": 698.9147663116455,\n            \"token_count\": 691\n        },\n        {\n            \"elapsed_time\": 707.2639465332031,\n            \"token_count\": 692\n        },\n        {\n            \"elapsed_time\": 725.6231307983398,\n            \"token_count\": 693\n        },\n        {\n            \"elapsed_time\": 719.4039821624756,\n            \"token_count\": 694\n        },\n        {\n            \"elapsed_time\": 704.409122467041,\n            \"token_count\": 695\n        },\n        {\n            \"elapsed_time\": 721.0156917572021,\n            \"token_count\": 696\n        },\n        {\n            \"elapsed_time\": 711.9140625,\n            \"token_count\": 697\n        },\n        {\n            \"elapsed_time\": 712.2728824615479,\n            \"token_count\": 698\n        },\n        {\n            \"elapsed_time\": 711.4911079406738,\n            \"token_count\": 699\n        },\n        {\n            \"elapsed_time\": 715.2609825134277,\n            \"token_count\": 700\n        },\n        {\n            \"elapsed_time\": 720.6470966339111,\n            \"token_count\": 701\n        },\n        {\n            \"elapsed_time\": 713.7801647186279,\n            \"token_count\": 702\n        },\n        {\n            \"elapsed_time\": 715.9850597381592,\n            \"token_count\": 703\n        },\n        {\n            \"elapsed_time\": 714.390754699707,\n            \"token_count\": 704\n        },\n        {\n            \"elapsed_time\": 713.7837409973145,\n            \"token_count\": 705\n        },\n        {\n            \"elapsed_time\": 717.2880172729492,\n            \"token_count\": 706\n        },\n        {\n            \"elapsed_time\": 737.3449802398682,\n            \"token_count\": 707\n        },\n        {\n            \"elapsed_time\": 730.7889461517334,\n            \"token_count\": 708\n        },\n        {\n            \"elapsed_time\": 719.6478843688965,\n            \"token_count\": 709\n        },\n        {\n            \"elapsed_time\": 724.1098880767822,\n            \"token_count\": 710\n        },\n        {\n            \"elapsed_time\": 725.2438068389893,\n            \"token_count\": 711\n        },\n        {\n            \"elapsed_time\": 730.7620048522949,\n            \"token_count\": 712\n        },\n        {\n            \"elapsed_time\": 728.5861968994141,\n            \"token_count\": 713\n        },\n        {\n            \"elapsed_time\": 742.5169944763184,\n            \"token_count\": 714\n        },\n        {\n            \"elapsed_time\": 736.163854598999,\n            \"token_count\": 715\n        },\n        {\n            \"elapsed_time\": 734.220027923584,\n            \"token_count\": 716\n        },\n        {\n            \"elapsed_time\": 733.9432239532471,\n            \"token_count\": 717\n        },\n        {\n            \"elapsed_time\": 735.5148792266846,\n            \"token_count\": 718\n        },\n        {\n            \"elapsed_time\": 733.6602210998535,\n            \"token_count\": 719\n        },\n        {\n            \"elapsed_time\": 734.2422008514404,\n            \"token_count\": 720\n        },\n        {\n            \"elapsed_time\": 767.967939376831,\n            \"token_count\": 721\n        },\n        {\n            \"elapsed_time\": 735.7251644134521,\n            \"token_count\": 722\n        },\n        {\n            \"elapsed_time\": 738.9769554138184,\n            \"token_count\": 723\n        },\n        {\n            \"elapsed_time\": 739.2199039459229,\n            \"token_count\": 724\n        },\n        {\n            \"elapsed_time\": 741.0118579864502,\n            \"token_count\": 725\n        },\n        {\n            \"elapsed_time\": 740.6919002532959,\n            \"token_count\": 726\n        },\n        {\n            \"elapsed_time\": 745.7780838012695,\n            \"token_count\": 727\n        },\n        {\n            \"elapsed_time\": 747.3618984222412,\n            \"token_count\": 728\n        },\n        {\n            \"elapsed_time\": 746.2027072906494,\n            \"token_count\": 729\n        },\n        {\n            \"elapsed_time\": 742.2547340393066,\n            \"token_count\": 730\n        },\n        {\n            \"elapsed_time\": 745.9189891815186,\n            \"token_count\": 731\n        },\n        {\n            \"elapsed_time\": 747.0359802246094,\n            \"token_count\": 732\n        },\n        {\n            \"elapsed_time\": 754.8000812530518,\n            \"token_count\": 733\n        },\n        {\n            \"elapsed_time\": 775.6679058074951,\n            \"token_count\": 734\n        },\n        {\n            \"elapsed_time\": 749.5479583740234,\n            \"token_count\": 735\n        },\n        {\n            \"elapsed_time\": 751.3370513916016,\n            \"token_count\": 736\n        },\n        {\n            \"elapsed_time\": 753.5991668701172,\n            \"token_count\": 737\n        },\n        {\n            \"elapsed_time\": 754.227876663208,\n            \"token_count\": 738\n        },\n        {\n            \"elapsed_time\": 757.7621936798096,\n            \"token_count\": 739\n        },\n        {\n            \"elapsed_time\": 753.3740997314453,\n            \"token_count\": 740\n        },\n        {\n            \"elapsed_time\": 752.4957656860352,\n            \"token_count\": 741\n        },\n        {\n            \"elapsed_time\": 757.5850486755371,\n            \"token_count\": 742\n        },\n        {\n            \"elapsed_time\": 760.0550651550293,\n            \"token_count\": 743\n        },\n        {\n            \"elapsed_time\": 753.9660930633545,\n            \"token_count\": 744\n        },\n        {\n            \"elapsed_time\": 760.3912353515625,\n            \"token_count\": 745\n        },\n        {\n            \"elapsed_time\": 774.3439674377441,\n            \"token_count\": 746\n        },\n        {\n            \"elapsed_time\": 787.5418663024902,\n            \"token_count\": 747\n        },\n        {\n            \"elapsed_time\": 763.9012336730957,\n            \"token_count\": 748\n        },\n        {\n            \"elapsed_time\": 770.7409858703613,\n            \"token_count\": 749\n        },\n        {\n            \"elapsed_time\": 765.8088207244873,\n            \"token_count\": 750\n        },\n        {\n            \"elapsed_time\": 767.3029899597168,\n            \"token_count\": 751\n        },\n        {\n            \"elapsed_time\": 764.509916305542,\n            \"token_count\": 752\n        },\n        {\n            \"elapsed_time\": 770.989179611206,\n            \"token_count\": 753\n        },\n        {\n            \"elapsed_time\": 774.7378349304199,\n            \"token_count\": 754\n        },\n        {\n            \"elapsed_time\": 767.3690319061279,\n            \"token_count\": 755\n        },\n        {\n            \"elapsed_time\": 769.9542045593262,\n            \"token_count\": 756\n        },\n        {\n            \"elapsed_time\": 771.7411518096924,\n            \"token_count\": 757\n        },\n        {\n            \"elapsed_time\": 779.0279388427734,\n            \"token_count\": 758\n        },\n        {\n            \"elapsed_time\": 775.0191688537598,\n            \"token_count\": 759\n        },\n        {\n            \"elapsed_time\": 812.2591972351074,\n            \"token_count\": 760\n        },\n        {\n            \"elapsed_time\": 785.9430313110352,\n            \"token_count\": 761\n        },\n        {\n            \"elapsed_time\": 780.771017074585,\n            \"token_count\": 762\n        },\n        {\n            \"elapsed_time\": 787.1949672698975,\n            \"token_count\": 763\n        },\n        {\n            \"elapsed_time\": 786.5152359008789,\n            \"token_count\": 764\n        },\n        {\n            \"elapsed_time\": 786.3969802856445,\n            \"token_count\": 765\n        },\n        {\n            \"elapsed_time\": 781.8841934204102,\n            \"token_count\": 766\n        },\n        {\n            \"elapsed_time\": 789.1049385070801,\n            \"token_count\": 767\n        },\n        {\n            \"elapsed_time\": 785.1972579956055,\n            \"token_count\": 768\n        },\n        {\n            \"elapsed_time\": 784.1329574584961,\n            \"token_count\": 769\n        },\n        {\n            \"elapsed_time\": 805.1390647888184,\n            \"token_count\": 770\n        },\n        {\n            \"elapsed_time\": 789.8290157318115,\n            \"token_count\": 771\n        },\n        {\n            \"elapsed_time\": 787.5981330871582,\n            \"token_count\": 772\n        },\n        {\n            \"elapsed_time\": 811.0649585723877,\n            \"token_count\": 773\n        },\n        {\n            \"elapsed_time\": 789.9961471557617,\n            \"token_count\": 774\n        },\n        {\n            \"elapsed_time\": 793.0312156677246,\n            \"token_count\": 775\n        },\n        {\n            \"elapsed_time\": 793.9772605895996,\n            \"token_count\": 776\n        },\n        {\n            \"elapsed_time\": 791.9681072235107,\n            \"token_count\": 777\n        },\n        {\n            \"elapsed_time\": 795.7291603088379,\n            \"token_count\": 778\n        },\n        {\n            \"elapsed_time\": 797.3158359527588,\n            \"token_count\": 779\n        },\n        {\n            \"elapsed_time\": 801.2428283691406,\n            \"token_count\": 780\n        },\n        {\n            \"elapsed_time\": 794.370174407959,\n            \"token_count\": 781\n        },\n        {\n            \"elapsed_time\": 799.8051643371582,\n            \"token_count\": 782\n        },\n        {\n            \"elapsed_time\": 799.5131015777588,\n            \"token_count\": 783\n        },\n        {\n            \"elapsed_time\": 805.4378032684326,\n            \"token_count\": 784\n        },\n        {\n            \"elapsed_time\": 856.1458587646484,\n            \"token_count\": 785\n        },\n        {\n            \"elapsed_time\": 808.8986873626709,\n            \"token_count\": 786\n        },\n        {\n            \"elapsed_time\": 803.6859035491943,\n            \"token_count\": 787\n        },\n        {\n            \"elapsed_time\": 808.4800243377686,\n            \"token_count\": 788\n        },\n        {\n            \"elapsed_time\": 803.056001663208,\n            \"token_count\": 789\n        },\n        {\n            \"elapsed_time\": 821.5560913085938,\n            \"token_count\": 790\n        },\n        {\n            \"elapsed_time\": 813.9939308166504,\n            \"token_count\": 791\n        },\n        {\n            \"elapsed_time\": 813.8620853424072,\n            \"token_count\": 792\n        },\n        {\n            \"elapsed_time\": 815.8199787139893,\n            \"token_count\": 793\n        },\n        {\n            \"elapsed_time\": 816.1683082580566,\n            \"token_count\": 794\n        },\n        {\n            \"elapsed_time\": 813.5509490966797,\n            \"token_count\": 795\n        },\n        {\n            \"elapsed_time\": 819.0748691558838,\n            \"token_count\": 796\n        },\n        {\n            \"elapsed_time\": 856.4291000366211,\n            \"token_count\": 797\n        },\n        {\n            \"elapsed_time\": 845.2358245849609,\n            \"token_count\": 798\n        },\n        {\n            \"elapsed_time\": 820.0631141662598,\n            \"token_count\": 799\n        },\n        {\n            \"elapsed_time\": 819.8158740997314,\n            \"token_count\": 800\n        },\n        {\n            \"elapsed_time\": 817.5492286682129,\n            \"token_count\": 801\n        },\n        {\n            \"elapsed_time\": 818.6848163604736,\n            \"token_count\": 802\n        },\n        {\n            \"elapsed_time\": 824.7551918029785,\n            \"token_count\": 803\n        },\n        {\n            \"elapsed_time\": 823.0190277099609,\n            \"token_count\": 804\n        },\n        {\n            \"elapsed_time\": 832.5469493865967,\n            \"token_count\": 805\n        },\n        {\n            \"elapsed_time\": 826.9658088684082,\n            \"token_count\": 806\n        },\n        {\n            \"elapsed_time\": 832.2749137878418,\n            \"token_count\": 807\n        },\n        {\n            \"elapsed_time\": 828.4199237823486,\n            \"token_count\": 808\n        },\n        {\n            \"elapsed_time\": 913.9750003814697,\n            \"token_count\": 809\n        },\n        {\n            \"elapsed_time\": 895.2701091766357,\n            \"token_count\": 810\n        },\n        {\n            \"elapsed_time\": 881.6509246826172,\n            \"token_count\": 811\n        },\n        {\n            \"elapsed_time\": 842.1778678894043,\n            \"token_count\": 812\n        },\n        {\n            \"elapsed_time\": 833.503246307373,\n            \"token_count\": 813\n        },\n        {\n            \"elapsed_time\": 834.2037200927734,\n            \"token_count\": 814\n        },\n        {\n            \"elapsed_time\": 839.7300243377686,\n            \"token_count\": 815\n        },\n        {\n            \"elapsed_time\": 849.506139755249,\n            \"token_count\": 816\n        },\n        {\n            \"elapsed_time\": 826.6851902008057,\n            \"token_count\": 817\n        },\n        {\n            \"elapsed_time\": 830.7459354400635,\n            \"token_count\": 818\n        },\n        {\n            \"elapsed_time\": 849.5919704437256,\n            \"token_count\": 819\n        },\n        {\n            \"elapsed_time\": 849.2252826690674,\n            \"token_count\": 820\n        },\n        {\n            \"elapsed_time\": 860.3720664978027,\n            \"token_count\": 821\n        },\n        {\n            \"elapsed_time\": 851.8869876861572,\n            \"token_count\": 822\n        },\n        {\n            \"elapsed_time\": 844.3551063537598,\n            \"token_count\": 823\n        },\n        {\n            \"elapsed_time\": 925.57692527771,\n            \"token_count\": 824\n        },\n        {\n            \"elapsed_time\": 926.642894744873,\n            \"token_count\": 825\n        },\n        {\n            \"elapsed_time\": 907.4020385742188,\n            \"token_count\": 826\n        },\n        {\n            \"elapsed_time\": 886.6698741912842,\n            \"token_count\": 827\n        },\n        {\n            \"elapsed_time\": 857.795238494873,\n            \"token_count\": 828\n        },\n        {\n            \"elapsed_time\": 833.5812091827393,\n            \"token_count\": 829\n        },\n        {\n            \"elapsed_time\": 842.2620296478271,\n            \"token_count\": 830\n        },\n        {\n            \"elapsed_time\": 912.5587940216064,\n            \"token_count\": 831\n        },\n        {\n            \"elapsed_time\": 863.8632297515869,\n            \"token_count\": 832\n        },\n        {\n            \"elapsed_time\": 822.3171234130859,\n            \"token_count\": 833\n        },\n        {\n            \"elapsed_time\": 829.0932178497314,\n            \"token_count\": 834\n        },\n        {\n            \"elapsed_time\": 833.9681625366211,\n            \"token_count\": 835\n        },\n        {\n            \"elapsed_time\": 825.6399631500244,\n            \"token_count\": 836\n        },\n        {\n            \"elapsed_time\": 827.8646469116211,\n            \"token_count\": 837\n        },\n        {\n            \"elapsed_time\": 835.8430862426758,\n            \"token_count\": 838\n        },\n        {\n            \"elapsed_time\": 834.8791599273682,\n            \"token_count\": 839\n        },\n        {\n            \"elapsed_time\": 858.1340312957764,\n            \"token_count\": 840\n        },\n        {\n            \"elapsed_time\": 837.9640579223633,\n            \"token_count\": 841\n        },\n        {\n            \"elapsed_time\": 860.4061603546143,\n            \"token_count\": 842\n        },\n        {\n            \"elapsed_time\": 866.912841796875,\n            \"token_count\": 843\n        },\n        {\n            \"elapsed_time\": 875.4920959472656,\n            \"token_count\": 844\n        },\n        {\n            \"elapsed_time\": 843.4748649597168,\n            \"token_count\": 845\n        },\n        {\n            \"elapsed_time\": 853.7468910217285,\n            \"token_count\": 846\n        },\n        {\n            \"elapsed_time\": 847.9480743408203,\n            \"token_count\": 847\n        },\n        {\n            \"elapsed_time\": 859.097957611084,\n            \"token_count\": 848\n        },\n        {\n            \"elapsed_time\": 841.4080142974854,\n            \"token_count\": 849\n        },\n        {\n            \"elapsed_time\": 857.2111129760742,\n            \"token_count\": 850\n        },\n        {\n            \"elapsed_time\": 848.5860824584961,\n            \"token_count\": 851\n        },\n        {\n            \"elapsed_time\": 862.8449440002441,\n            \"token_count\": 852\n        },\n        {\n            \"elapsed_time\": 878.9939880371094,\n            \"token_count\": 853\n        },\n        {\n            \"elapsed_time\": 949.5830535888672,\n            \"token_count\": 854\n        },\n        {\n            \"elapsed_time\": 895.77317237854,\n            \"token_count\": 855\n        },\n        {\n            \"elapsed_time\": 855.1888465881348,\n            \"token_count\": 856\n        },\n        {\n            \"elapsed_time\": 858.1619262695312,\n            \"token_count\": 857\n        },\n        {\n            \"elapsed_time\": 860.8441352844238,\n            \"token_count\": 858\n        },\n        {\n            \"elapsed_time\": 859.2650890350342,\n            \"token_count\": 859\n        },\n        {\n            \"elapsed_time\": 857.6781749725342,\n            \"token_count\": 860\n        },\n        {\n            \"elapsed_time\": 875.4050731658936,\n            \"token_count\": 861\n        },\n        {\n            \"elapsed_time\": 859.2300415039062,\n            \"token_count\": 862\n        },\n        {\n            \"elapsed_time\": 853.8417816162109,\n            \"token_count\": 863\n        },\n        {\n            \"elapsed_time\": 911.3221168518066,\n            \"token_count\": 864\n        },\n        {\n            \"elapsed_time\": 894.9120044708252,\n            \"token_count\": 865\n        },\n        {\n            \"elapsed_time\": 892.2209739685059,\n            \"token_count\": 866\n        },\n        {\n            \"elapsed_time\": 897.29905128479,\n            \"token_count\": 867\n        },\n        {\n            \"elapsed_time\": 867.1579360961914,\n            \"token_count\": 868\n        },\n        {\n            \"elapsed_time\": 975.5196571350098,\n            \"token_count\": 869\n        },\n        {\n            \"elapsed_time\": 891.6261196136475,\n            \"token_count\": 870\n        },\n        {\n            \"elapsed_time\": 889.4851207733154,\n            \"token_count\": 871\n        },\n        {\n            \"elapsed_time\": 869.3656921386719,\n            \"token_count\": 872\n        },\n        {\n            \"elapsed_time\": 865.4229640960693,\n            \"token_count\": 873\n        },\n        {\n            \"elapsed_time\": 871.258020401001,\n            \"token_count\": 874\n        },\n        {\n            \"elapsed_time\": 894.4530487060547,\n            \"token_count\": 875\n        },\n        {\n            \"elapsed_time\": 920.490026473999,\n            \"token_count\": 876\n        },\n        {\n            \"elapsed_time\": 894.4039344787598,\n            \"token_count\": 877\n        },\n        {\n            \"elapsed_time\": 884.7861289978027,\n            \"token_count\": 878\n        },\n        {\n            \"elapsed_time\": 868.5309886932373,\n            \"token_count\": 879\n        },\n        {\n            \"elapsed_time\": 870.2540397644043,\n            \"token_count\": 880\n        },\n        {\n            \"elapsed_time\": 882.0631504058838,\n            \"token_count\": 881\n        },\n        {\n            \"elapsed_time\": 885.4029178619385,\n            \"token_count\": 882\n        },\n        {\n            \"elapsed_time\": 890.2831077575684,\n            \"token_count\": 883\n        },\n        {\n            \"elapsed_time\": 917.949914932251,\n            \"token_count\": 884\n        },\n        {\n            \"elapsed_time\": 904.9878120422363,\n            \"token_count\": 885\n        },\n        {\n            \"elapsed_time\": 932.6300621032715,\n            \"token_count\": 886\n        },\n        {\n            \"elapsed_time\": 949.6340751647949,\n            \"token_count\": 887\n        },\n        {\n            \"elapsed_time\": 978.4488677978516,\n            \"token_count\": 888\n        },\n        {\n            \"elapsed_time\": 913.9950275421143,\n            \"token_count\": 889\n        },\n        {\n            \"elapsed_time\": 892.6239013671875,\n            \"token_count\": 890\n        },\n        {\n            \"elapsed_time\": 894.8051929473877,\n            \"token_count\": 891\n        },\n        {\n            \"elapsed_time\": 890.2859687805176,\n            \"token_count\": 892\n        },\n        {\n            \"elapsed_time\": 884.2830657958984,\n            \"token_count\": 893\n        },\n        {\n            \"elapsed_time\": 892.6887512207031,\n            \"token_count\": 894\n        },\n        {\n            \"elapsed_time\": 884.1209411621094,\n            \"token_count\": 895\n        },\n        {\n            \"elapsed_time\": 899.036169052124,\n            \"token_count\": 896\n        },\n        {\n            \"elapsed_time\": 927.5510311126709,\n            \"token_count\": 897\n        },\n        {\n            \"elapsed_time\": 917.4659252166748,\n            \"token_count\": 898\n        },\n        {\n            \"elapsed_time\": 935.1351261138916,\n            \"token_count\": 899\n        },\n        {\n            \"elapsed_time\": 903.4619331359863,\n            \"token_count\": 900\n        },\n        {\n            \"elapsed_time\": 900.1138210296631,\n            \"token_count\": 901\n        },\n        {\n            \"elapsed_time\": 933.4406852722168,\n            \"token_count\": 902\n        },\n        {\n            \"elapsed_time\": 940.9232139587402,\n            \"token_count\": 903\n        },\n        {\n            \"elapsed_time\": 914.560079574585,\n            \"token_count\": 904\n        },\n        {\n            \"elapsed_time\": 920.4709529876709,\n            \"token_count\": 905\n        },\n        {\n            \"elapsed_time\": 914.2270088195801,\n            \"token_count\": 906\n        },\n        {\n            \"elapsed_time\": 942.2147274017334,\n            \"token_count\": 907\n        },\n        {\n            \"elapsed_time\": 950.7451057434082,\n            \"token_count\": 908\n        },\n        {\n            \"elapsed_time\": 906.6321849822998,\n            \"token_count\": 909\n        },\n        {\n            \"elapsed_time\": 937.2189044952393,\n            \"token_count\": 910\n        },\n        {\n            \"elapsed_time\": 916.1841869354248,\n            \"token_count\": 911\n        },\n        {\n            \"elapsed_time\": 914.405107498169,\n            \"token_count\": 912\n        },\n        {\n            \"elapsed_time\": 923.6910343170166,\n            \"token_count\": 913\n        },\n        {\n            \"elapsed_time\": 903.8498401641846,\n            \"token_count\": 914\n        },\n        {\n            \"elapsed_time\": 907.7188968658447,\n            \"token_count\": 915\n        },\n        {\n            \"elapsed_time\": 921.4489459991455,\n            \"token_count\": 916\n        },\n        {\n            \"elapsed_time\": 951.4951705932617,\n            \"token_count\": 917\n        },\n        {\n            \"elapsed_time\": 1097.7373123168945,\n            \"token_count\": 918\n        },\n        {\n            \"elapsed_time\": 979.5041084289551,\n            \"token_count\": 919\n        },\n        {\n            \"elapsed_time\": 934.563159942627,\n            \"token_count\": 920\n        },\n        {\n            \"elapsed_time\": 942.4681663513184,\n            \"token_count\": 921\n        },\n        {\n            \"elapsed_time\": 937.0431900024414,\n            \"token_count\": 922\n        },\n        {\n            \"elapsed_time\": 940.4652118682861,\n            \"token_count\": 923\n        },\n        {\n            \"elapsed_time\": 927.6463985443115,\n            \"token_count\": 924\n        },\n        {\n            \"elapsed_time\": 917.3150062561035,\n            \"token_count\": 925\n        },\n        {\n            \"elapsed_time\": 921.212911605835,\n            \"token_count\": 926\n        },\n        {\n            \"elapsed_time\": 926.3668060302734,\n            \"token_count\": 927\n        },\n        {\n            \"elapsed_time\": 985.6488704681396,\n            \"token_count\": 928\n        },\n        {\n            \"elapsed_time\": 953.5841941833496,\n            \"token_count\": 929\n        },\n        {\n            \"elapsed_time\": 959.791898727417,\n            \"token_count\": 930\n        },\n        {\n            \"elapsed_time\": 967.120885848999,\n            \"token_count\": 931\n        },\n        {\n            \"elapsed_time\": 940.6309127807617,\n            \"token_count\": 932\n        },\n        {\n            \"elapsed_time\": 978.1241416931152,\n            \"token_count\": 933\n        },\n        {\n            \"elapsed_time\": 965.5249118804932,\n            \"token_count\": 934\n        },\n        {\n            \"elapsed_time\": 955.1191329956055,\n            \"token_count\": 935\n        },\n        {\n            \"elapsed_time\": 1009.2718601226807,\n            \"token_count\": 936\n        },\n        {\n            \"elapsed_time\": 949.9356746673584,\n            \"token_count\": 937\n        },\n        {\n            \"elapsed_time\": 979.8638820648193,\n            \"token_count\": 938\n        },\n        {\n            \"elapsed_time\": 984.0288162231445,\n            \"token_count\": 939\n        },\n        {\n            \"elapsed_time\": 966.0861492156982,\n            \"token_count\": 940\n        },\n        {\n            \"elapsed_time\": 974.7872352600098,\n            \"token_count\": 941\n        },\n        {\n            \"elapsed_time\": 936.2180233001709,\n            \"token_count\": 942\n        },\n        {\n            \"elapsed_time\": 963.4943008422852,\n            \"token_count\": 943\n        },\n        {\n            \"elapsed_time\": 959.0239524841309,\n            \"token_count\": 944\n        },\n        {\n            \"elapsed_time\": 954.8361301422119,\n            \"token_count\": 945\n        },\n        {\n            \"elapsed_time\": 949.6219158172607,\n            \"token_count\": 946\n        },\n        {\n            \"elapsed_time\": 948.7991333007812,\n            \"token_count\": 947\n        },\n        {\n            \"elapsed_time\": 989.1409873962402,\n            \"token_count\": 948\n        },\n        {\n            \"elapsed_time\": 1001.5542507171631,\n            \"token_count\": 949\n        },\n        {\n            \"elapsed_time\": 947.2270011901855,\n            \"token_count\": 950\n        },\n        {\n            \"elapsed_time\": 981.112003326416,\n            \"token_count\": 951\n        },\n        {\n            \"elapsed_time\": 952.0020484924316,\n            \"token_count\": 952\n        },\n        {\n            \"elapsed_time\": 972.4569320678711,\n            \"token_count\": 953\n        },\n        {\n            \"elapsed_time\": 960.968017578125,\n            \"token_count\": 954\n        },\n        {\n            \"elapsed_time\": 958.507776260376,\n            \"token_count\": 955\n        },\n        {\n            \"elapsed_time\": 948.6229419708252,\n            \"token_count\": 956\n        },\n        {\n            \"elapsed_time\": 956.0608863830566,\n            \"token_count\": 957\n        },\n        {\n            \"elapsed_time\": 1043.2829856872559,\n            \"token_count\": 958\n        },\n        {\n            \"elapsed_time\": 1078.1879425048828,\n            \"token_count\": 959\n        },\n        {\n            \"elapsed_time\": 999.6969699859619,\n            \"token_count\": 960\n        },\n        {\n            \"elapsed_time\": 979.5680046081543,\n            \"token_count\": 961\n        },\n        {\n            \"elapsed_time\": 972.0108509063721,\n            \"token_count\": 962\n        },\n        {\n            \"elapsed_time\": 993.9279556274414,\n            \"token_count\": 963\n        },\n        {\n            \"elapsed_time\": 1017.1148777008057,\n            \"token_count\": 964\n        },\n        {\n            \"elapsed_time\": 958.6939811706543,\n            \"token_count\": 965\n        },\n        {\n            \"elapsed_time\": 973.0429649353027,\n            \"token_count\": 966\n        },\n        {\n            \"elapsed_time\": 968.5530662536621,\n            \"token_count\": 967\n        },\n        {\n            \"elapsed_time\": 1016.1139965057373,\n            \"token_count\": 968\n        },\n        {\n            \"elapsed_time\": 1020.1249122619629,\n            \"token_count\": 969\n        },\n        {\n            \"elapsed_time\": 972.2130298614502,\n            \"token_count\": 970\n        },\n        {\n            \"elapsed_time\": 1019.0231800079346,\n            \"token_count\": 971\n        },\n        {\n            \"elapsed_time\": 983.159065246582,\n            \"token_count\": 972\n        },\n        {\n            \"elapsed_time\": 988.9998435974121,\n            \"token_count\": 973\n        },\n        {\n            \"elapsed_time\": 973.0901718139648,\n            \"token_count\": 974\n        },\n        {\n            \"elapsed_time\": 971.3859558105469,\n            \"token_count\": 975\n        },\n        {\n            \"elapsed_time\": 982.0280075073242,\n            \"token_count\": 976\n        },\n        {\n            \"elapsed_time\": 985.7861995697021,\n            \"token_count\": 977\n        },\n        {\n            \"elapsed_time\": 1031.9018363952637,\n            \"token_count\": 978\n        },\n        {\n            \"elapsed_time\": 1067.1050548553467,\n            \"token_count\": 979\n        },\n        {\n            \"elapsed_time\": 982.450008392334,\n            \"token_count\": 980\n        },\n        {\n            \"elapsed_time\": 1042.5522327423096,\n            \"token_count\": 981\n        },\n        {\n            \"elapsed_time\": 1031.4853191375732,\n            \"token_count\": 982\n        },\n        {\n            \"elapsed_time\": 1033.1158638000488,\n            \"token_count\": 983\n        },\n        {\n            \"elapsed_time\": 1033.4279537200928,\n            \"token_count\": 984\n        },\n        {\n            \"elapsed_time\": 1029.088020324707,\n            \"token_count\": 985\n        },\n        {\n            \"elapsed_time\": 1016.071081161499,\n            \"token_count\": 986\n        },\n        {\n            \"elapsed_time\": 1032.0429801940918,\n            \"token_count\": 987\n        },\n        {\n            \"elapsed_time\": 1027.3950099945068,\n            \"token_count\": 988\n        },\n        {\n            \"elapsed_time\": 1072.1111297607422,\n            \"token_count\": 989\n        },\n        {\n            \"elapsed_time\": 1084.6278667449951,\n            \"token_count\": 990\n        },\n        {\n            \"elapsed_time\": 1051.6648292541504,\n            \"token_count\": 991\n        },\n        {\n            \"elapsed_time\": 1033.2810878753662,\n            \"token_count\": 992\n        },\n        {\n            \"elapsed_time\": 1027.7941226959229,\n            \"token_count\": 993\n        },\n        {\n            \"elapsed_time\": 1037.5773906707764,\n            \"token_count\": 994\n        },\n        {\n            \"elapsed_time\": 1037.9290580749512,\n            \"token_count\": 995\n        },\n        {\n            \"elapsed_time\": 1037.017822265625,\n            \"token_count\": 996\n        },\n        {\n            \"elapsed_time\": 1052.016019821167,\n            \"token_count\": 997\n        },\n        {\n            \"elapsed_time\": 1032.4182510375977,\n            \"token_count\": 998\n        },\n        {\n            \"elapsed_time\": 1047.070026397705,\n            \"token_count\": 999\n        }\n    ],\n    \"max_token_count_per_time\": {\n        \"100\": 100,\n        \"200\": 199,\n        \"300\": 299,\n        \"400\": 396,\n        \"500\": 514,\n        \"600\": 613,\n        \"700\": 691,\n        \"800\": 783,\n        \"900\": 896,\n        \"1000\": 980,\n        \"1100\": 999,\n        \"1200\": 999,\n        \"1300\": 999,\n        \"1400\": 999,\n        \"1500\": 999\n    }\n}"
  },
  {
    "path": "reports/inference_result/drqa-cpu.json",
    "content": "{\n    \"average_raw_to_tensor\": 32.9001364081797,\n    \"average_tensor_to_predict\": 641.9128160284023,\n    \"average_end_to_end\": 674.812952436582,\n    \"tensor_to_predicts\": [\n        {\n            \"elapsed_time\": 21.235227584838867,\n            \"token_count\": 10\n        },\n        {\n            \"elapsed_time\": 16.850709915161133,\n            \"token_count\": 11\n        },\n        {\n            \"elapsed_time\": 17.00878143310547,\n            \"token_count\": 12\n        },\n        {\n            \"elapsed_time\": 18.548965454101562,\n            \"token_count\": 13\n        },\n        {\n            \"elapsed_time\": 21.88277244567871,\n            \"token_count\": 14\n        },\n        {\n            \"elapsed_time\": 21.05093002319336,\n            \"token_count\": 15\n        },\n        {\n            \"elapsed_time\": 22.473812103271484,\n            \"token_count\": 16\n        },\n        {\n            \"elapsed_time\": 22.981882095336914,\n            \"token_count\": 17\n        },\n        {\n            \"elapsed_time\": 25.272130966186523,\n            \"token_count\": 18\n        },\n        {\n            \"elapsed_time\": 25.201082229614258,\n            \"token_count\": 19\n        },\n        {\n            \"elapsed_time\": 26.571035385131836,\n            \"token_count\": 20\n        },\n        {\n            \"elapsed_time\": 28.10215950012207,\n            \"token_count\": 21\n        },\n        {\n            \"elapsed_time\": 30.492067337036133,\n            \"token_count\": 22\n        },\n        {\n            \"elapsed_time\": 31.450748443603516,\n            \"token_count\": 23\n        },\n        {\n            \"elapsed_time\": 32.26184844970703,\n            \"token_count\": 24\n        },\n        {\n            \"elapsed_time\": 34.14177894592285,\n            \"token_count\": 25\n        },\n        {\n            \"elapsed_time\": 35.87222099304199,\n            \"token_count\": 26\n        },\n        {\n            \"elapsed_time\": 35.156965255737305,\n            \"token_count\": 27\n        },\n        {\n            \"elapsed_time\": 37.405967712402344,\n            \"token_count\": 28\n        },\n        {\n            \"elapsed_time\": 38.398027420043945,\n            \"token_count\": 29\n        },\n        {\n            \"elapsed_time\": 40.621042251586914,\n            \"token_count\": 30\n        },\n        {\n            \"elapsed_time\": 42.3130989074707,\n            \"token_count\": 31\n        },\n        {\n            \"elapsed_time\": 41.590213775634766,\n            \"token_count\": 32\n        },\n        {\n            \"elapsed_time\": 43.280839920043945,\n            \"token_count\": 33\n        },\n        {\n            \"elapsed_time\": 45.42899131774902,\n            \"token_count\": 34\n        },\n        {\n            \"elapsed_time\": 46.02503776550293,\n            \"token_count\": 35\n        },\n        {\n            \"elapsed_time\": 46.67782783508301,\n            \"token_count\": 36\n        },\n        {\n            \"elapsed_time\": 48.43711853027344,\n            \"token_count\": 37\n        },\n        {\n            \"elapsed_time\": 49.037933349609375,\n            \"token_count\": 38\n        },\n        {\n            \"elapsed_time\": 50.63199996948242,\n            \"token_count\": 39\n        },\n        {\n            \"elapsed_time\": 51.650047302246094,\n            \"token_count\": 40\n        },\n        {\n            \"elapsed_time\": 52.427053451538086,\n            \"token_count\": 41\n        },\n        {\n            \"elapsed_time\": 53.91883850097656,\n            \"token_count\": 42\n        },\n        {\n            \"elapsed_time\": 54.63695526123047,\n            \"token_count\": 43\n        },\n        {\n            \"elapsed_time\": 56.98394775390625,\n            \"token_count\": 44\n        },\n        {\n            \"elapsed_time\": 58.67195129394531,\n            \"token_count\": 45\n        },\n        {\n            \"elapsed_time\": 59.92412567138672,\n            \"token_count\": 46\n        },\n        {\n            \"elapsed_time\": 60.537099838256836,\n            \"token_count\": 47\n        },\n        {\n            \"elapsed_time\": 62.37220764160156,\n            \"token_count\": 48\n        },\n        {\n            \"elapsed_time\": 63.94219398498535,\n            \"token_count\": 49\n        },\n        {\n            \"elapsed_time\": 64.08119201660156,\n            \"token_count\": 50\n        },\n        {\n            \"elapsed_time\": 65.05918502807617,\n            \"token_count\": 51\n        },\n        {\n            \"elapsed_time\": 66.68901443481445,\n            \"token_count\": 52\n        },\n        {\n            \"elapsed_time\": 70.2981948852539,\n            \"token_count\": 53\n        },\n        {\n            \"elapsed_time\": 68.56298446655273,\n            \"token_count\": 54\n        },\n        {\n            \"elapsed_time\": 72.21508026123047,\n            \"token_count\": 55\n        },\n        {\n            \"elapsed_time\": 72.13592529296875,\n            \"token_count\": 56\n        },\n        {\n            \"elapsed_time\": 72.58796691894531,\n            \"token_count\": 57\n        },\n        {\n            \"elapsed_time\": 73.41790199279785,\n            \"token_count\": 58\n        },\n        {\n            \"elapsed_time\": 81.53414726257324,\n            \"token_count\": 59\n        },\n        {\n            \"elapsed_time\": 75.82592964172363,\n            \"token_count\": 60\n        },\n        {\n            \"elapsed_time\": 77.42500305175781,\n            \"token_count\": 61\n        },\n        {\n            \"elapsed_time\": 80.19804954528809,\n            \"token_count\": 62\n        },\n        {\n            \"elapsed_time\": 81.69412612915039,\n            \"token_count\": 63\n        },\n        {\n            \"elapsed_time\": 97.87607192993164,\n            \"token_count\": 64\n        },\n        {\n            \"elapsed_time\": 84.8398208618164,\n            \"token_count\": 65\n        },\n        {\n            \"elapsed_time\": 88.93585205078125,\n            \"token_count\": 66\n        },\n        {\n            \"elapsed_time\": 90.28816223144531,\n            \"token_count\": 67\n        },\n        {\n            \"elapsed_time\": 89.13803100585938,\n            \"token_count\": 68\n        },\n        {\n            \"elapsed_time\": 88.60278129577637,\n            \"token_count\": 69\n        },\n        {\n            \"elapsed_time\": 93.69111061096191,\n            \"token_count\": 70\n        },\n        {\n            \"elapsed_time\": 91.4311408996582,\n            \"token_count\": 71\n        },\n        {\n            \"elapsed_time\": 95.53885459899902,\n            \"token_count\": 72\n        },\n        {\n            \"elapsed_time\": 96.96698188781738,\n            \"token_count\": 73\n        },\n        {\n            \"elapsed_time\": 97.97501564025879,\n            \"token_count\": 74\n        },\n        {\n            \"elapsed_time\": 100.7380485534668,\n            \"token_count\": 75\n        },\n        {\n            \"elapsed_time\": 99.43819046020508,\n            \"token_count\": 76\n        },\n        {\n            \"elapsed_time\": 101.49669647216797,\n            \"token_count\": 77\n        },\n        {\n            \"elapsed_time\": 99.32088851928711,\n            \"token_count\": 78\n        },\n        {\n            \"elapsed_time\": 100.79097747802734,\n            \"token_count\": 79\n        },\n        {\n            \"elapsed_time\": 104.67314720153809,\n            \"token_count\": 80\n        },\n        {\n            \"elapsed_time\": 104.24280166625977,\n            \"token_count\": 81\n        },\n        {\n            \"elapsed_time\": 104.84910011291504,\n            \"token_count\": 82\n        },\n        {\n            \"elapsed_time\": 106.05168342590332,\n            \"token_count\": 83\n        },\n        {\n            \"elapsed_time\": 107.30123519897461,\n            \"token_count\": 84\n        },\n        {\n            \"elapsed_time\": 110.1682186126709,\n            \"token_count\": 85\n        },\n        {\n            \"elapsed_time\": 112.25771903991699,\n            \"token_count\": 86\n        },\n        {\n            \"elapsed_time\": 111.44614219665527,\n            \"token_count\": 87\n        },\n        {\n            \"elapsed_time\": 109.50303077697754,\n            \"token_count\": 88\n        },\n        {\n            \"elapsed_time\": 114.6087646484375,\n            \"token_count\": 89\n        },\n        {\n            \"elapsed_time\": 119.31300163269043,\n            \"token_count\": 90\n        },\n        {\n            \"elapsed_time\": 131.72483444213867,\n            \"token_count\": 91\n        },\n        {\n            \"elapsed_time\": 148.66304397583008,\n            \"token_count\": 92\n        },\n        {\n            \"elapsed_time\": 126.63102149963379,\n            \"token_count\": 93\n        },\n        {\n            \"elapsed_time\": 128.92603874206543,\n            \"token_count\": 94\n        },\n        {\n            \"elapsed_time\": 124.58586692810059,\n            \"token_count\": 95\n        },\n        {\n            \"elapsed_time\": 126.44696235656738,\n            \"token_count\": 96\n        },\n        {\n            \"elapsed_time\": 127.31695175170898,\n            \"token_count\": 97\n        },\n        {\n            \"elapsed_time\": 129.10699844360352,\n            \"token_count\": 98\n        },\n        {\n            \"elapsed_time\": 133.61310958862305,\n            \"token_count\": 99\n        },\n        {\n            \"elapsed_time\": 130.8581829071045,\n            \"token_count\": 100\n        },\n        {\n            \"elapsed_time\": 135.90312004089355,\n            \"token_count\": 101\n        },\n        {\n            \"elapsed_time\": 138.10205459594727,\n            \"token_count\": 102\n        },\n        {\n            \"elapsed_time\": 134.85217094421387,\n            \"token_count\": 103\n        },\n        {\n            \"elapsed_time\": 140.6550407409668,\n            \"token_count\": 104\n        },\n        {\n            \"elapsed_time\": 138.90886306762695,\n            \"token_count\": 105\n        },\n        {\n            \"elapsed_time\": 142.84110069274902,\n            \"token_count\": 106\n        },\n        {\n            \"elapsed_time\": 142.38595962524414,\n            \"token_count\": 107\n        },\n        {\n            \"elapsed_time\": 143.7680721282959,\n            \"token_count\": 108\n        },\n        {\n            \"elapsed_time\": 149.71494674682617,\n            \"token_count\": 109\n        },\n        {\n            \"elapsed_time\": 141.53790473937988,\n            \"token_count\": 110\n        },\n        {\n            \"elapsed_time\": 146.33822441101074,\n            \"token_count\": 111\n        },\n        {\n            \"elapsed_time\": 146.11482620239258,\n            \"token_count\": 112\n        },\n        {\n            \"elapsed_time\": 149.85322952270508,\n            \"token_count\": 113\n        },\n        {\n            \"elapsed_time\": 150.6969928741455,\n            \"token_count\": 114\n        },\n        {\n            \"elapsed_time\": 148.1606960296631,\n            \"token_count\": 115\n        },\n        {\n            \"elapsed_time\": 150.8629322052002,\n            \"token_count\": 116\n        },\n        {\n            \"elapsed_time\": 150.91395378112793,\n            \"token_count\": 117\n        },\n        {\n            \"elapsed_time\": 151.21102333068848,\n            \"token_count\": 118\n        },\n        {\n            \"elapsed_time\": 151.2470245361328,\n            \"token_count\": 119\n        },\n        {\n            \"elapsed_time\": 151.4723300933838,\n            \"token_count\": 120\n        },\n        {\n            \"elapsed_time\": 153.92613410949707,\n            \"token_count\": 121\n        },\n        {\n            \"elapsed_time\": 156.28433227539062,\n            \"token_count\": 122\n        },\n        {\n            \"elapsed_time\": 157.0448875427246,\n            \"token_count\": 123\n        },\n        {\n            \"elapsed_time\": 161.1959934234619,\n            \"token_count\": 124\n        },\n        {\n            \"elapsed_time\": 162.94288635253906,\n            \"token_count\": 125\n        },\n        {\n            \"elapsed_time\": 164.23702239990234,\n            \"token_count\": 126\n        },\n        {\n            \"elapsed_time\": 163.02013397216797,\n            \"token_count\": 127\n        },\n        {\n            \"elapsed_time\": 161.6988182067871,\n            \"token_count\": 128\n        },\n        {\n            \"elapsed_time\": 162.79292106628418,\n            \"token_count\": 129\n        },\n        {\n            \"elapsed_time\": 164.68286514282227,\n            \"token_count\": 130\n        },\n        {\n            \"elapsed_time\": 165.54880142211914,\n            \"token_count\": 131\n        },\n        {\n            \"elapsed_time\": 162.8117561340332,\n            \"token_count\": 132\n        },\n        {\n            \"elapsed_time\": 169.98887062072754,\n            \"token_count\": 133\n        },\n        {\n            \"elapsed_time\": 169.6298122406006,\n            \"token_count\": 134\n        },\n        {\n            \"elapsed_time\": 172.78480529785156,\n            \"token_count\": 135\n        },\n        {\n            \"elapsed_time\": 177.93703079223633,\n            \"token_count\": 136\n        },\n        {\n            \"elapsed_time\": 180.9530258178711,\n            \"token_count\": 137\n        },\n        {\n            \"elapsed_time\": 180.16505241394043,\n            \"token_count\": 138\n        },\n        {\n            \"elapsed_time\": 184.3719482421875,\n            \"token_count\": 139\n        },\n        {\n            \"elapsed_time\": 182.49988555908203,\n            \"token_count\": 140\n        },\n        {\n            \"elapsed_time\": 179.67915534973145,\n            \"token_count\": 141\n        },\n        {\n            \"elapsed_time\": 182.02495574951172,\n            \"token_count\": 142\n        },\n        {\n            \"elapsed_time\": 183.53509902954102,\n            \"token_count\": 143\n        },\n        {\n            \"elapsed_time\": 184.18622016906738,\n            \"token_count\": 144\n        },\n        {\n            \"elapsed_time\": 190.11783599853516,\n            \"token_count\": 145\n        },\n        {\n            \"elapsed_time\": 199.3999481201172,\n            \"token_count\": 146\n        },\n        {\n            \"elapsed_time\": 193.17913055419922,\n            \"token_count\": 147\n        },\n        {\n            \"elapsed_time\": 198.6408233642578,\n            \"token_count\": 148\n        },\n        {\n            \"elapsed_time\": 197.88122177124023,\n            \"token_count\": 149\n        },\n        {\n            \"elapsed_time\": 199.5859146118164,\n            \"token_count\": 150\n        },\n        {\n            \"elapsed_time\": 191.51711463928223,\n            \"token_count\": 151\n        },\n        {\n            \"elapsed_time\": 209.42211151123047,\n            \"token_count\": 152\n        },\n        {\n            \"elapsed_time\": 223.0069637298584,\n            \"token_count\": 153\n        },\n        {\n            \"elapsed_time\": 206.34889602661133,\n            \"token_count\": 154\n        },\n        {\n            \"elapsed_time\": 199.17702674865723,\n            \"token_count\": 155\n        },\n        {\n            \"elapsed_time\": 200.1659870147705,\n            \"token_count\": 156\n        },\n        {\n            \"elapsed_time\": 209.14602279663086,\n            \"token_count\": 157\n        },\n        {\n            \"elapsed_time\": 207.89408683776855,\n            \"token_count\": 158\n        },\n        {\n            \"elapsed_time\": 208.94408226013184,\n            \"token_count\": 159\n        },\n        {\n            \"elapsed_time\": 204.49495315551758,\n            \"token_count\": 160\n        },\n        {\n            \"elapsed_time\": 209.86700057983398,\n            \"token_count\": 161\n        },\n        {\n            \"elapsed_time\": 204.6191692352295,\n            \"token_count\": 162\n        },\n        {\n            \"elapsed_time\": 205.53302764892578,\n            \"token_count\": 163\n        },\n        {\n            \"elapsed_time\": 206.77709579467773,\n            \"token_count\": 164\n        },\n        {\n            \"elapsed_time\": 206.35175704956055,\n            \"token_count\": 165\n        },\n        {\n            \"elapsed_time\": 216.96090698242188,\n            \"token_count\": 166\n        },\n        {\n            \"elapsed_time\": 219.75421905517578,\n            \"token_count\": 167\n        },\n        {\n            \"elapsed_time\": 221.16804122924805,\n            \"token_count\": 168\n        },\n        {\n            \"elapsed_time\": 215.25216102600098,\n            \"token_count\": 169\n        },\n        {\n            \"elapsed_time\": 226.14502906799316,\n            \"token_count\": 170\n        },\n        {\n            \"elapsed_time\": 222.70512580871582,\n            \"token_count\": 171\n        },\n        {\n            \"elapsed_time\": 225.27098655700684,\n            \"token_count\": 172\n        },\n        {\n            \"elapsed_time\": 232.76281356811523,\n            \"token_count\": 173\n        },\n        {\n            \"elapsed_time\": 228.22999954223633,\n            \"token_count\": 174\n        },\n        {\n            \"elapsed_time\": 223.4060764312744,\n            \"token_count\": 175\n        },\n        {\n            \"elapsed_time\": 224.07007217407227,\n            \"token_count\": 176\n        },\n        {\n            \"elapsed_time\": 224.9429225921631,\n            \"token_count\": 177\n        },\n        {\n            \"elapsed_time\": 226.7131805419922,\n            \"token_count\": 178\n        },\n        {\n            \"elapsed_time\": 225.0978946685791,\n            \"token_count\": 179\n        },\n        {\n            \"elapsed_time\": 226.1679172515869,\n            \"token_count\": 180\n        },\n        {\n            \"elapsed_time\": 240.675687789917,\n            \"token_count\": 181\n        },\n        {\n            \"elapsed_time\": 238.19804191589355,\n            \"token_count\": 182\n        },\n        {\n            \"elapsed_time\": 242.16985702514648,\n            \"token_count\": 183\n        },\n        {\n            \"elapsed_time\": 231.72688484191895,\n            \"token_count\": 184\n        },\n        {\n            \"elapsed_time\": 240.99111557006836,\n            \"token_count\": 185\n        },\n        {\n            \"elapsed_time\": 237.86377906799316,\n            \"token_count\": 186\n        },\n        {\n            \"elapsed_time\": 234.9720001220703,\n            \"token_count\": 187\n        },\n        {\n            \"elapsed_time\": 236.8319034576416,\n            \"token_count\": 188\n        },\n        {\n            \"elapsed_time\": 249.2218017578125,\n            \"token_count\": 189\n        },\n        {\n            \"elapsed_time\": 247.66898155212402,\n            \"token_count\": 190\n        },\n        {\n            \"elapsed_time\": 249.01485443115234,\n            \"token_count\": 191\n        },\n        {\n            \"elapsed_time\": 254.64487075805664,\n            \"token_count\": 192\n        },\n        {\n            \"elapsed_time\": 254.76789474487305,\n            \"token_count\": 193\n        },\n        {\n            \"elapsed_time\": 254.06599044799805,\n            \"token_count\": 194\n        },\n        {\n            \"elapsed_time\": 249.6318817138672,\n            \"token_count\": 195\n        },\n        {\n            \"elapsed_time\": 272.6602554321289,\n            \"token_count\": 196\n        },\n        {\n            \"elapsed_time\": 246.50001525878906,\n            \"token_count\": 197\n        },\n        {\n            \"elapsed_time\": 253.18503379821777,\n            \"token_count\": 198\n        },\n        {\n            \"elapsed_time\": 258.9449882507324,\n            \"token_count\": 199\n        },\n        {\n            \"elapsed_time\": 265.0489807128906,\n            \"token_count\": 200\n        },\n        {\n            \"elapsed_time\": 258.6369514465332,\n            \"token_count\": 201\n        },\n        {\n            \"elapsed_time\": 269.52314376831055,\n            \"token_count\": 202\n        },\n        {\n            \"elapsed_time\": 263.75675201416016,\n            \"token_count\": 203\n        },\n        {\n            \"elapsed_time\": 263.5519504547119,\n            \"token_count\": 204\n        },\n        {\n            \"elapsed_time\": 269.8650360107422,\n            \"token_count\": 205\n        },\n        {\n            \"elapsed_time\": 258.23473930358887,\n            \"token_count\": 206\n        },\n        {\n            \"elapsed_time\": 267.2140598297119,\n            \"token_count\": 207\n        },\n        {\n            \"elapsed_time\": 273.04697036743164,\n            \"token_count\": 208\n        },\n        {\n            \"elapsed_time\": 270.2140808105469,\n            \"token_count\": 209\n        },\n        {\n            \"elapsed_time\": 270.5862522125244,\n            \"token_count\": 210\n        },\n        {\n            \"elapsed_time\": 262.315034866333,\n            \"token_count\": 211\n        },\n        {\n            \"elapsed_time\": 266.8459415435791,\n            \"token_count\": 212\n        },\n        {\n            \"elapsed_time\": 270.81799507141113,\n            \"token_count\": 213\n        },\n        {\n            \"elapsed_time\": 274.77002143859863,\n            \"token_count\": 214\n        },\n        {\n            \"elapsed_time\": 271.32582664489746,\n            \"token_count\": 215\n        },\n        {\n            \"elapsed_time\": 274.8448848724365,\n            \"token_count\": 216\n        },\n        {\n            \"elapsed_time\": 276.7951488494873,\n            \"token_count\": 217\n        },\n        {\n            \"elapsed_time\": 275.0129699707031,\n            \"token_count\": 218\n        },\n        {\n            \"elapsed_time\": 277.68898010253906,\n            \"token_count\": 219\n        },\n        {\n            \"elapsed_time\": 277.188777923584,\n            \"token_count\": 220\n        },\n        {\n            \"elapsed_time\": 278.28192710876465,\n            \"token_count\": 221\n        },\n        {\n            \"elapsed_time\": 279.2022228240967,\n            \"token_count\": 222\n        },\n        {\n            \"elapsed_time\": 284.99484062194824,\n            \"token_count\": 223\n        },\n        {\n            \"elapsed_time\": 279.93083000183105,\n            \"token_count\": 224\n        },\n        {\n            \"elapsed_time\": 283.3220958709717,\n            \"token_count\": 225\n        },\n        {\n            \"elapsed_time\": 287.16015815734863,\n            \"token_count\": 226\n        },\n        {\n            \"elapsed_time\": 282.96923637390137,\n            \"token_count\": 227\n        },\n        {\n            \"elapsed_time\": 301.10788345336914,\n            \"token_count\": 228\n        },\n        {\n            \"elapsed_time\": 296.9090938568115,\n            \"token_count\": 229\n        },\n        {\n            \"elapsed_time\": 287.08720207214355,\n            \"token_count\": 230\n        },\n        {\n            \"elapsed_time\": 307.6517581939697,\n            \"token_count\": 231\n        },\n        {\n            \"elapsed_time\": 319.35906410217285,\n            \"token_count\": 232\n        },\n        {\n            \"elapsed_time\": 298.20704460144043,\n            \"token_count\": 233\n        },\n        {\n            \"elapsed_time\": 297.8029251098633,\n            \"token_count\": 234\n        },\n        {\n            \"elapsed_time\": 299.62778091430664,\n            \"token_count\": 235\n        },\n        {\n            \"elapsed_time\": 313.31896781921387,\n            \"token_count\": 236\n        },\n        {\n            \"elapsed_time\": 305.4490089416504,\n            \"token_count\": 237\n        },\n        {\n            \"elapsed_time\": 303.8027286529541,\n            \"token_count\": 238\n        },\n        {\n            \"elapsed_time\": 308.48002433776855,\n            \"token_count\": 239\n        },\n        {\n            \"elapsed_time\": 301.3441562652588,\n            \"token_count\": 240\n        },\n        {\n            \"elapsed_time\": 303.1141757965088,\n            \"token_count\": 241\n        },\n        {\n            \"elapsed_time\": 304.6698570251465,\n            \"token_count\": 242\n        },\n        {\n            \"elapsed_time\": 304.70991134643555,\n            \"token_count\": 243\n        },\n        {\n            \"elapsed_time\": 313.25721740722656,\n            \"token_count\": 244\n        },\n        {\n            \"elapsed_time\": 319.0479278564453,\n            \"token_count\": 245\n        },\n        {\n            \"elapsed_time\": 330.8117389678955,\n            \"token_count\": 246\n        },\n        {\n            \"elapsed_time\": 319.4901943206787,\n            \"token_count\": 247\n        },\n        {\n            \"elapsed_time\": 321.64597511291504,\n            \"token_count\": 248\n        },\n        {\n            \"elapsed_time\": 328.10378074645996,\n            \"token_count\": 249\n        },\n        {\n            \"elapsed_time\": 315.84906578063965,\n            \"token_count\": 250\n        },\n        {\n            \"elapsed_time\": 325.0696659088135,\n            \"token_count\": 251\n        },\n        {\n            \"elapsed_time\": 329.10799980163574,\n            \"token_count\": 252\n        },\n        {\n            \"elapsed_time\": 320.6460475921631,\n            \"token_count\": 253\n        },\n        {\n            \"elapsed_time\": 321.29883766174316,\n            \"token_count\": 254\n        },\n        {\n            \"elapsed_time\": 331.3019275665283,\n            \"token_count\": 255\n        },\n        {\n            \"elapsed_time\": 369.59099769592285,\n            \"token_count\": 256\n        },\n        {\n            \"elapsed_time\": 333.0421447753906,\n            \"token_count\": 257\n        },\n        {\n            \"elapsed_time\": 330.17802238464355,\n            \"token_count\": 258\n        },\n        {\n            \"elapsed_time\": 333.1298828125,\n            \"token_count\": 259\n        },\n        {\n            \"elapsed_time\": 339.60771560668945,\n            \"token_count\": 260\n        },\n        {\n            \"elapsed_time\": 341.50195121765137,\n            \"token_count\": 261\n        },\n        {\n            \"elapsed_time\": 405.4131507873535,\n            \"token_count\": 262\n        },\n        {\n            \"elapsed_time\": 349.4572639465332,\n            \"token_count\": 263\n        },\n        {\n            \"elapsed_time\": 342.61393547058105,\n            \"token_count\": 264\n        },\n        {\n            \"elapsed_time\": 357.5749397277832,\n            \"token_count\": 265\n        },\n        {\n            \"elapsed_time\": 363.0189895629883,\n            \"token_count\": 266\n        },\n        {\n            \"elapsed_time\": 370.37110328674316,\n            \"token_count\": 267\n        },\n        {\n            \"elapsed_time\": 347.33104705810547,\n            \"token_count\": 268\n        },\n        {\n            \"elapsed_time\": 381.98304176330566,\n            \"token_count\": 269\n        },\n        {\n            \"elapsed_time\": 344.5413112640381,\n            \"token_count\": 270\n        },\n        {\n            \"elapsed_time\": 341.98904037475586,\n            \"token_count\": 271\n        },\n        {\n            \"elapsed_time\": 358.1976890563965,\n            \"token_count\": 272\n        },\n        {\n            \"elapsed_time\": 341.8850898742676,\n            \"token_count\": 273\n        },\n        {\n            \"elapsed_time\": 370.9218502044678,\n            \"token_count\": 274\n        },\n        {\n            \"elapsed_time\": 366.4538860321045,\n            \"token_count\": 275\n        },\n        {\n            \"elapsed_time\": 364.4399642944336,\n            \"token_count\": 276\n        },\n        {\n            \"elapsed_time\": 405.6661128997803,\n            \"token_count\": 277\n        },\n        {\n            \"elapsed_time\": 384.0980529785156,\n            \"token_count\": 278\n        },\n        {\n            \"elapsed_time\": 357.59711265563965,\n            \"token_count\": 279\n        },\n        {\n            \"elapsed_time\": 355.09490966796875,\n            \"token_count\": 280\n        },\n        {\n            \"elapsed_time\": 345.89219093322754,\n            \"token_count\": 281\n        },\n        {\n            \"elapsed_time\": 363.65628242492676,\n            \"token_count\": 282\n        },\n        {\n            \"elapsed_time\": 361.42516136169434,\n            \"token_count\": 283\n        },\n        {\n            \"elapsed_time\": 378.66902351379395,\n            \"token_count\": 284\n        },\n        {\n            \"elapsed_time\": 360.7301712036133,\n            \"token_count\": 285\n        },\n        {\n            \"elapsed_time\": 355.8981418609619,\n            \"token_count\": 286\n        },\n        {\n            \"elapsed_time\": 355.6239604949951,\n            \"token_count\": 287\n        },\n        {\n            \"elapsed_time\": 355.76868057250977,\n            \"token_count\": 288\n        },\n        {\n            \"elapsed_time\": 386.7230415344238,\n            \"token_count\": 289\n        },\n        {\n            \"elapsed_time\": 368.90101432800293,\n            \"token_count\": 290\n        },\n        {\n            \"elapsed_time\": 374.33695793151855,\n            \"token_count\": 291\n        },\n        {\n            \"elapsed_time\": 376.48797035217285,\n            \"token_count\": 292\n        },\n        {\n            \"elapsed_time\": 371.5019226074219,\n            \"token_count\": 293\n        },\n        {\n            \"elapsed_time\": 383.8391304016113,\n            \"token_count\": 294\n        },\n        {\n            \"elapsed_time\": 401.80015563964844,\n            \"token_count\": 295\n        },\n        {\n            \"elapsed_time\": 424.42893981933594,\n            \"token_count\": 296\n        },\n        {\n            \"elapsed_time\": 405.18712997436523,\n            \"token_count\": 297\n        },\n        {\n            \"elapsed_time\": 417.70410537719727,\n            \"token_count\": 298\n        },\n        {\n            \"elapsed_time\": 406.4829349517822,\n            \"token_count\": 299\n        },\n        {\n            \"elapsed_time\": 382.47084617614746,\n            \"token_count\": 300\n        },\n        {\n            \"elapsed_time\": 438.6329650878906,\n            \"token_count\": 301\n        },\n        {\n            \"elapsed_time\": 438.4799003601074,\n            \"token_count\": 302\n        },\n        {\n            \"elapsed_time\": 411.7240905761719,\n            \"token_count\": 303\n        },\n        {\n            \"elapsed_time\": 393.0470943450928,\n            \"token_count\": 304\n        },\n        {\n            \"elapsed_time\": 368.09802055358887,\n            \"token_count\": 305\n        },\n        {\n            \"elapsed_time\": 366.03713035583496,\n            \"token_count\": 306\n        },\n        {\n            \"elapsed_time\": 392.1840190887451,\n            \"token_count\": 307\n        },\n        {\n            \"elapsed_time\": 404.2072296142578,\n            \"token_count\": 308\n        },\n        {\n            \"elapsed_time\": 379.47607040405273,\n            \"token_count\": 309\n        },\n        {\n            \"elapsed_time\": 388.1187438964844,\n            \"token_count\": 310\n        },\n        {\n            \"elapsed_time\": 372.114896774292,\n            \"token_count\": 311\n        },\n        {\n            \"elapsed_time\": 380.60736656188965,\n            \"token_count\": 312\n        },\n        {\n            \"elapsed_time\": 394.8078155517578,\n            \"token_count\": 313\n        },\n        {\n            \"elapsed_time\": 411.2508296966553,\n            \"token_count\": 314\n        },\n        {\n            \"elapsed_time\": 375.54097175598145,\n            \"token_count\": 315\n        },\n        {\n            \"elapsed_time\": 393.65196228027344,\n            \"token_count\": 316\n        },\n        {\n            \"elapsed_time\": 393.5661315917969,\n            \"token_count\": 317\n        },\n        {\n            \"elapsed_time\": 396.85583114624023,\n            \"token_count\": 318\n        },\n        {\n            \"elapsed_time\": 391.5691375732422,\n            \"token_count\": 319\n        },\n        {\n            \"elapsed_time\": 395.2949047088623,\n            \"token_count\": 320\n        },\n        {\n            \"elapsed_time\": 382.0798397064209,\n            \"token_count\": 321\n        },\n        {\n            \"elapsed_time\": 381.85811042785645,\n            \"token_count\": 322\n        },\n        {\n            \"elapsed_time\": 383.55112075805664,\n            \"token_count\": 323\n        },\n        {\n            \"elapsed_time\": 383.6100101470947,\n            \"token_count\": 324\n        },\n        {\n            \"elapsed_time\": 391.6490077972412,\n            \"token_count\": 325\n        },\n        {\n            \"elapsed_time\": 395.0479030609131,\n            \"token_count\": 326\n        },\n        {\n            \"elapsed_time\": 386.962890625,\n            \"token_count\": 327\n        },\n        {\n            \"elapsed_time\": 388.9341354370117,\n            \"token_count\": 328\n        },\n        {\n            \"elapsed_time\": 395.72715759277344,\n            \"token_count\": 329\n        },\n        {\n            \"elapsed_time\": 401.1709690093994,\n            \"token_count\": 330\n        },\n        {\n            \"elapsed_time\": 410.4199409484863,\n            \"token_count\": 331\n        },\n        {\n            \"elapsed_time\": 397.2170352935791,\n            \"token_count\": 332\n        },\n        {\n            \"elapsed_time\": 420.46594619750977,\n            \"token_count\": 333\n        },\n        {\n            \"elapsed_time\": 402.5919437408447,\n            \"token_count\": 334\n        },\n        {\n            \"elapsed_time\": 399.5680809020996,\n            \"token_count\": 335\n        },\n        {\n            \"elapsed_time\": 402.1608829498291,\n            \"token_count\": 336\n        },\n        {\n            \"elapsed_time\": 406.94499015808105,\n            \"token_count\": 337\n        },\n        {\n            \"elapsed_time\": 408.87999534606934,\n            \"token_count\": 338\n        },\n        {\n            \"elapsed_time\": 426.9752502441406,\n            \"token_count\": 339\n        },\n        {\n            \"elapsed_time\": 425.264835357666,\n            \"token_count\": 340\n        },\n        {\n            \"elapsed_time\": 430.42588233947754,\n            \"token_count\": 341\n        },\n        {\n            \"elapsed_time\": 428.51781845092773,\n            \"token_count\": 342\n        },\n        {\n            \"elapsed_time\": 426.39732360839844,\n            \"token_count\": 343\n        },\n        {\n            \"elapsed_time\": 413.8641357421875,\n            \"token_count\": 344\n        },\n        {\n            \"elapsed_time\": 423.59280586242676,\n            \"token_count\": 345\n        },\n        {\n            \"elapsed_time\": 421.95916175842285,\n            \"token_count\": 346\n        },\n        {\n            \"elapsed_time\": 452.4531364440918,\n            \"token_count\": 347\n        },\n        {\n            \"elapsed_time\": 458.12201499938965,\n            \"token_count\": 348\n        },\n        {\n            \"elapsed_time\": 437.08205223083496,\n            \"token_count\": 349\n        },\n        {\n            \"elapsed_time\": 417.94800758361816,\n            \"token_count\": 350\n        },\n        {\n            \"elapsed_time\": 420.98498344421387,\n            \"token_count\": 351\n        },\n        {\n            \"elapsed_time\": 415.4808521270752,\n            \"token_count\": 352\n        },\n        {\n            \"elapsed_time\": 438.62199783325195,\n            \"token_count\": 353\n        },\n        {\n            \"elapsed_time\": 430.9496879577637,\n            \"token_count\": 354\n        },\n        {\n            \"elapsed_time\": 423.8128662109375,\n            \"token_count\": 355\n        },\n        {\n            \"elapsed_time\": 429.7680854797363,\n            \"token_count\": 356\n        },\n        {\n            \"elapsed_time\": 425.86398124694824,\n            \"token_count\": 357\n        },\n        {\n            \"elapsed_time\": 430.0990104675293,\n            \"token_count\": 358\n        },\n        {\n            \"elapsed_time\": 424.62801933288574,\n            \"token_count\": 359\n        },\n        {\n            \"elapsed_time\": 436.72704696655273,\n            \"token_count\": 360\n        },\n        {\n            \"elapsed_time\": 450.2379894256592,\n            \"token_count\": 361\n        },\n        {\n            \"elapsed_time\": 444.7751045227051,\n            \"token_count\": 362\n        },\n        {\n            \"elapsed_time\": 447.9401111602783,\n            \"token_count\": 363\n        },\n        {\n            \"elapsed_time\": 469.2549705505371,\n            \"token_count\": 364\n        },\n        {\n            \"elapsed_time\": 471.3430404663086,\n            \"token_count\": 365\n        },\n        {\n            \"elapsed_time\": 445.82676887512207,\n            \"token_count\": 366\n        },\n        {\n            \"elapsed_time\": 437.3350143432617,\n            \"token_count\": 367\n        },\n        {\n            \"elapsed_time\": 437.4651908874512,\n            \"token_count\": 368\n        },\n        {\n            \"elapsed_time\": 441.770076751709,\n            \"token_count\": 369\n        },\n        {\n            \"elapsed_time\": 440.0827884674072,\n            \"token_count\": 370\n        },\n        {\n            \"elapsed_time\": 446.2592601776123,\n            \"token_count\": 371\n        },\n        {\n            \"elapsed_time\": 444.3342685699463,\n            \"token_count\": 372\n        },\n        {\n            \"elapsed_time\": 448.8110542297363,\n            \"token_count\": 373\n        },\n        {\n            \"elapsed_time\": 455.72686195373535,\n            \"token_count\": 374\n        },\n        {\n            \"elapsed_time\": 460.0188732147217,\n            \"token_count\": 375\n        },\n        {\n            \"elapsed_time\": 461.1189365386963,\n            \"token_count\": 376\n        },\n        {\n            \"elapsed_time\": 456.42709732055664,\n            \"token_count\": 377\n        },\n        {\n            \"elapsed_time\": 455.1968574523926,\n            \"token_count\": 378\n        },\n        {\n            \"elapsed_time\": 467.7407741546631,\n            \"token_count\": 379\n        },\n        {\n            \"elapsed_time\": 462.24403381347656,\n            \"token_count\": 380\n        },\n        {\n            \"elapsed_time\": 457.9331874847412,\n            \"token_count\": 381\n        },\n        {\n            \"elapsed_time\": 455.8260440826416,\n            \"token_count\": 382\n        },\n        {\n            \"elapsed_time\": 500.5779266357422,\n            \"token_count\": 383\n        },\n        {\n            \"elapsed_time\": 477.83493995666504,\n            \"token_count\": 384\n        },\n        {\n            \"elapsed_time\": 483.74414443969727,\n            \"token_count\": 385\n        },\n        {\n            \"elapsed_time\": 493.92175674438477,\n            \"token_count\": 386\n        },\n        {\n            \"elapsed_time\": 467.6229953765869,\n            \"token_count\": 387\n        },\n        {\n            \"elapsed_time\": 464.3230438232422,\n            \"token_count\": 388\n        },\n        {\n            \"elapsed_time\": 459.5651626586914,\n            \"token_count\": 389\n        },\n        {\n            \"elapsed_time\": 473.94514083862305,\n            \"token_count\": 390\n        },\n        {\n            \"elapsed_time\": 480.85594177246094,\n            \"token_count\": 391\n        },\n        {\n            \"elapsed_time\": 477.57792472839355,\n            \"token_count\": 392\n        },\n        {\n            \"elapsed_time\": 470.9620475769043,\n            \"token_count\": 393\n        },\n        {\n            \"elapsed_time\": 476.17602348327637,\n            \"token_count\": 394\n        },\n        {\n            \"elapsed_time\": 470.3092575073242,\n            \"token_count\": 395\n        },\n        {\n            \"elapsed_time\": 481.6150665283203,\n            \"token_count\": 396\n        },\n        {\n            \"elapsed_time\": 474.3647575378418,\n            \"token_count\": 397\n        },\n        {\n            \"elapsed_time\": 479.86578941345215,\n            \"token_count\": 398\n        },\n        {\n            \"elapsed_time\": 470.1519012451172,\n            \"token_count\": 399\n        },\n        {\n            \"elapsed_time\": 474.22194480895996,\n            \"token_count\": 400\n        },\n        {\n            \"elapsed_time\": 475.50106048583984,\n            \"token_count\": 401\n        },\n        {\n            \"elapsed_time\": 474.49707984924316,\n            \"token_count\": 402\n        },\n        {\n            \"elapsed_time\": 522.1829414367676,\n            \"token_count\": 403\n        },\n        {\n            \"elapsed_time\": 541.0339832305908,\n            \"token_count\": 404\n        },\n        {\n            \"elapsed_time\": 501.1169910430908,\n            \"token_count\": 405\n        },\n        {\n            \"elapsed_time\": 507.5850486755371,\n            \"token_count\": 406\n        },\n        {\n            \"elapsed_time\": 488.3460998535156,\n            \"token_count\": 407\n        },\n        {\n            \"elapsed_time\": 486.4037036895752,\n            \"token_count\": 408\n        },\n        {\n            \"elapsed_time\": 490.5858039855957,\n            \"token_count\": 409\n        },\n        {\n            \"elapsed_time\": 492.5687313079834,\n            \"token_count\": 410\n        },\n        {\n            \"elapsed_time\": 497.1649646759033,\n            \"token_count\": 411\n        },\n        {\n            \"elapsed_time\": 499.0870952606201,\n            \"token_count\": 412\n        },\n        {\n            \"elapsed_time\": 503.0250549316406,\n            \"token_count\": 413\n        },\n        {\n            \"elapsed_time\": 534.904956817627,\n            \"token_count\": 414\n        },\n        {\n            \"elapsed_time\": 499.3762969970703,\n            \"token_count\": 415\n        },\n        {\n            \"elapsed_time\": 497.18523025512695,\n            \"token_count\": 416\n        },\n        {\n            \"elapsed_time\": 499.50504302978516,\n            \"token_count\": 417\n        },\n        {\n            \"elapsed_time\": 498.7812042236328,\n            \"token_count\": 418\n        },\n        {\n            \"elapsed_time\": 493.2868480682373,\n            \"token_count\": 419\n        },\n        {\n            \"elapsed_time\": 499.82595443725586,\n            \"token_count\": 420\n        },\n        {\n            \"elapsed_time\": 512.3200416564941,\n            \"token_count\": 421\n        },\n        {\n            \"elapsed_time\": 521.1179256439209,\n            \"token_count\": 422\n        },\n        {\n            \"elapsed_time\": 530.1470756530762,\n            \"token_count\": 423\n        },\n        {\n            \"elapsed_time\": 533.043384552002,\n            \"token_count\": 424\n        },\n        {\n            \"elapsed_time\": 524.9018669128418,\n            \"token_count\": 425\n        },\n        {\n            \"elapsed_time\": 522.5439071655273,\n            \"token_count\": 426\n        },\n        {\n            \"elapsed_time\": 518.9979076385498,\n            \"token_count\": 427\n        },\n        {\n            \"elapsed_time\": 505.85007667541504,\n            \"token_count\": 428\n        },\n        {\n            \"elapsed_time\": 507.72976875305176,\n            \"token_count\": 429\n        },\n        {\n            \"elapsed_time\": 516.0698890686035,\n            \"token_count\": 430\n        },\n        {\n            \"elapsed_time\": 521.0089683532715,\n            \"token_count\": 431\n        },\n        {\n            \"elapsed_time\": 529.0801525115967,\n            \"token_count\": 432\n        },\n        {\n            \"elapsed_time\": 514.279842376709,\n            \"token_count\": 433\n        },\n        {\n            \"elapsed_time\": 522.3121643066406,\n            \"token_count\": 434\n        },\n        {\n            \"elapsed_time\": 535.7871055603027,\n            \"token_count\": 435\n        },\n        {\n            \"elapsed_time\": 519.5579528808594,\n            \"token_count\": 436\n        },\n        {\n            \"elapsed_time\": 519.4869041442871,\n            \"token_count\": 437\n        },\n        {\n            \"elapsed_time\": 517.8229808807373,\n            \"token_count\": 438\n        },\n        {\n            \"elapsed_time\": 536.3140106201172,\n            \"token_count\": 439\n        },\n        {\n            \"elapsed_time\": 525.0308513641357,\n            \"token_count\": 440\n        },\n        {\n            \"elapsed_time\": 562.8988742828369,\n            \"token_count\": 441\n        },\n        {\n            \"elapsed_time\": 548.3510494232178,\n            \"token_count\": 442\n        },\n        {\n            \"elapsed_time\": 573.5812187194824,\n            \"token_count\": 443\n        },\n        {\n            \"elapsed_time\": 535.2597236633301,\n            \"token_count\": 444\n        },\n        {\n            \"elapsed_time\": 524.8911380767822,\n            \"token_count\": 445\n        },\n        {\n            \"elapsed_time\": 530.8239459991455,\n            \"token_count\": 446\n        },\n        {\n            \"elapsed_time\": 541.2678718566895,\n            \"token_count\": 447\n        },\n        {\n            \"elapsed_time\": 540.2400493621826,\n            \"token_count\": 448\n        },\n        {\n            \"elapsed_time\": 536.1719131469727,\n            \"token_count\": 449\n        },\n        {\n            \"elapsed_time\": 543.5659885406494,\n            \"token_count\": 450\n        },\n        {\n            \"elapsed_time\": 547.9080677032471,\n            \"token_count\": 451\n        },\n        {\n            \"elapsed_time\": 548.9180088043213,\n            \"token_count\": 452\n        },\n        {\n            \"elapsed_time\": 543.4980392456055,\n            \"token_count\": 453\n        },\n        {\n            \"elapsed_time\": 564.439058303833,\n            \"token_count\": 454\n        },\n        {\n            \"elapsed_time\": 589.4920825958252,\n            \"token_count\": 455\n        },\n        {\n            \"elapsed_time\": 569.5738792419434,\n            \"token_count\": 456\n        },\n        {\n            \"elapsed_time\": 560.067892074585,\n            \"token_count\": 457\n        },\n        {\n            \"elapsed_time\": 559.4067573547363,\n            \"token_count\": 458\n        },\n        {\n            \"elapsed_time\": 598.0770587921143,\n            \"token_count\": 459\n        },\n        {\n            \"elapsed_time\": 574.9740600585938,\n            \"token_count\": 460\n        },\n        {\n            \"elapsed_time\": 558.6040019989014,\n            \"token_count\": 461\n        },\n        {\n            \"elapsed_time\": 547.7950572967529,\n            \"token_count\": 462\n        },\n        {\n            \"elapsed_time\": 549.2150783538818,\n            \"token_count\": 463\n        },\n        {\n            \"elapsed_time\": 560.9450340270996,\n            \"token_count\": 464\n        },\n        {\n            \"elapsed_time\": 565.2029514312744,\n            \"token_count\": 465\n        },\n        {\n            \"elapsed_time\": 552.4501800537109,\n            \"token_count\": 466\n        },\n        {\n            \"elapsed_time\": 568.5896873474121,\n            \"token_count\": 467\n        },\n        {\n            \"elapsed_time\": 566.5137767791748,\n            \"token_count\": 468\n        },\n        {\n            \"elapsed_time\": 569.6001052856445,\n            \"token_count\": 469\n        },\n        {\n            \"elapsed_time\": 575.512170791626,\n            \"token_count\": 470\n        },\n        {\n            \"elapsed_time\": 570.3291893005371,\n            \"token_count\": 471\n        },\n        {\n            \"elapsed_time\": 566.9059753417969,\n            \"token_count\": 472\n        },\n        {\n            \"elapsed_time\": 576.9941806793213,\n            \"token_count\": 473\n        },\n        {\n            \"elapsed_time\": 600.7211208343506,\n            \"token_count\": 474\n        },\n        {\n            \"elapsed_time\": 631.7639350891113,\n            \"token_count\": 475\n        },\n        {\n            \"elapsed_time\": 658.998966217041,\n            \"token_count\": 476\n        },\n        {\n            \"elapsed_time\": 590.1567935943604,\n            \"token_count\": 477\n        },\n        {\n            \"elapsed_time\": 576.9021511077881,\n            \"token_count\": 478\n        },\n        {\n            \"elapsed_time\": 599.0431308746338,\n            \"token_count\": 479\n        },\n        {\n            \"elapsed_time\": 580.496072769165,\n            \"token_count\": 480\n        },\n        {\n            \"elapsed_time\": 583.2288265228271,\n            \"token_count\": 481\n        },\n        {\n            \"elapsed_time\": 573.9006996154785,\n            \"token_count\": 482\n        },\n        {\n            \"elapsed_time\": 585.7679843902588,\n            \"token_count\": 483\n        },\n        {\n            \"elapsed_time\": 598.0160236358643,\n            \"token_count\": 484\n        },\n        {\n            \"elapsed_time\": 593.1191444396973,\n            \"token_count\": 485\n        },\n        {\n            \"elapsed_time\": 592.8990840911865,\n            \"token_count\": 486\n        },\n        {\n            \"elapsed_time\": 578.7680149078369,\n            \"token_count\": 487\n        },\n        {\n            \"elapsed_time\": 582.4229717254639,\n            \"token_count\": 488\n        },\n        {\n            \"elapsed_time\": 585.7851505279541,\n            \"token_count\": 489\n        },\n        {\n            \"elapsed_time\": 582.3900699615479,\n            \"token_count\": 490\n        },\n        {\n            \"elapsed_time\": 592.8120613098145,\n            \"token_count\": 491\n        },\n        {\n            \"elapsed_time\": 651.3097286224365,\n            \"token_count\": 492\n        },\n        {\n            \"elapsed_time\": 615.5147552490234,\n            \"token_count\": 493\n        },\n        {\n            \"elapsed_time\": 629.3089389801025,\n            \"token_count\": 494\n        },\n        {\n            \"elapsed_time\": 623.4490871429443,\n            \"token_count\": 495\n        },\n        {\n            \"elapsed_time\": 631.4830780029297,\n            \"token_count\": 496\n        },\n        {\n            \"elapsed_time\": 659.9578857421875,\n            \"token_count\": 497\n        },\n        {\n            \"elapsed_time\": 639.3358707427979,\n            \"token_count\": 498\n        },\n        {\n            \"elapsed_time\": 623.0559349060059,\n            \"token_count\": 499\n        },\n        {\n            \"elapsed_time\": 636.1188888549805,\n            \"token_count\": 500\n        },\n        {\n            \"elapsed_time\": 633.0299377441406,\n            \"token_count\": 501\n        },\n        {\n            \"elapsed_time\": 632.1699619293213,\n            \"token_count\": 502\n        },\n        {\n            \"elapsed_time\": 657.872200012207,\n            \"token_count\": 503\n        },\n        {\n            \"elapsed_time\": 635.4598999023438,\n            \"token_count\": 504\n        },\n        {\n            \"elapsed_time\": 643.1519985198975,\n            \"token_count\": 505\n        },\n        {\n            \"elapsed_time\": 663.3169651031494,\n            \"token_count\": 506\n        },\n        {\n            \"elapsed_time\": 674.9649047851562,\n            \"token_count\": 507\n        },\n        {\n            \"elapsed_time\": 662.4579429626465,\n            \"token_count\": 508\n        },\n        {\n            \"elapsed_time\": 685.9791278839111,\n            \"token_count\": 509\n        },\n        {\n            \"elapsed_time\": 662.2657775878906,\n            \"token_count\": 510\n        },\n        {\n            \"elapsed_time\": 654.5212268829346,\n            \"token_count\": 511\n        },\n        {\n            \"elapsed_time\": 635.5040073394775,\n            \"token_count\": 512\n        },\n        {\n            \"elapsed_time\": 654.4430255889893,\n            \"token_count\": 513\n        },\n        {\n            \"elapsed_time\": 682.0330619812012,\n            \"token_count\": 514\n        },\n        {\n            \"elapsed_time\": 674.5500564575195,\n            \"token_count\": 515\n        },\n        {\n            \"elapsed_time\": 695.228099822998,\n            \"token_count\": 516\n        },\n        {\n            \"elapsed_time\": 698.3127593994141,\n            \"token_count\": 517\n        },\n        {\n            \"elapsed_time\": 670.8939075469971,\n            \"token_count\": 518\n        },\n        {\n            \"elapsed_time\": 676.3179302215576,\n            \"token_count\": 519\n        },\n        {\n            \"elapsed_time\": 679.6684265136719,\n            \"token_count\": 520\n        },\n        {\n            \"elapsed_time\": 657.6039791107178,\n            \"token_count\": 521\n        },\n        {\n            \"elapsed_time\": 726.8009185791016,\n            \"token_count\": 522\n        },\n        {\n            \"elapsed_time\": 670.8889007568359,\n            \"token_count\": 523\n        },\n        {\n            \"elapsed_time\": 676.4800548553467,\n            \"token_count\": 524\n        },\n        {\n            \"elapsed_time\": 667.2618389129639,\n            \"token_count\": 525\n        },\n        {\n            \"elapsed_time\": 683.1569671630859,\n            \"token_count\": 526\n        },\n        {\n            \"elapsed_time\": 663.3946895599365,\n            \"token_count\": 527\n        },\n        {\n            \"elapsed_time\": 666.9082641601562,\n            \"token_count\": 528\n        },\n        {\n            \"elapsed_time\": 685.4498386383057,\n            \"token_count\": 529\n        },\n        {\n            \"elapsed_time\": 672.2099781036377,\n            \"token_count\": 530\n        },\n        {\n            \"elapsed_time\": 668.503999710083,\n            \"token_count\": 531\n        },\n        {\n            \"elapsed_time\": 671.9920635223389,\n            \"token_count\": 532\n        },\n        {\n            \"elapsed_time\": 689.5289421081543,\n            \"token_count\": 533\n        },\n        {\n            \"elapsed_time\": 670.1021194458008,\n            \"token_count\": 534\n        },\n        {\n            \"elapsed_time\": 688.9910697937012,\n            \"token_count\": 535\n        },\n        {\n            \"elapsed_time\": 696.8660354614258,\n            \"token_count\": 536\n        },\n        {\n            \"elapsed_time\": 707.4930667877197,\n            \"token_count\": 537\n        },\n        {\n            \"elapsed_time\": 678.4472465515137,\n            \"token_count\": 538\n        },\n        {\n            \"elapsed_time\": 695.976972579956,\n            \"token_count\": 539\n        },\n        {\n            \"elapsed_time\": 696.5770721435547,\n            \"token_count\": 540\n        },\n        {\n            \"elapsed_time\": 685.6579780578613,\n            \"token_count\": 541\n        },\n        {\n            \"elapsed_time\": 672.3299026489258,\n            \"token_count\": 542\n        },\n        {\n            \"elapsed_time\": 683.9370727539062,\n            \"token_count\": 543\n        },\n        {\n            \"elapsed_time\": 713.8378620147705,\n            \"token_count\": 544\n        },\n        {\n            \"elapsed_time\": 698.4188556671143,\n            \"token_count\": 545\n        },\n        {\n            \"elapsed_time\": 705.4469585418701,\n            \"token_count\": 546\n        },\n        {\n            \"elapsed_time\": 700.98876953125,\n            \"token_count\": 547\n        },\n        {\n            \"elapsed_time\": 683.4759712219238,\n            \"token_count\": 548\n        },\n        {\n            \"elapsed_time\": 709.6338272094727,\n            \"token_count\": 549\n        },\n        {\n            \"elapsed_time\": 730.0589084625244,\n            \"token_count\": 550\n        },\n        {\n            \"elapsed_time\": 733.6788177490234,\n            \"token_count\": 551\n        },\n        {\n            \"elapsed_time\": 707.6327800750732,\n            \"token_count\": 552\n        },\n        {\n            \"elapsed_time\": 710.2329730987549,\n            \"token_count\": 553\n        },\n        {\n            \"elapsed_time\": 703.9999961853027,\n            \"token_count\": 554\n        },\n        {\n            \"elapsed_time\": 694.6370601654053,\n            \"token_count\": 555\n        },\n        {\n            \"elapsed_time\": 704.1637897491455,\n            \"token_count\": 556\n        },\n        {\n            \"elapsed_time\": 737.2739315032959,\n            \"token_count\": 557\n        },\n        {\n            \"elapsed_time\": 704.2477130889893,\n            \"token_count\": 558\n        },\n        {\n            \"elapsed_time\": 703.4449577331543,\n            \"token_count\": 559\n        },\n        {\n            \"elapsed_time\": 728.1410694122314,\n            \"token_count\": 560\n        },\n        {\n            \"elapsed_time\": 732.0592403411865,\n            \"token_count\": 561\n        },\n        {\n            \"elapsed_time\": 727.5331020355225,\n            \"token_count\": 562\n        },\n        {\n            \"elapsed_time\": 730.7801246643066,\n            \"token_count\": 563\n        },\n        {\n            \"elapsed_time\": 763.9138698577881,\n            \"token_count\": 564\n        },\n        {\n            \"elapsed_time\": 716.9351577758789,\n            \"token_count\": 565\n        },\n        {\n            \"elapsed_time\": 741.3778305053711,\n            \"token_count\": 566\n        },\n        {\n            \"elapsed_time\": 725.5580425262451,\n            \"token_count\": 567\n        },\n        {\n            \"elapsed_time\": 730.9889793395996,\n            \"token_count\": 568\n        },\n        {\n            \"elapsed_time\": 734.2398166656494,\n            \"token_count\": 569\n        },\n        {\n            \"elapsed_time\": 737.8311157226562,\n            \"token_count\": 570\n        },\n        {\n            \"elapsed_time\": 739.5682334899902,\n            \"token_count\": 571\n        },\n        {\n            \"elapsed_time\": 734.7161769866943,\n            \"token_count\": 572\n        },\n        {\n            \"elapsed_time\": 733.2289218902588,\n            \"token_count\": 573\n        },\n        {\n            \"elapsed_time\": 722.1508026123047,\n            \"token_count\": 574\n        },\n        {\n            \"elapsed_time\": 757.0569515228271,\n            \"token_count\": 575\n        },\n        {\n            \"elapsed_time\": 722.6920127868652,\n            \"token_count\": 576\n        },\n        {\n            \"elapsed_time\": 757.0540904998779,\n            \"token_count\": 577\n        },\n        {\n            \"elapsed_time\": 750.201940536499,\n            \"token_count\": 578\n        },\n        {\n            \"elapsed_time\": 739.7613525390625,\n            \"token_count\": 579\n        },\n        {\n            \"elapsed_time\": 773.3309268951416,\n            \"token_count\": 580\n        },\n        {\n            \"elapsed_time\": 742.0380115509033,\n            \"token_count\": 581\n        },\n        {\n            \"elapsed_time\": 744.1351413726807,\n            \"token_count\": 582\n        },\n        {\n            \"elapsed_time\": 747.5252151489258,\n            \"token_count\": 583\n        },\n        {\n            \"elapsed_time\": 760.1180076599121,\n            \"token_count\": 584\n        },\n        {\n            \"elapsed_time\": 735.2437973022461,\n            \"token_count\": 585\n        },\n        {\n            \"elapsed_time\": 761.2118721008301,\n            \"token_count\": 586\n        },\n        {\n            \"elapsed_time\": 752.0289421081543,\n            \"token_count\": 587\n        },\n        {\n            \"elapsed_time\": 766.1268711090088,\n            \"token_count\": 588\n        },\n        {\n            \"elapsed_time\": 758.620023727417,\n            \"token_count\": 589\n        },\n        {\n            \"elapsed_time\": 764.6498680114746,\n            \"token_count\": 590\n        },\n        {\n            \"elapsed_time\": 765.6619548797607,\n            \"token_count\": 591\n        },\n        {\n            \"elapsed_time\": 747.6279735565186,\n            \"token_count\": 592\n        },\n        {\n            \"elapsed_time\": 770.9300518035889,\n            \"token_count\": 593\n        },\n        {\n            \"elapsed_time\": 754.6098232269287,\n            \"token_count\": 594\n        },\n        {\n            \"elapsed_time\": 760.0240707397461,\n            \"token_count\": 595\n        },\n        {\n            \"elapsed_time\": 750.9407997131348,\n            \"token_count\": 596\n        },\n        {\n            \"elapsed_time\": 746.5171813964844,\n            \"token_count\": 597\n        },\n        {\n            \"elapsed_time\": 756.0529708862305,\n            \"token_count\": 598\n        },\n        {\n            \"elapsed_time\": 773.8540172576904,\n            \"token_count\": 599\n        },\n        {\n            \"elapsed_time\": 778.8650989532471,\n            \"token_count\": 600\n        },\n        {\n            \"elapsed_time\": 783.3890914916992,\n            \"token_count\": 601\n        },\n        {\n            \"elapsed_time\": 762.1257305145264,\n            \"token_count\": 602\n        },\n        {\n            \"elapsed_time\": 815.6230449676514,\n            \"token_count\": 603\n        },\n        {\n            \"elapsed_time\": 817.249059677124,\n            \"token_count\": 604\n        },\n        {\n            \"elapsed_time\": 794.8858737945557,\n            \"token_count\": 605\n        },\n        {\n            \"elapsed_time\": 802.0639419555664,\n            \"token_count\": 606\n        },\n        {\n            \"elapsed_time\": 779.2959213256836,\n            \"token_count\": 607\n        },\n        {\n            \"elapsed_time\": 788.0909442901611,\n            \"token_count\": 608\n        },\n        {\n            \"elapsed_time\": 780.2801132202148,\n            \"token_count\": 609\n        },\n        {\n            \"elapsed_time\": 766.4439678192139,\n            \"token_count\": 610\n        },\n        {\n            \"elapsed_time\": 781.1987400054932,\n            \"token_count\": 611\n        },\n        {\n            \"elapsed_time\": 781.2738418579102,\n            \"token_count\": 612\n        },\n        {\n            \"elapsed_time\": 778.527021408081,\n            \"token_count\": 613\n        },\n        {\n            \"elapsed_time\": 781.1660766601562,\n            \"token_count\": 614\n        },\n        {\n            \"elapsed_time\": 790.895938873291,\n            \"token_count\": 615\n        },\n        {\n            \"elapsed_time\": 823.9378929138184,\n            \"token_count\": 616\n        },\n        {\n            \"elapsed_time\": 812.0250701904297,\n            \"token_count\": 617\n        },\n        {\n            \"elapsed_time\": 797.4851131439209,\n            \"token_count\": 618\n        },\n        {\n            \"elapsed_time\": 800.9231090545654,\n            \"token_count\": 619\n        },\n        {\n            \"elapsed_time\": 809.5271587371826,\n            \"token_count\": 620\n        },\n        {\n            \"elapsed_time\": 785.2580547332764,\n            \"token_count\": 621\n        },\n        {\n            \"elapsed_time\": 806.5638542175293,\n            \"token_count\": 622\n        },\n        {\n            \"elapsed_time\": 794.2447662353516,\n            \"token_count\": 623\n        },\n        {\n            \"elapsed_time\": 794.9440479278564,\n            \"token_count\": 624\n        },\n        {\n            \"elapsed_time\": 806.5979480743408,\n            \"token_count\": 625\n        },\n        {\n            \"elapsed_time\": 805.2339553833008,\n            \"token_count\": 626\n        },\n        {\n            \"elapsed_time\": 811.3389015197754,\n            \"token_count\": 627\n        },\n        {\n            \"elapsed_time\": 868.0908679962158,\n            \"token_count\": 628\n        },\n        {\n            \"elapsed_time\": 795.1741218566895,\n            \"token_count\": 629\n        },\n        {\n            \"elapsed_time\": 799.8960018157959,\n            \"token_count\": 630\n        },\n        {\n            \"elapsed_time\": 812.8938674926758,\n            \"token_count\": 631\n        },\n        {\n            \"elapsed_time\": 818.8931941986084,\n            \"token_count\": 632\n        },\n        {\n            \"elapsed_time\": 810.6639385223389,\n            \"token_count\": 633\n        },\n        {\n            \"elapsed_time\": 810.7247352600098,\n            \"token_count\": 634\n        },\n        {\n            \"elapsed_time\": 854.0420532226562,\n            \"token_count\": 635\n        },\n        {\n            \"elapsed_time\": 804.6839237213135,\n            \"token_count\": 636\n        },\n        {\n            \"elapsed_time\": 821.8157291412354,\n            \"token_count\": 637\n        },\n        {\n            \"elapsed_time\": 817.0981407165527,\n            \"token_count\": 638\n        },\n        {\n            \"elapsed_time\": 814.4152164459229,\n            \"token_count\": 639\n        },\n        {\n            \"elapsed_time\": 855.9751510620117,\n            \"token_count\": 640\n        },\n        {\n            \"elapsed_time\": 818.0601596832275,\n            \"token_count\": 641\n        },\n        {\n            \"elapsed_time\": 830.6300640106201,\n            \"token_count\": 642\n        },\n        {\n            \"elapsed_time\": 836.2441062927246,\n            \"token_count\": 643\n        },\n        {\n            \"elapsed_time\": 852.9171943664551,\n            \"token_count\": 644\n        },\n        {\n            \"elapsed_time\": 810.6119632720947,\n            \"token_count\": 645\n        },\n        {\n            \"elapsed_time\": 819.2219734191895,\n            \"token_count\": 646\n        },\n        {\n            \"elapsed_time\": 815.9439563751221,\n            \"token_count\": 647\n        },\n        {\n            \"elapsed_time\": 825.8111476898193,\n            \"token_count\": 648\n        },\n        {\n            \"elapsed_time\": 833.2102298736572,\n            \"token_count\": 649\n        },\n        {\n            \"elapsed_time\": 850.0947952270508,\n            \"token_count\": 650\n        },\n        {\n            \"elapsed_time\": 847.8660583496094,\n            \"token_count\": 651\n        },\n        {\n            \"elapsed_time\": 873.5368251800537,\n            \"token_count\": 652\n        },\n        {\n            \"elapsed_time\": 876.4591217041016,\n            \"token_count\": 653\n        },\n        {\n            \"elapsed_time\": 864.5689487457275,\n            \"token_count\": 654\n        },\n        {\n            \"elapsed_time\": 841.3457870483398,\n            \"token_count\": 655\n        },\n        {\n            \"elapsed_time\": 856.8928241729736,\n            \"token_count\": 656\n        },\n        {\n            \"elapsed_time\": 838.9019966125488,\n            \"token_count\": 657\n        },\n        {\n            \"elapsed_time\": 845.757007598877,\n            \"token_count\": 658\n        },\n        {\n            \"elapsed_time\": 863.469123840332,\n            \"token_count\": 659\n        },\n        {\n            \"elapsed_time\": 845.3171253204346,\n            \"token_count\": 660\n        },\n        {\n            \"elapsed_time\": 873.6157417297363,\n            \"token_count\": 661\n        },\n        {\n            \"elapsed_time\": 862.900972366333,\n            \"token_count\": 662\n        },\n        {\n            \"elapsed_time\": 904.1879177093506,\n            \"token_count\": 663\n        },\n        {\n            \"elapsed_time\": 911.1380577087402,\n            \"token_count\": 664\n        },\n        {\n            \"elapsed_time\": 877.5229454040527,\n            \"token_count\": 665\n        },\n        {\n            \"elapsed_time\": 900.8140563964844,\n            \"token_count\": 666\n        },\n        {\n            \"elapsed_time\": 856.4369678497314,\n            \"token_count\": 667\n        },\n        {\n            \"elapsed_time\": 840.4300212860107,\n            \"token_count\": 668\n        },\n        {\n            \"elapsed_time\": 865.6840324401855,\n            \"token_count\": 669\n        },\n        {\n            \"elapsed_time\": 871.2441921234131,\n            \"token_count\": 670\n        },\n        {\n            \"elapsed_time\": 862.3812198638916,\n            \"token_count\": 671\n        },\n        {\n            \"elapsed_time\": 873.9111423492432,\n            \"token_count\": 672\n        },\n        {\n            \"elapsed_time\": 868.3099746704102,\n            \"token_count\": 673\n        },\n        {\n            \"elapsed_time\": 894.7000503540039,\n            \"token_count\": 674\n        },\n        {\n            \"elapsed_time\": 880.1238536834717,\n            \"token_count\": 675\n        },\n        {\n            \"elapsed_time\": 850.2810001373291,\n            \"token_count\": 676\n        },\n        {\n            \"elapsed_time\": 890.4669284820557,\n            \"token_count\": 677\n        },\n        {\n            \"elapsed_time\": 863.753080368042,\n            \"token_count\": 678\n        },\n        {\n            \"elapsed_time\": 876.4212131500244,\n            \"token_count\": 679\n        },\n        {\n            \"elapsed_time\": 881.9088935852051,\n            \"token_count\": 680\n        },\n        {\n            \"elapsed_time\": 909.4328880310059,\n            \"token_count\": 681\n        },\n        {\n            \"elapsed_time\": 897.0329761505127,\n            \"token_count\": 682\n        },\n        {\n            \"elapsed_time\": 884.6838474273682,\n            \"token_count\": 683\n        },\n        {\n            \"elapsed_time\": 845.451831817627,\n            \"token_count\": 684\n        },\n        {\n            \"elapsed_time\": 852.2071838378906,\n            \"token_count\": 685\n        },\n        {\n            \"elapsed_time\": 899.8377323150635,\n            \"token_count\": 686\n        },\n        {\n            \"elapsed_time\": 938.6401176452637,\n            \"token_count\": 687\n        },\n        {\n            \"elapsed_time\": 883.1479549407959,\n            \"token_count\": 688\n        },\n        {\n            \"elapsed_time\": 857.6540946960449,\n            \"token_count\": 689\n        },\n        {\n            \"elapsed_time\": 875.006914138794,\n            \"token_count\": 690\n        },\n        {\n            \"elapsed_time\": 905.7869911193848,\n            \"token_count\": 691\n        },\n        {\n            \"elapsed_time\": 893.326997756958,\n            \"token_count\": 692\n        },\n        {\n            \"elapsed_time\": 914.0479564666748,\n            \"token_count\": 693\n        },\n        {\n            \"elapsed_time\": 993.9572811126709,\n            \"token_count\": 694\n        },\n        {\n            \"elapsed_time\": 835.1140022277832,\n            \"token_count\": 695\n        },\n        {\n            \"elapsed_time\": 859.8461151123047,\n            \"token_count\": 696\n        },\n        {\n            \"elapsed_time\": 847.7330207824707,\n            \"token_count\": 697\n        },\n        {\n            \"elapsed_time\": 853.1429767608643,\n            \"token_count\": 698\n        },\n        {\n            \"elapsed_time\": 877.3999214172363,\n            \"token_count\": 699\n        },\n        {\n            \"elapsed_time\": 848.8421440124512,\n            \"token_count\": 700\n        },\n        {\n            \"elapsed_time\": 872.4002838134766,\n            \"token_count\": 701\n        },\n        {\n            \"elapsed_time\": 860.4459762573242,\n            \"token_count\": 702\n        },\n        {\n            \"elapsed_time\": 860.7540130615234,\n            \"token_count\": 703\n        },\n        {\n            \"elapsed_time\": 901.7531871795654,\n            \"token_count\": 704\n        },\n        {\n            \"elapsed_time\": 889.6300792694092,\n            \"token_count\": 705\n        },\n        {\n            \"elapsed_time\": 861.2210750579834,\n            \"token_count\": 706\n        },\n        {\n            \"elapsed_time\": 877.0627975463867,\n            \"token_count\": 707\n        },\n        {\n            \"elapsed_time\": 872.2248077392578,\n            \"token_count\": 708\n        },\n        {\n            \"elapsed_time\": 876.7061233520508,\n            \"token_count\": 709\n        },\n        {\n            \"elapsed_time\": 874.2232322692871,\n            \"token_count\": 710\n        },\n        {\n            \"elapsed_time\": 871.6099262237549,\n            \"token_count\": 711\n        },\n        {\n            \"elapsed_time\": 863.8780117034912,\n            \"token_count\": 712\n        },\n        {\n            \"elapsed_time\": 861.8829250335693,\n            \"token_count\": 713\n        },\n        {\n            \"elapsed_time\": 864.997148513794,\n            \"token_count\": 714\n        },\n        {\n            \"elapsed_time\": 902.3878574371338,\n            \"token_count\": 715\n        },\n        {\n            \"elapsed_time\": 905.552864074707,\n            \"token_count\": 716\n        },\n        {\n            \"elapsed_time\": 887.8898620605469,\n            \"token_count\": 717\n        },\n        {\n            \"elapsed_time\": 865.3512001037598,\n            \"token_count\": 718\n        },\n        {\n            \"elapsed_time\": 921.2119579315186,\n            \"token_count\": 719\n        },\n        {\n            \"elapsed_time\": 874.6020793914795,\n            \"token_count\": 720\n        },\n        {\n            \"elapsed_time\": 886.857271194458,\n            \"token_count\": 721\n        },\n        {\n            \"elapsed_time\": 890.068769454956,\n            \"token_count\": 722\n        },\n        {\n            \"elapsed_time\": 870.3858852386475,\n            \"token_count\": 723\n        },\n        {\n            \"elapsed_time\": 872.4451065063477,\n            \"token_count\": 724\n        },\n        {\n            \"elapsed_time\": 886.2419128417969,\n            \"token_count\": 725\n        },\n        {\n            \"elapsed_time\": 915.5311584472656,\n            \"token_count\": 726\n        },\n        {\n            \"elapsed_time\": 917.3147678375244,\n            \"token_count\": 727\n        },\n        {\n            \"elapsed_time\": 885.1439952850342,\n            \"token_count\": 728\n        },\n        {\n            \"elapsed_time\": 885.3046894073486,\n            \"token_count\": 729\n        },\n        {\n            \"elapsed_time\": 896.1889743804932,\n            \"token_count\": 730\n        },\n        {\n            \"elapsed_time\": 906.6040515899658,\n            \"token_count\": 731\n        },\n        {\n            \"elapsed_time\": 905.5318832397461,\n            \"token_count\": 732\n        },\n        {\n            \"elapsed_time\": 903.0609130859375,\n            \"token_count\": 733\n        },\n        {\n            \"elapsed_time\": 901.3876914978027,\n            \"token_count\": 734\n        },\n        {\n            \"elapsed_time\": 903.4957885742188,\n            \"token_count\": 735\n        },\n        {\n            \"elapsed_time\": 915.194034576416,\n            \"token_count\": 736\n        },\n        {\n            \"elapsed_time\": 939.079761505127,\n            \"token_count\": 737\n        },\n        {\n            \"elapsed_time\": 911.5219116210938,\n            \"token_count\": 738\n        },\n        {\n            \"elapsed_time\": 899.5487689971924,\n            \"token_count\": 739\n        },\n        {\n            \"elapsed_time\": 955.068826675415,\n            \"token_count\": 740\n        },\n        {\n            \"elapsed_time\": 955.1289081573486,\n            \"token_count\": 741\n        },\n        {\n            \"elapsed_time\": 908.9326858520508,\n            \"token_count\": 742\n        },\n        {\n            \"elapsed_time\": 918.4308052062988,\n            \"token_count\": 743\n        },\n        {\n            \"elapsed_time\": 894.2909240722656,\n            \"token_count\": 744\n        },\n        {\n            \"elapsed_time\": 907.5498580932617,\n            \"token_count\": 745\n        },\n        {\n            \"elapsed_time\": 943.8052177429199,\n            \"token_count\": 746\n        },\n        {\n            \"elapsed_time\": 945.5070495605469,\n            \"token_count\": 747\n        },\n        {\n            \"elapsed_time\": 982.8181266784668,\n            \"token_count\": 748\n        },\n        {\n            \"elapsed_time\": 936.2037181854248,\n            \"token_count\": 749\n        },\n        {\n            \"elapsed_time\": 934.0300559997559,\n            \"token_count\": 750\n        },\n        {\n            \"elapsed_time\": 943.8340663909912,\n            \"token_count\": 751\n        },\n        {\n            \"elapsed_time\": 917.046070098877,\n            \"token_count\": 752\n        },\n        {\n            \"elapsed_time\": 927.1447658538818,\n            \"token_count\": 753\n        },\n        {\n            \"elapsed_time\": 911.231279373169,\n            \"token_count\": 754\n        },\n        {\n            \"elapsed_time\": 934.6013069152832,\n            \"token_count\": 755\n        },\n        {\n            \"elapsed_time\": 918.3061122894287,\n            \"token_count\": 756\n        },\n        {\n            \"elapsed_time\": 962.3701572418213,\n            \"token_count\": 757\n        },\n        {\n            \"elapsed_time\": 956.7220211029053,\n            \"token_count\": 758\n        },\n        {\n            \"elapsed_time\": 935.4269504547119,\n            \"token_count\": 759\n        },\n        {\n            \"elapsed_time\": 931.0300350189209,\n            \"token_count\": 760\n        },\n        {\n            \"elapsed_time\": 951.0829448699951,\n            \"token_count\": 761\n        },\n        {\n            \"elapsed_time\": 935.6310367584229,\n            \"token_count\": 762\n        },\n        {\n            \"elapsed_time\": 936.2468719482422,\n            \"token_count\": 763\n        },\n        {\n            \"elapsed_time\": 945.3997611999512,\n            \"token_count\": 764\n        },\n        {\n            \"elapsed_time\": 986.7877960205078,\n            \"token_count\": 765\n        },\n        {\n            \"elapsed_time\": 970.1352119445801,\n            \"token_count\": 766\n        },\n        {\n            \"elapsed_time\": 968.2466983795166,\n            \"token_count\": 767\n        },\n        {\n            \"elapsed_time\": 958.2858085632324,\n            \"token_count\": 768\n        },\n        {\n            \"elapsed_time\": 948.462724685669,\n            \"token_count\": 769\n        },\n        {\n            \"elapsed_time\": 926.9680976867676,\n            \"token_count\": 770\n        },\n        {\n            \"elapsed_time\": 937.471866607666,\n            \"token_count\": 771\n        },\n        {\n            \"elapsed_time\": 966.9280052185059,\n            \"token_count\": 772\n        },\n        {\n            \"elapsed_time\": 963.468074798584,\n            \"token_count\": 773\n        },\n        {\n            \"elapsed_time\": 949.52392578125,\n            \"token_count\": 774\n        },\n        {\n            \"elapsed_time\": 945.0027942657471,\n            \"token_count\": 775\n        },\n        {\n            \"elapsed_time\": 939.9826526641846,\n            \"token_count\": 776\n        },\n        {\n            \"elapsed_time\": 973.2320308685303,\n            \"token_count\": 777\n        },\n        {\n            \"elapsed_time\": 967.3218727111816,\n            \"token_count\": 778\n        },\n        {\n            \"elapsed_time\": 950.2789974212646,\n            \"token_count\": 779\n        },\n        {\n            \"elapsed_time\": 944.3318843841553,\n            \"token_count\": 780\n        },\n        {\n            \"elapsed_time\": 993.9780235290527,\n            \"token_count\": 781\n        },\n        {\n            \"elapsed_time\": 999.8130798339844,\n            \"token_count\": 782\n        },\n        {\n            \"elapsed_time\": 964.9229049682617,\n            \"token_count\": 783\n        },\n        {\n            \"elapsed_time\": 952.286958694458,\n            \"token_count\": 784\n        },\n        {\n            \"elapsed_time\": 993.4918880462646,\n            \"token_count\": 785\n        },\n        {\n            \"elapsed_time\": 985.4457378387451,\n            \"token_count\": 786\n        },\n        {\n            \"elapsed_time\": 996.0262775421143,\n            \"token_count\": 787\n        },\n        {\n            \"elapsed_time\": 1006.321907043457,\n            \"token_count\": 788\n        },\n        {\n            \"elapsed_time\": 971.5721607208252,\n            \"token_count\": 789\n        },\n        {\n            \"elapsed_time\": 1026.247262954712,\n            \"token_count\": 790\n        },\n        {\n            \"elapsed_time\": 1015.1896476745605,\n            \"token_count\": 791\n        },\n        {\n            \"elapsed_time\": 1026.4759063720703,\n            \"token_count\": 792\n        },\n        {\n            \"elapsed_time\": 973.0522632598877,\n            \"token_count\": 793\n        },\n        {\n            \"elapsed_time\": 965.6057357788086,\n            \"token_count\": 794\n        },\n        {\n            \"elapsed_time\": 959.61594581604,\n            \"token_count\": 795\n        },\n        {\n            \"elapsed_time\": 979.7031879425049,\n            \"token_count\": 796\n        },\n        {\n            \"elapsed_time\": 1026.258945465088,\n            \"token_count\": 797\n        },\n        {\n            \"elapsed_time\": 999.2351531982422,\n            \"token_count\": 798\n        },\n        {\n            \"elapsed_time\": 975.5859375,\n            \"token_count\": 799\n        },\n        {\n            \"elapsed_time\": 976.7377376556396,\n            \"token_count\": 800\n        },\n        {\n            \"elapsed_time\": 978.5499572753906,\n            \"token_count\": 801\n        },\n        {\n            \"elapsed_time\": 967.3070907592773,\n            \"token_count\": 802\n        },\n        {\n            \"elapsed_time\": 969.9997901916504,\n            \"token_count\": 803\n        },\n        {\n            \"elapsed_time\": 993.0713176727295,\n            \"token_count\": 804\n        },\n        {\n            \"elapsed_time\": 983.4628105163574,\n            \"token_count\": 805\n        },\n        {\n            \"elapsed_time\": 1015.6819820404053,\n            \"token_count\": 806\n        },\n        {\n            \"elapsed_time\": 1019.2279815673828,\n            \"token_count\": 807\n        },\n        {\n            \"elapsed_time\": 977.2469997406006,\n            \"token_count\": 808\n        },\n        {\n            \"elapsed_time\": 990.1268482208252,\n            \"token_count\": 809\n        },\n        {\n            \"elapsed_time\": 996.4280128479004,\n            \"token_count\": 810\n        },\n        {\n            \"elapsed_time\": 1008.1138610839844,\n            \"token_count\": 811\n        },\n        {\n            \"elapsed_time\": 1003.528356552124,\n            \"token_count\": 812\n        },\n        {\n            \"elapsed_time\": 1026.021957397461,\n            \"token_count\": 813\n        },\n        {\n            \"elapsed_time\": 1011.0671520233154,\n            \"token_count\": 814\n        },\n        {\n            \"elapsed_time\": 991.1260604858398,\n            \"token_count\": 815\n        },\n        {\n            \"elapsed_time\": 1036.0009670257568,\n            \"token_count\": 816\n        },\n        {\n            \"elapsed_time\": 1048.2568740844727,\n            \"token_count\": 817\n        },\n        {\n            \"elapsed_time\": 1011.5840435028076,\n            \"token_count\": 818\n        },\n        {\n            \"elapsed_time\": 985.6131076812744,\n            \"token_count\": 819\n        },\n        {\n            \"elapsed_time\": 992.9828643798828,\n            \"token_count\": 820\n        },\n        {\n            \"elapsed_time\": 1067.0549869537354,\n            \"token_count\": 821\n        },\n        {\n            \"elapsed_time\": 1007.9092979431152,\n            \"token_count\": 822\n        },\n        {\n            \"elapsed_time\": 1007.9989433288574,\n            \"token_count\": 823\n        },\n        {\n            \"elapsed_time\": 1007.2150230407715,\n            \"token_count\": 824\n        },\n        {\n            \"elapsed_time\": 1015.7771110534668,\n            \"token_count\": 825\n        },\n        {\n            \"elapsed_time\": 1049.9351024627686,\n            \"token_count\": 826\n        },\n        {\n            \"elapsed_time\": 1039.2727851867676,\n            \"token_count\": 827\n        },\n        {\n            \"elapsed_time\": 1017.758846282959,\n            \"token_count\": 828\n        },\n        {\n            \"elapsed_time\": 994.2889213562012,\n            \"token_count\": 829\n        },\n        {\n            \"elapsed_time\": 1044.712781906128,\n            \"token_count\": 830\n        },\n        {\n            \"elapsed_time\": 1028.6140441894531,\n            \"token_count\": 831\n        },\n        {\n            \"elapsed_time\": 1027.001142501831,\n            \"token_count\": 832\n        },\n        {\n            \"elapsed_time\": 1018.5010433197021,\n            \"token_count\": 833\n        },\n        {\n            \"elapsed_time\": 1045.9837913513184,\n            \"token_count\": 834\n        },\n        {\n            \"elapsed_time\": 1135.4973316192627,\n            \"token_count\": 835\n        },\n        {\n            \"elapsed_time\": 1122.6019859313965,\n            \"token_count\": 836\n        },\n        {\n            \"elapsed_time\": 1071.2230205535889,\n            \"token_count\": 837\n        },\n        {\n            \"elapsed_time\": 1083.3790302276611,\n            \"token_count\": 838\n        },\n        {\n            \"elapsed_time\": 1105.510950088501,\n            \"token_count\": 839\n        },\n        {\n            \"elapsed_time\": 1149.7211456298828,\n            \"token_count\": 840\n        },\n        {\n            \"elapsed_time\": 1109.7090244293213,\n            \"token_count\": 841\n        },\n        {\n            \"elapsed_time\": 1082.9010009765625,\n            \"token_count\": 842\n        },\n        {\n            \"elapsed_time\": 1095.7257747650146,\n            \"token_count\": 843\n        },\n        {\n            \"elapsed_time\": 1129.899024963379,\n            \"token_count\": 844\n        },\n        {\n            \"elapsed_time\": 1103.8730144500732,\n            \"token_count\": 845\n        },\n        {\n            \"elapsed_time\": 1071.2378025054932,\n            \"token_count\": 846\n        },\n        {\n            \"elapsed_time\": 1074.0838050842285,\n            \"token_count\": 847\n        },\n        {\n            \"elapsed_time\": 1120.5179691314697,\n            \"token_count\": 848\n        },\n        {\n            \"elapsed_time\": 1105.125904083252,\n            \"token_count\": 849\n        },\n        {\n            \"elapsed_time\": 1084.4078063964844,\n            \"token_count\": 850\n        },\n        {\n            \"elapsed_time\": 1087.7938270568848,\n            \"token_count\": 851\n        },\n        {\n            \"elapsed_time\": 1128.661870956421,\n            \"token_count\": 852\n        },\n        {\n            \"elapsed_time\": 1097.870111465454,\n            \"token_count\": 853\n        },\n        {\n            \"elapsed_time\": 1083.604097366333,\n            \"token_count\": 854\n        },\n        {\n            \"elapsed_time\": 1110.6181144714355,\n            \"token_count\": 855\n        },\n        {\n            \"elapsed_time\": 1095.5898761749268,\n            \"token_count\": 856\n        },\n        {\n            \"elapsed_time\": 1110.3918552398682,\n            \"token_count\": 857\n        },\n        {\n            \"elapsed_time\": 1111.0508441925049,\n            \"token_count\": 858\n        },\n        {\n            \"elapsed_time\": 1098.0708599090576,\n            \"token_count\": 859\n        },\n        {\n            \"elapsed_time\": 1096.4851379394531,\n            \"token_count\": 860\n        },\n        {\n            \"elapsed_time\": 1098.2930660247803,\n            \"token_count\": 861\n        },\n        {\n            \"elapsed_time\": 1136.8820667266846,\n            \"token_count\": 862\n        },\n        {\n            \"elapsed_time\": 1119.2331314086914,\n            \"token_count\": 863\n        },\n        {\n            \"elapsed_time\": 1127.953052520752,\n            \"token_count\": 864\n        },\n        {\n            \"elapsed_time\": 1114.31884765625,\n            \"token_count\": 865\n        },\n        {\n            \"elapsed_time\": 1156.4826965332031,\n            \"token_count\": 866\n        },\n        {\n            \"elapsed_time\": 1126.6319751739502,\n            \"token_count\": 867\n        },\n        {\n            \"elapsed_time\": 1133.5039138793945,\n            \"token_count\": 868\n        },\n        {\n            \"elapsed_time\": 1151.1361598968506,\n            \"token_count\": 869\n        },\n        {\n            \"elapsed_time\": 1123.8861083984375,\n            \"token_count\": 870\n        },\n        {\n            \"elapsed_time\": 1143.9900398254395,\n            \"token_count\": 871\n        },\n        {\n            \"elapsed_time\": 1135.4100704193115,\n            \"token_count\": 872\n        },\n        {\n            \"elapsed_time\": 1123.4469413757324,\n            \"token_count\": 873\n        },\n        {\n            \"elapsed_time\": 1140.9378051757812,\n            \"token_count\": 874\n        },\n        {\n            \"elapsed_time\": 1208.785057067871,\n            \"token_count\": 875\n        },\n        {\n            \"elapsed_time\": 1124.5441436767578,\n            \"token_count\": 876\n        },\n        {\n            \"elapsed_time\": 1114.2029762268066,\n            \"token_count\": 877\n        },\n        {\n            \"elapsed_time\": 1133.707046508789,\n            \"token_count\": 878\n        },\n        {\n            \"elapsed_time\": 1143.2089805603027,\n            \"token_count\": 879\n        },\n        {\n            \"elapsed_time\": 1152.3962020874023,\n            \"token_count\": 880\n        },\n        {\n            \"elapsed_time\": 1121.380090713501,\n            \"token_count\": 881\n        },\n        {\n            \"elapsed_time\": 1145.4012393951416,\n            \"token_count\": 882\n        },\n        {\n            \"elapsed_time\": 1152.83203125,\n            \"token_count\": 883\n        },\n        {\n            \"elapsed_time\": 1130.7189464569092,\n            \"token_count\": 884\n        },\n        {\n            \"elapsed_time\": 1154.299020767212,\n            \"token_count\": 885\n        },\n        {\n            \"elapsed_time\": 1165.3642654418945,\n            \"token_count\": 886\n        },\n        {\n            \"elapsed_time\": 1180.3059577941895,\n            \"token_count\": 887\n        },\n        {\n            \"elapsed_time\": 1172.1458435058594,\n            \"token_count\": 888\n        },\n        {\n            \"elapsed_time\": 1155.5912494659424,\n            \"token_count\": 889\n        },\n        {\n            \"elapsed_time\": 1175.4529476165771,\n            \"token_count\": 890\n        },\n        {\n            \"elapsed_time\": 1149.8332023620605,\n            \"token_count\": 891\n        },\n        {\n            \"elapsed_time\": 1221.423864364624,\n            \"token_count\": 892\n        },\n        {\n            \"elapsed_time\": 1152.7009010314941,\n            \"token_count\": 893\n        },\n        {\n            \"elapsed_time\": 1169.8229312896729,\n            \"token_count\": 894\n        },\n        {\n            \"elapsed_time\": 1160.0687503814697,\n            \"token_count\": 895\n        },\n        {\n            \"elapsed_time\": 1174.3040084838867,\n            \"token_count\": 896\n        },\n        {\n            \"elapsed_time\": 1173.1488704681396,\n            \"token_count\": 897\n        },\n        {\n            \"elapsed_time\": 1206.5439224243164,\n            \"token_count\": 898\n        },\n        {\n            \"elapsed_time\": 1241.407871246338,\n            \"token_count\": 899\n        },\n        {\n            \"elapsed_time\": 1221.3799953460693,\n            \"token_count\": 900\n        },\n        {\n            \"elapsed_time\": 1190.492868423462,\n            \"token_count\": 901\n        },\n        {\n            \"elapsed_time\": 1149.3990421295166,\n            \"token_count\": 902\n        },\n        {\n            \"elapsed_time\": 1159.740924835205,\n            \"token_count\": 903\n        },\n        {\n            \"elapsed_time\": 1164.28804397583,\n            \"token_count\": 904\n        },\n        {\n            \"elapsed_time\": 1170.008897781372,\n            \"token_count\": 905\n        },\n        {\n            \"elapsed_time\": 1189.5978450775146,\n            \"token_count\": 906\n        },\n        {\n            \"elapsed_time\": 1165.4701232910156,\n            \"token_count\": 907\n        },\n        {\n            \"elapsed_time\": 1218.4031009674072,\n            \"token_count\": 908\n        },\n        {\n            \"elapsed_time\": 1177.2480010986328,\n            \"token_count\": 909\n        },\n        {\n            \"elapsed_time\": 1181.3089847564697,\n            \"token_count\": 910\n        },\n        {\n            \"elapsed_time\": 1160.7410907745361,\n            \"token_count\": 911\n        },\n        {\n            \"elapsed_time\": 1173.095941543579,\n            \"token_count\": 912\n        },\n        {\n            \"elapsed_time\": 1171.915054321289,\n            \"token_count\": 913\n        },\n        {\n            \"elapsed_time\": 1191.7622089385986,\n            \"token_count\": 914\n        },\n        {\n            \"elapsed_time\": 1214.2279148101807,\n            \"token_count\": 915\n        },\n        {\n            \"elapsed_time\": 1191.1287307739258,\n            \"token_count\": 916\n        },\n        {\n            \"elapsed_time\": 1208.6169719696045,\n            \"token_count\": 917\n        },\n        {\n            \"elapsed_time\": 1202.7289867401123,\n            \"token_count\": 918\n        },\n        {\n            \"elapsed_time\": 1219.2788124084473,\n            \"token_count\": 919\n        },\n        {\n            \"elapsed_time\": 1225.1660823822021,\n            \"token_count\": 920\n        },\n        {\n            \"elapsed_time\": 1211.3001346588135,\n            \"token_count\": 921\n        },\n        {\n            \"elapsed_time\": 1210.280179977417,\n            \"token_count\": 922\n        },\n        {\n            \"elapsed_time\": 1214.9970531463623,\n            \"token_count\": 923\n        },\n        {\n            \"elapsed_time\": 1210.345983505249,\n            \"token_count\": 924\n        },\n        {\n            \"elapsed_time\": 1249.7310638427734,\n            \"token_count\": 925\n        },\n        {\n            \"elapsed_time\": 1194.2119598388672,\n            \"token_count\": 926\n        },\n        {\n            \"elapsed_time\": 1210.5278968811035,\n            \"token_count\": 927\n        },\n        {\n            \"elapsed_time\": 1207.2458267211914,\n            \"token_count\": 928\n        },\n        {\n            \"elapsed_time\": 1231.3008308410645,\n            \"token_count\": 929\n        },\n        {\n            \"elapsed_time\": 1190.269947052002,\n            \"token_count\": 930\n        },\n        {\n            \"elapsed_time\": 1175.7640838623047,\n            \"token_count\": 931\n        },\n        {\n            \"elapsed_time\": 1195.2240467071533,\n            \"token_count\": 932\n        },\n        {\n            \"elapsed_time\": 1243.8418865203857,\n            \"token_count\": 933\n        },\n        {\n            \"elapsed_time\": 1204.4878005981445,\n            \"token_count\": 934\n        },\n        {\n            \"elapsed_time\": 1192.7618980407715,\n            \"token_count\": 935\n        },\n        {\n            \"elapsed_time\": 1192.230224609375,\n            \"token_count\": 936\n        },\n        {\n            \"elapsed_time\": 1226.0360717773438,\n            \"token_count\": 937\n        },\n        {\n            \"elapsed_time\": 1244.8480129241943,\n            \"token_count\": 938\n        },\n        {\n            \"elapsed_time\": 1247.600793838501,\n            \"token_count\": 939\n        },\n        {\n            \"elapsed_time\": 1220.9670543670654,\n            \"token_count\": 940\n        },\n        {\n            \"elapsed_time\": 1243.8328266143799,\n            \"token_count\": 941\n        },\n        {\n            \"elapsed_time\": 1248.1279373168945,\n            \"token_count\": 942\n        },\n        {\n            \"elapsed_time\": 1223.071813583374,\n            \"token_count\": 943\n        },\n        {\n            \"elapsed_time\": 1223.1440544128418,\n            \"token_count\": 944\n        },\n        {\n            \"elapsed_time\": 1212.4137878417969,\n            \"token_count\": 945\n        },\n        {\n            \"elapsed_time\": 1235.2757453918457,\n            \"token_count\": 946\n        },\n        {\n            \"elapsed_time\": 1265.765905380249,\n            \"token_count\": 947\n        },\n        {\n            \"elapsed_time\": 1223.6747741699219,\n            \"token_count\": 948\n        },\n        {\n            \"elapsed_time\": 1276.6129970550537,\n            \"token_count\": 949\n        },\n        {\n            \"elapsed_time\": 1239.4740581512451,\n            \"token_count\": 950\n        },\n        {\n            \"elapsed_time\": 1239.2480373382568,\n            \"token_count\": 951\n        },\n        {\n            \"elapsed_time\": 1227.7781963348389,\n            \"token_count\": 952\n        },\n        {\n            \"elapsed_time\": 1220.6542491912842,\n            \"token_count\": 953\n        },\n        {\n            \"elapsed_time\": 1225.4700660705566,\n            \"token_count\": 954\n        },\n        {\n            \"elapsed_time\": 1217.1416282653809,\n            \"token_count\": 955\n        },\n        {\n            \"elapsed_time\": 1224.8599529266357,\n            \"token_count\": 956\n        },\n        {\n            \"elapsed_time\": 1278.2058715820312,\n            \"token_count\": 957\n        },\n        {\n            \"elapsed_time\": 1241.4240837097168,\n            \"token_count\": 958\n        },\n        {\n            \"elapsed_time\": 1257.673978805542,\n            \"token_count\": 959\n        },\n        {\n            \"elapsed_time\": 1245.2747821807861,\n            \"token_count\": 960\n        },\n        {\n            \"elapsed_time\": 1263.962984085083,\n            \"token_count\": 961\n        },\n        {\n            \"elapsed_time\": 1286.0841751098633,\n            \"token_count\": 962\n        },\n        {\n            \"elapsed_time\": 1251.089334487915,\n            \"token_count\": 963\n        },\n        {\n            \"elapsed_time\": 1229.884147644043,\n            \"token_count\": 964\n        },\n        {\n            \"elapsed_time\": 1322.2050666809082,\n            \"token_count\": 965\n        },\n        {\n            \"elapsed_time\": 1275.5608558654785,\n            \"token_count\": 966\n        },\n        {\n            \"elapsed_time\": 1305.8741092681885,\n            \"token_count\": 967\n        },\n        {\n            \"elapsed_time\": 1271.662950515747,\n            \"token_count\": 968\n        },\n        {\n            \"elapsed_time\": 1306.886911392212,\n            \"token_count\": 969\n        },\n        {\n            \"elapsed_time\": 1319.5970058441162,\n            \"token_count\": 970\n        },\n        {\n            \"elapsed_time\": 1190.6020641326904,\n            \"token_count\": 971\n        },\n        {\n            \"elapsed_time\": 1204.8108577728271,\n            \"token_count\": 972\n        },\n        {\n            \"elapsed_time\": 1216.4289951324463,\n            \"token_count\": 973\n        },\n        {\n            \"elapsed_time\": 1184.4539642333984,\n            \"token_count\": 974\n        },\n        {\n            \"elapsed_time\": 1179.732084274292,\n            \"token_count\": 975\n        },\n        {\n            \"elapsed_time\": 1187.7260208129883,\n            \"token_count\": 976\n        },\n        {\n            \"elapsed_time\": 1200.4919052124023,\n            \"token_count\": 977\n        },\n        {\n            \"elapsed_time\": 1189.9049282073975,\n            \"token_count\": 978\n        },\n        {\n            \"elapsed_time\": 1191.3361549377441,\n            \"token_count\": 979\n        },\n        {\n            \"elapsed_time\": 1223.3309745788574,\n            \"token_count\": 980\n        },\n        {\n            \"elapsed_time\": 1244.507074356079,\n            \"token_count\": 981\n        },\n        {\n            \"elapsed_time\": 1194.288730621338,\n            \"token_count\": 982\n        },\n        {\n            \"elapsed_time\": 1202.0208835601807,\n            \"token_count\": 983\n        },\n        {\n            \"elapsed_time\": 1208.789587020874,\n            \"token_count\": 984\n        },\n        {\n            \"elapsed_time\": 1219.3498611450195,\n            \"token_count\": 985\n        },\n        {\n            \"elapsed_time\": 1240.9930229187012,\n            \"token_count\": 986\n        },\n        {\n            \"elapsed_time\": 1211.393117904663,\n            \"token_count\": 987\n        },\n        {\n            \"elapsed_time\": 1233.4747314453125,\n            \"token_count\": 988\n        },\n        {\n            \"elapsed_time\": 1236.0661029815674,\n            \"token_count\": 989\n        },\n        {\n            \"elapsed_time\": 1284.9681377410889,\n            \"token_count\": 990\n        },\n        {\n            \"elapsed_time\": 1242.8689002990723,\n            \"token_count\": 991\n        },\n        {\n            \"elapsed_time\": 1215.0537967681885,\n            \"token_count\": 992\n        },\n        {\n            \"elapsed_time\": 1257.9760551452637,\n            \"token_count\": 993\n        },\n        {\n            \"elapsed_time\": 1216.5498733520508,\n            \"token_count\": 994\n        },\n        {\n            \"elapsed_time\": 1213.7219905853271,\n            \"token_count\": 995\n        },\n        {\n            \"elapsed_time\": 1250.9360313415527,\n            \"token_count\": 996\n        },\n        {\n            \"elapsed_time\": 1261.4572048187256,\n            \"token_count\": 997\n        },\n        {\n            \"elapsed_time\": 1249.9299049377441,\n            \"token_count\": 998\n        },\n        {\n            \"elapsed_time\": 1265.0718688964844,\n            \"token_count\": 999\n        }\n    ],\n    \"max_token_count_per_time\": {\n        \"100\": 78,\n        \"200\": 155,\n        \"300\": 235,\n        \"400\": 335,\n        \"500\": 420,\n        \"600\": 491,\n        \"700\": 555,\n        \"800\": 630,\n        \"900\": 744,\n        \"1000\": 829,\n        \"1100\": 861,\n        \"1200\": 982,\n        \"1300\": 999,\n        \"1400\": 999,\n        \"1500\": 999\n    }\n}"
  },
  {
    "path": "reports/inference_result/qanet-cpu.json",
    "content": "{\n    \"average_raw_to_tensor\": 4.473000343399819,\n    \"average_tensor_to_predict\": 288.2474863167965,\n    \"average_end_to_end\": 292.72048666019634,\n    \"tensor_to_predicts\": [\n        {\n            \"elapsed_time\": 55.062055587768555,\n            \"token_count\": 10\n        },\n        {\n            \"elapsed_time\": 47.39522933959961,\n            \"token_count\": 11\n        },\n        {\n            \"elapsed_time\": 45.30024528503418,\n            \"token_count\": 12\n        },\n        {\n            \"elapsed_time\": 49.443960189819336,\n            \"token_count\": 13\n        },\n        {\n            \"elapsed_time\": 53.22384834289551,\n            \"token_count\": 14\n        },\n        {\n            \"elapsed_time\": 50.269126892089844,\n            \"token_count\": 15\n        },\n        {\n            \"elapsed_time\": 48.4468936920166,\n            \"token_count\": 16\n        },\n        {\n            \"elapsed_time\": 48.007965087890625,\n            \"token_count\": 17\n        },\n        {\n            \"elapsed_time\": 54.67581748962402,\n            \"token_count\": 18\n        },\n        {\n            \"elapsed_time\": 54.72612380981445,\n            \"token_count\": 19\n        },\n        {\n            \"elapsed_time\": 49.44610595703125,\n            \"token_count\": 20\n        },\n        {\n            \"elapsed_time\": 50.19712448120117,\n            \"token_count\": 21\n        },\n        {\n            \"elapsed_time\": 50.90618133544922,\n            \"token_count\": 22\n        },\n        {\n            \"elapsed_time\": 51.69105529785156,\n            \"token_count\": 23\n        },\n        {\n            \"elapsed_time\": 51.33414268493652,\n            \"token_count\": 24\n        },\n        {\n            \"elapsed_time\": 57.901859283447266,\n            \"token_count\": 25\n        },\n        {\n            \"elapsed_time\": 53.57098579406738,\n            \"token_count\": 26\n        },\n        {\n            \"elapsed_time\": 53.86185646057129,\n            \"token_count\": 27\n        },\n        {\n            \"elapsed_time\": 53.77602577209473,\n            \"token_count\": 28\n        },\n        {\n            \"elapsed_time\": 55.60708045959473,\n            \"token_count\": 29\n        },\n        {\n            \"elapsed_time\": 62.99781799316406,\n            \"token_count\": 30\n        },\n        {\n            \"elapsed_time\": 65.87004661560059,\n            \"token_count\": 31\n        },\n        {\n            \"elapsed_time\": 62.61420249938965,\n            \"token_count\": 32\n        },\n        {\n            \"elapsed_time\": 60.440778732299805,\n            \"token_count\": 33\n        },\n        {\n            \"elapsed_time\": 64.48221206665039,\n            \"token_count\": 34\n        },\n        {\n            \"elapsed_time\": 64.99290466308594,\n            \"token_count\": 35\n        },\n        {\n            \"elapsed_time\": 58.7010383605957,\n            \"token_count\": 36\n        },\n        {\n            \"elapsed_time\": 60.5158805847168,\n            \"token_count\": 37\n        },\n        {\n            \"elapsed_time\": 62.348127365112305,\n            \"token_count\": 38\n        },\n        {\n            \"elapsed_time\": 73.24004173278809,\n            \"token_count\": 39\n        },\n        {\n            \"elapsed_time\": 81.1319351196289,\n            \"token_count\": 40\n        },\n        {\n            \"elapsed_time\": 67.34776496887207,\n            \"token_count\": 41\n        },\n        {\n            \"elapsed_time\": 74.97119903564453,\n            \"token_count\": 42\n        },\n        {\n            \"elapsed_time\": 65.0181770324707,\n            \"token_count\": 43\n        },\n        {\n            \"elapsed_time\": 66.66922569274902,\n            \"token_count\": 44\n        },\n        {\n            \"elapsed_time\": 67.18897819519043,\n            \"token_count\": 45\n        },\n        {\n            \"elapsed_time\": 67.96789169311523,\n            \"token_count\": 46\n        },\n        {\n            \"elapsed_time\": 67.64912605285645,\n            \"token_count\": 47\n        },\n        {\n            \"elapsed_time\": 69.34285163879395,\n            \"token_count\": 48\n        },\n        {\n            \"elapsed_time\": 69.1080093383789,\n            \"token_count\": 49\n        },\n        {\n            \"elapsed_time\": 71.76828384399414,\n            \"token_count\": 50\n        },\n        {\n            \"elapsed_time\": 77.92210578918457,\n            \"token_count\": 51\n        },\n        {\n            \"elapsed_time\": 72.60894775390625,\n            \"token_count\": 52\n        },\n        {\n            \"elapsed_time\": 73.33111763000488,\n            \"token_count\": 53\n        },\n        {\n            \"elapsed_time\": 74.80406761169434,\n            \"token_count\": 54\n        },\n        {\n            \"elapsed_time\": 75.00600814819336,\n            \"token_count\": 55\n        },\n        {\n            \"elapsed_time\": 74.03898239135742,\n            \"token_count\": 56\n        },\n        {\n            \"elapsed_time\": 76.53498649597168,\n            \"token_count\": 57\n        },\n        {\n            \"elapsed_time\": 78.89223098754883,\n            \"token_count\": 58\n        },\n        {\n            \"elapsed_time\": 79.6818733215332,\n            \"token_count\": 59\n        },\n        {\n            \"elapsed_time\": 81.88199996948242,\n            \"token_count\": 60\n        },\n        {\n            \"elapsed_time\": 87.59903907775879,\n            \"token_count\": 61\n        },\n        {\n            \"elapsed_time\": 80.70778846740723,\n            \"token_count\": 62\n        },\n        {\n            \"elapsed_time\": 84.13004875183105,\n            \"token_count\": 63\n        },\n        {\n            \"elapsed_time\": 93.40691566467285,\n            \"token_count\": 64\n        },\n        {\n            \"elapsed_time\": 92.47112274169922,\n            \"token_count\": 65\n        },\n        {\n            \"elapsed_time\": 94.68412399291992,\n            \"token_count\": 66\n        },\n        {\n            \"elapsed_time\": 95.54195404052734,\n            \"token_count\": 67\n        },\n        {\n            \"elapsed_time\": 97.12409973144531,\n            \"token_count\": 68\n        },\n        {\n            \"elapsed_time\": 98.97303581237793,\n            \"token_count\": 69\n        },\n        {\n            \"elapsed_time\": 99.7309684753418,\n            \"token_count\": 70\n        },\n        {\n            \"elapsed_time\": 99.81703758239746,\n            \"token_count\": 71\n        },\n        {\n            \"elapsed_time\": 100.67319869995117,\n            \"token_count\": 72\n        },\n        {\n            \"elapsed_time\": 103.1348705291748,\n            \"token_count\": 73\n        },\n        {\n            \"elapsed_time\": 105.5450439453125,\n            \"token_count\": 74\n        },\n        {\n            \"elapsed_time\": 105.84020614624023,\n            \"token_count\": 75\n        },\n        {\n            \"elapsed_time\": 105.37600517272949,\n            \"token_count\": 76\n        },\n        {\n            \"elapsed_time\": 107.0261001586914,\n            \"token_count\": 77\n        },\n        {\n            \"elapsed_time\": 108.76989364624023,\n            \"token_count\": 78\n        },\n        {\n            \"elapsed_time\": 111.3741397857666,\n            \"token_count\": 79\n        },\n        {\n            \"elapsed_time\": 114.97712135314941,\n            \"token_count\": 80\n        },\n        {\n            \"elapsed_time\": 114.5792007446289,\n            \"token_count\": 81\n        },\n        {\n            \"elapsed_time\": 118.77608299255371,\n            \"token_count\": 82\n        },\n        {\n            \"elapsed_time\": 113.48509788513184,\n            \"token_count\": 83\n        },\n        {\n            \"elapsed_time\": 114.4859790802002,\n            \"token_count\": 84\n        },\n        {\n            \"elapsed_time\": 117.53702163696289,\n            \"token_count\": 85\n        },\n        {\n            \"elapsed_time\": 116.38402938842773,\n            \"token_count\": 86\n        },\n        {\n            \"elapsed_time\": 119.8890209197998,\n            \"token_count\": 87\n        },\n        {\n            \"elapsed_time\": 118.94774436950684,\n            \"token_count\": 88\n        },\n        {\n            \"elapsed_time\": 122.1771240234375,\n            \"token_count\": 89\n        },\n        {\n            \"elapsed_time\": 125.07224082946777,\n            \"token_count\": 90\n        },\n        {\n            \"elapsed_time\": 124.17101860046387,\n            \"token_count\": 91\n        },\n        {\n            \"elapsed_time\": 127.5639533996582,\n            \"token_count\": 92\n        },\n        {\n            \"elapsed_time\": 128.3249855041504,\n            \"token_count\": 93\n        },\n        {\n            \"elapsed_time\": 128.11803817749023,\n            \"token_count\": 94\n        },\n        {\n            \"elapsed_time\": 130.85699081420898,\n            \"token_count\": 95\n        },\n        {\n            \"elapsed_time\": 137.15124130249023,\n            \"token_count\": 96\n        },\n        {\n            \"elapsed_time\": 137.1171474456787,\n            \"token_count\": 97\n        },\n        {\n            \"elapsed_time\": 138.80205154418945,\n            \"token_count\": 98\n        },\n        {\n            \"elapsed_time\": 142.43197441101074,\n            \"token_count\": 99\n        },\n        {\n            \"elapsed_time\": 136.27076148986816,\n            \"token_count\": 100\n        },\n        {\n            \"elapsed_time\": 136.8880271911621,\n            \"token_count\": 101\n        },\n        {\n            \"elapsed_time\": 139.00995254516602,\n            \"token_count\": 102\n        },\n        {\n            \"elapsed_time\": 141.57700538635254,\n            \"token_count\": 103\n        },\n        {\n            \"elapsed_time\": 141.88599586486816,\n            \"token_count\": 104\n        },\n        {\n            \"elapsed_time\": 145.1261043548584,\n            \"token_count\": 105\n        },\n        {\n            \"elapsed_time\": 143.6312198638916,\n            \"token_count\": 106\n        },\n        {\n            \"elapsed_time\": 148.15115928649902,\n            \"token_count\": 107\n        },\n        {\n            \"elapsed_time\": 146.67201042175293,\n            \"token_count\": 108\n        },\n        {\n            \"elapsed_time\": 148.63991737365723,\n            \"token_count\": 109\n        },\n        {\n            \"elapsed_time\": 150.4189968109131,\n            \"token_count\": 110\n        },\n        {\n            \"elapsed_time\": 157.3319435119629,\n            \"token_count\": 111\n        },\n        {\n            \"elapsed_time\": 155.68900108337402,\n            \"token_count\": 112\n        },\n        {\n            \"elapsed_time\": 156.26001358032227,\n            \"token_count\": 113\n        },\n        {\n            \"elapsed_time\": 157.07707405090332,\n            \"token_count\": 114\n        },\n        {\n            \"elapsed_time\": 159.0712070465088,\n            \"token_count\": 115\n        },\n        {\n            \"elapsed_time\": 160.63380241394043,\n            \"token_count\": 116\n        },\n        {\n            \"elapsed_time\": 162.75310516357422,\n            \"token_count\": 117\n        },\n        {\n            \"elapsed_time\": 163.82479667663574,\n            \"token_count\": 118\n        },\n        {\n            \"elapsed_time\": 165.4069423675537,\n            \"token_count\": 119\n        },\n        {\n            \"elapsed_time\": 165.14897346496582,\n            \"token_count\": 120\n        },\n        {\n            \"elapsed_time\": 180.32479286193848,\n            \"token_count\": 121\n        },\n        {\n            \"elapsed_time\": 180.51505088806152,\n            \"token_count\": 122\n        },\n        {\n            \"elapsed_time\": 176.131010055542,\n            \"token_count\": 123\n        },\n        {\n            \"elapsed_time\": 179.6121597290039,\n            \"token_count\": 124\n        },\n        {\n            \"elapsed_time\": 183.5489273071289,\n            \"token_count\": 125\n        },\n        {\n            \"elapsed_time\": 257.2641372680664,\n            \"token_count\": 126\n        },\n        {\n            \"elapsed_time\": 177.4439811706543,\n            \"token_count\": 127\n        },\n        {\n            \"elapsed_time\": 178.67207527160645,\n            \"token_count\": 128\n        },\n        {\n            \"elapsed_time\": 180.65834045410156,\n            \"token_count\": 129\n        },\n        {\n            \"elapsed_time\": 187.43276596069336,\n            \"token_count\": 130\n        },\n        {\n            \"elapsed_time\": 185.91022491455078,\n            \"token_count\": 131\n        },\n        {\n            \"elapsed_time\": 185.11104583740234,\n            \"token_count\": 132\n        },\n        {\n            \"elapsed_time\": 188.8582706451416,\n            \"token_count\": 133\n        },\n        {\n            \"elapsed_time\": 191.4539337158203,\n            \"token_count\": 134\n        },\n        {\n            \"elapsed_time\": 190.59181213378906,\n            \"token_count\": 135\n        },\n        {\n            \"elapsed_time\": 191.46966934204102,\n            \"token_count\": 136\n        },\n        {\n            \"elapsed_time\": 193.7851905822754,\n            \"token_count\": 137\n        },\n        {\n            \"elapsed_time\": 201.46799087524414,\n            \"token_count\": 138\n        },\n        {\n            \"elapsed_time\": 197.57699966430664,\n            \"token_count\": 139\n        },\n        {\n            \"elapsed_time\": 198.95219802856445,\n            \"token_count\": 140\n        },\n        {\n            \"elapsed_time\": 203.3400535583496,\n            \"token_count\": 141\n        },\n        {\n            \"elapsed_time\": 224.6251106262207,\n            \"token_count\": 142\n        },\n        {\n            \"elapsed_time\": 223.5720157623291,\n            \"token_count\": 143\n        },\n        {\n            \"elapsed_time\": 300.95887184143066,\n            \"token_count\": 144\n        },\n        {\n            \"elapsed_time\": 228.7452220916748,\n            \"token_count\": 145\n        },\n        {\n            \"elapsed_time\": 218.47224235534668,\n            \"token_count\": 146\n        },\n        {\n            \"elapsed_time\": 215.18421173095703,\n            \"token_count\": 147\n        },\n        {\n            \"elapsed_time\": 220.45111656188965,\n            \"token_count\": 148\n        },\n        {\n            \"elapsed_time\": 221.13418579101562,\n            \"token_count\": 149\n        },\n        {\n            \"elapsed_time\": 215.20209312438965,\n            \"token_count\": 150\n        },\n        {\n            \"elapsed_time\": 227.39005088806152,\n            \"token_count\": 151\n        },\n        {\n            \"elapsed_time\": 217.89813041687012,\n            \"token_count\": 152\n        },\n        {\n            \"elapsed_time\": 240.37671089172363,\n            \"token_count\": 153\n        },\n        {\n            \"elapsed_time\": 224.69592094421387,\n            \"token_count\": 154\n        },\n        {\n            \"elapsed_time\": 227.98967361450195,\n            \"token_count\": 155\n        },\n        {\n            \"elapsed_time\": 231.3079833984375,\n            \"token_count\": 156\n        },\n        {\n            \"elapsed_time\": 230.90410232543945,\n            \"token_count\": 157\n        },\n        {\n            \"elapsed_time\": 232.53393173217773,\n            \"token_count\": 158\n        },\n        {\n            \"elapsed_time\": 235.5191707611084,\n            \"token_count\": 159\n        },\n        {\n            \"elapsed_time\": 235.12506484985352,\n            \"token_count\": 160\n        },\n        {\n            \"elapsed_time\": 244.14324760437012,\n            \"token_count\": 161\n        },\n        {\n            \"elapsed_time\": 294.5101261138916,\n            \"token_count\": 162\n        },\n        {\n            \"elapsed_time\": 244.38190460205078,\n            \"token_count\": 163\n        },\n        {\n            \"elapsed_time\": 250.75101852416992,\n            \"token_count\": 164\n        },\n        {\n            \"elapsed_time\": 250.74100494384766,\n            \"token_count\": 165\n        },\n        {\n            \"elapsed_time\": 258.1980228424072,\n            \"token_count\": 166\n        },\n        {\n            \"elapsed_time\": 261.72685623168945,\n            \"token_count\": 167\n        },\n        {\n            \"elapsed_time\": 262.62402534484863,\n            \"token_count\": 168\n        },\n        {\n            \"elapsed_time\": 265.26880264282227,\n            \"token_count\": 169\n        },\n        {\n            \"elapsed_time\": 317.85106658935547,\n            \"token_count\": 170\n        },\n        {\n            \"elapsed_time\": 276.0648727416992,\n            \"token_count\": 171\n        },\n        {\n            \"elapsed_time\": 261.1210346221924,\n            \"token_count\": 172\n        },\n        {\n            \"elapsed_time\": 276.3221263885498,\n            \"token_count\": 173\n        },\n        {\n            \"elapsed_time\": 292.6907539367676,\n            \"token_count\": 174\n        },\n        {\n            \"elapsed_time\": 270.89595794677734,\n            \"token_count\": 175\n        },\n        {\n            \"elapsed_time\": 276.6141891479492,\n            \"token_count\": 176\n        },\n        {\n            \"elapsed_time\": 311.65409088134766,\n            \"token_count\": 177\n        },\n        {\n            \"elapsed_time\": 278.92303466796875,\n            \"token_count\": 178\n        },\n        {\n            \"elapsed_time\": 288.0749702453613,\n            \"token_count\": 179\n        },\n        {\n            \"elapsed_time\": 286.6790294647217,\n            \"token_count\": 180\n        },\n        {\n            \"elapsed_time\": 287.08481788635254,\n            \"token_count\": 181\n        },\n        {\n            \"elapsed_time\": 284.1620445251465,\n            \"token_count\": 182\n        },\n        {\n            \"elapsed_time\": 289.7059917449951,\n            \"token_count\": 183\n        },\n        {\n            \"elapsed_time\": 395.5528736114502,\n            \"token_count\": 184\n        },\n        {\n            \"elapsed_time\": 289.46995735168457,\n            \"token_count\": 185\n        },\n        {\n            \"elapsed_time\": 293.7150001525879,\n            \"token_count\": 186\n        },\n        {\n            \"elapsed_time\": 304.32605743408203,\n            \"token_count\": 187\n        },\n        {\n            \"elapsed_time\": 308.7160587310791,\n            \"token_count\": 188\n        },\n        {\n            \"elapsed_time\": 319.80013847351074,\n            \"token_count\": 189\n        },\n        {\n            \"elapsed_time\": 371.9768524169922,\n            \"token_count\": 190\n        },\n        {\n            \"elapsed_time\": 308.8412284851074,\n            \"token_count\": 191\n        },\n        {\n            \"elapsed_time\": 305.3109645843506,\n            \"token_count\": 192\n        },\n        {\n            \"elapsed_time\": 313.77315521240234,\n            \"token_count\": 193\n        },\n        {\n            \"elapsed_time\": 311.65385246276855,\n            \"token_count\": 194\n        },\n        {\n            \"elapsed_time\": 315.809965133667,\n            \"token_count\": 195\n        },\n        {\n            \"elapsed_time\": 328.16100120544434,\n            \"token_count\": 196\n        },\n        {\n            \"elapsed_time\": 341.49980545043945,\n            \"token_count\": 197\n        },\n        {\n            \"elapsed_time\": 321.5939998626709,\n            \"token_count\": 198\n        },\n        {\n            \"elapsed_time\": 330.7080268859863,\n            \"token_count\": 199\n        },\n        {\n            \"elapsed_time\": 333.30678939819336,\n            \"token_count\": 200\n        },\n        {\n            \"elapsed_time\": 329.3938636779785,\n            \"token_count\": 201\n        },\n        {\n            \"elapsed_time\": 347.00608253479004,\n            \"token_count\": 202\n        },\n        {\n            \"elapsed_time\": 451.88117027282715,\n            \"token_count\": 203\n        },\n        {\n            \"elapsed_time\": 338.03391456604004,\n            \"token_count\": 204\n        },\n        {\n            \"elapsed_time\": 346.75097465515137,\n            \"token_count\": 205\n        },\n        {\n            \"elapsed_time\": 343.9030647277832,\n            \"token_count\": 206\n        },\n        {\n            \"elapsed_time\": 345.61800956726074,\n            \"token_count\": 207\n        },\n        {\n            \"elapsed_time\": 379.5909881591797,\n            \"token_count\": 208\n        },\n        {\n            \"elapsed_time\": 360.50891876220703,\n            \"token_count\": 209\n        },\n        {\n            \"elapsed_time\": 351.9749641418457,\n            \"token_count\": 210\n        },\n        {\n            \"elapsed_time\": 356.98723793029785,\n            \"token_count\": 211\n        },\n        {\n            \"elapsed_time\": 357.4092388153076,\n            \"token_count\": 212\n        },\n        {\n            \"elapsed_time\": 366.09578132629395,\n            \"token_count\": 213\n        },\n        {\n            \"elapsed_time\": 380.6729316711426,\n            \"token_count\": 214\n        },\n        {\n            \"elapsed_time\": 369.69995498657227,\n            \"token_count\": 215\n        },\n        {\n            \"elapsed_time\": 373.8381862640381,\n            \"token_count\": 216\n        },\n        {\n            \"elapsed_time\": 370.1620101928711,\n            \"token_count\": 217\n        },\n        {\n            \"elapsed_time\": 374.9868869781494,\n            \"token_count\": 218\n        },\n        {\n            \"elapsed_time\": 385.1027488708496,\n            \"token_count\": 219\n        },\n        {\n            \"elapsed_time\": 392.5309181213379,\n            \"token_count\": 220\n        },\n        {\n            \"elapsed_time\": 414.5240783691406,\n            \"token_count\": 221\n        },\n        {\n            \"elapsed_time\": 412.6248359680176,\n            \"token_count\": 222\n        },\n        {\n            \"elapsed_time\": 426.8360137939453,\n            \"token_count\": 223\n        },\n        {\n            \"elapsed_time\": 406.47125244140625,\n            \"token_count\": 224\n        },\n        {\n            \"elapsed_time\": 430.7851791381836,\n            \"token_count\": 225\n        },\n        {\n            \"elapsed_time\": 422.7719306945801,\n            \"token_count\": 226\n        },\n        {\n            \"elapsed_time\": 420.18580436706543,\n            \"token_count\": 227\n        },\n        {\n            \"elapsed_time\": 441.85328483581543,\n            \"token_count\": 228\n        },\n        {\n            \"elapsed_time\": 501.4500617980957,\n            \"token_count\": 229\n        },\n        {\n            \"elapsed_time\": 436.5861415863037,\n            \"token_count\": 230\n        },\n        {\n            \"elapsed_time\": 439.24403190612793,\n            \"token_count\": 231\n        },\n        {\n            \"elapsed_time\": 429.5618534088135,\n            \"token_count\": 232\n        },\n        {\n            \"elapsed_time\": 441.49017333984375,\n            \"token_count\": 233\n        },\n        {\n            \"elapsed_time\": 446.97070121765137,\n            \"token_count\": 234\n        },\n        {\n            \"elapsed_time\": 454.7269344329834,\n            \"token_count\": 235\n        },\n        {\n            \"elapsed_time\": 484.04693603515625,\n            \"token_count\": 236\n        },\n        {\n            \"elapsed_time\": 467.17166900634766,\n            \"token_count\": 237\n        },\n        {\n            \"elapsed_time\": 466.3407802581787,\n            \"token_count\": 238\n        },\n        {\n            \"elapsed_time\": 464.4937515258789,\n            \"token_count\": 239\n        },\n        {\n            \"elapsed_time\": 462.5508785247803,\n            \"token_count\": 240\n        },\n        {\n            \"elapsed_time\": 460.11996269226074,\n            \"token_count\": 241\n        },\n        {\n            \"elapsed_time\": 452.1148204803467,\n            \"token_count\": 242\n        },\n        {\n            \"elapsed_time\": 459.5298767089844,\n            \"token_count\": 243\n        },\n        {\n            \"elapsed_time\": 473.2780456542969,\n            \"token_count\": 244\n        },\n        {\n            \"elapsed_time\": 469.79308128356934,\n            \"token_count\": 245\n        },\n        {\n            \"elapsed_time\": 461.69590950012207,\n            \"token_count\": 246\n        },\n        {\n            \"elapsed_time\": 494.9300289154053,\n            \"token_count\": 247\n        },\n        {\n            \"elapsed_time\": 480.6993007659912,\n            \"token_count\": 248\n        },\n        {\n            \"elapsed_time\": 485.24999618530273,\n            \"token_count\": 249\n        },\n        {\n            \"elapsed_time\": 520.6639766693115,\n            \"token_count\": 250\n        },\n        {\n            \"elapsed_time\": 530.0159454345703,\n            \"token_count\": 251\n        },\n        {\n            \"elapsed_time\": 496.7031478881836,\n            \"token_count\": 252\n        },\n        {\n            \"elapsed_time\": 516.455888748169,\n            \"token_count\": 253\n        },\n        {\n            \"elapsed_time\": 535.3689193725586,\n            \"token_count\": 254\n        },\n        {\n            \"elapsed_time\": 570.6892013549805,\n            \"token_count\": 255\n        },\n        {\n            \"elapsed_time\": 576.5459537506104,\n            \"token_count\": 256\n        },\n        {\n            \"elapsed_time\": 561.7289543151855,\n            \"token_count\": 257\n        },\n        {\n            \"elapsed_time\": 561.5148544311523,\n            \"token_count\": 258\n        },\n        {\n            \"elapsed_time\": 564.79811668396,\n            \"token_count\": 259\n        },\n        {\n            \"elapsed_time\": 568.8509941101074,\n            \"token_count\": 260\n        },\n        {\n            \"elapsed_time\": 553.2877445220947,\n            \"token_count\": 261\n        },\n        {\n            \"elapsed_time\": 593.4939384460449,\n            \"token_count\": 262\n        },\n        {\n            \"elapsed_time\": 553.2639026641846,\n            \"token_count\": 263\n        },\n        {\n            \"elapsed_time\": 562.5877380371094,\n            \"token_count\": 264\n        },\n        {\n            \"elapsed_time\": 585.3509902954102,\n            \"token_count\": 265\n        },\n        {\n            \"elapsed_time\": 588.3030891418457,\n            \"token_count\": 266\n        },\n        {\n            \"elapsed_time\": 592.9570198059082,\n            \"token_count\": 267\n        },\n        {\n            \"elapsed_time\": 595.862865447998,\n            \"token_count\": 268\n        },\n        {\n            \"elapsed_time\": 660.520076751709,\n            \"token_count\": 269\n        },\n        {\n            \"elapsed_time\": 598.5348224639893,\n            \"token_count\": 270\n        },\n        {\n            \"elapsed_time\": 596.0509777069092,\n            \"token_count\": 271\n        },\n        {\n            \"elapsed_time\": 590.155839920044,\n            \"token_count\": 272\n        },\n        {\n            \"elapsed_time\": 599.8470783233643,\n            \"token_count\": 273\n        },\n        {\n            \"elapsed_time\": 615.5831813812256,\n            \"token_count\": 274\n        },\n        {\n            \"elapsed_time\": 609.9987030029297,\n            \"token_count\": 275\n        },\n        {\n            \"elapsed_time\": 599.606990814209,\n            \"token_count\": 276\n        },\n        {\n            \"elapsed_time\": 618.9801692962646,\n            \"token_count\": 277\n        },\n        {\n            \"elapsed_time\": 619.2541122436523,\n            \"token_count\": 278\n        },\n        {\n            \"elapsed_time\": 626.0509490966797,\n            \"token_count\": 279\n        },\n        {\n            \"elapsed_time\": 627.6149749755859,\n            \"token_count\": 280\n        },\n        {\n            \"elapsed_time\": 619.0118789672852,\n            \"token_count\": 281\n        },\n        {\n            \"elapsed_time\": 645.4310417175293,\n            \"token_count\": 282\n        },\n        {\n            \"elapsed_time\": 640.023946762085,\n            \"token_count\": 283\n        },\n        {\n            \"elapsed_time\": 637.0580196380615,\n            \"token_count\": 284\n        },\n        {\n            \"elapsed_time\": 660.8457565307617,\n            \"token_count\": 285\n        },\n        {\n            \"elapsed_time\": 630.8290958404541,\n            \"token_count\": 286\n        },\n        {\n            \"elapsed_time\": 650.3238677978516,\n            \"token_count\": 287\n        },\n        {\n            \"elapsed_time\": 627.3548603057861,\n            \"token_count\": 288\n        },\n        {\n            \"elapsed_time\": 679.5840263366699,\n            \"token_count\": 289\n        },\n        {\n            \"elapsed_time\": 659.1899394989014,\n            \"token_count\": 290\n        },\n        {\n            \"elapsed_time\": 661.2207889556885,\n            \"token_count\": 291\n        },\n        {\n            \"elapsed_time\": 668.0889129638672,\n            \"token_count\": 292\n        },\n        {\n            \"elapsed_time\": 659.8389148712158,\n            \"token_count\": 293\n        },\n        {\n            \"elapsed_time\": 668.0130958557129,\n            \"token_count\": 294\n        },\n        {\n            \"elapsed_time\": 657.4878692626953,\n            \"token_count\": 295\n        },\n        {\n            \"elapsed_time\": 682.366132736206,\n            \"token_count\": 296\n        },\n        {\n            \"elapsed_time\": 671.1418628692627,\n            \"token_count\": 297\n        },\n        {\n            \"elapsed_time\": 675.9459972381592,\n            \"token_count\": 298\n        },\n        {\n            \"elapsed_time\": 683.7213039398193,\n            \"token_count\": 299\n        },\n        {\n            \"elapsed_time\": 706.0728073120117,\n            \"token_count\": 300\n        },\n        {\n            \"elapsed_time\": 701.740026473999,\n            \"token_count\": 301\n        },\n        {\n            \"elapsed_time\": 685.5213642120361,\n            \"token_count\": 302\n        },\n        {\n            \"elapsed_time\": 709.2888355255127,\n            \"token_count\": 303\n        },\n        {\n            \"elapsed_time\": 701.0719776153564,\n            \"token_count\": 304\n        },\n        {\n            \"elapsed_time\": 701.3440132141113,\n            \"token_count\": 305\n        },\n        {\n            \"elapsed_time\": 716.8080806732178,\n            \"token_count\": 306\n        },\n        {\n            \"elapsed_time\": 716.8710231781006,\n            \"token_count\": 307\n        },\n        {\n            \"elapsed_time\": 710.561990737915,\n            \"token_count\": 308\n        },\n        {\n            \"elapsed_time\": 698.5089778900146,\n            \"token_count\": 309\n        },\n        {\n            \"elapsed_time\": 718.2919979095459,\n            \"token_count\": 310\n        },\n        {\n            \"elapsed_time\": 709.306001663208,\n            \"token_count\": 311\n        },\n        {\n            \"elapsed_time\": 718.2950973510742,\n            \"token_count\": 312\n        },\n        {\n            \"elapsed_time\": 725.9209156036377,\n            \"token_count\": 313\n        },\n        {\n            \"elapsed_time\": 728.6982536315918,\n            \"token_count\": 314\n        },\n        {\n            \"elapsed_time\": 734.9491119384766,\n            \"token_count\": 315\n        },\n        {\n            \"elapsed_time\": 724.6959209442139,\n            \"token_count\": 316\n        },\n        {\n            \"elapsed_time\": 749.2809295654297,\n            \"token_count\": 317\n        },\n        {\n            \"elapsed_time\": 743.2272434234619,\n            \"token_count\": 318\n        },\n        {\n            \"elapsed_time\": 740.74387550354,\n            \"token_count\": 319\n        },\n        {\n            \"elapsed_time\": 732.2258949279785,\n            \"token_count\": 320\n        },\n        {\n            \"elapsed_time\": 747.3270893096924,\n            \"token_count\": 321\n        },\n        {\n            \"elapsed_time\": 748.6340999603271,\n            \"token_count\": 322\n        },\n        {\n            \"elapsed_time\": 771.1091041564941,\n            \"token_count\": 323\n        },\n        {\n            \"elapsed_time\": 774.3332386016846,\n            \"token_count\": 324\n        },\n        {\n            \"elapsed_time\": 800.0829219818115,\n            \"token_count\": 325\n        },\n        {\n            \"elapsed_time\": 791.1818027496338,\n            \"token_count\": 326\n        },\n        {\n            \"elapsed_time\": 767.4610614776611,\n            \"token_count\": 327\n        },\n        {\n            \"elapsed_time\": 800.2538681030273,\n            \"token_count\": 328\n        },\n        {\n            \"elapsed_time\": 789.700984954834,\n            \"token_count\": 329\n        },\n        {\n            \"elapsed_time\": 831.8881988525391,\n            \"token_count\": 330\n        },\n        {\n            \"elapsed_time\": 786.2792015075684,\n            \"token_count\": 331\n        },\n        {\n            \"elapsed_time\": 793.8086986541748,\n            \"token_count\": 332\n        },\n        {\n            \"elapsed_time\": 810.5988502502441,\n            \"token_count\": 333\n        },\n        {\n            \"elapsed_time\": 798.3238697052002,\n            \"token_count\": 334\n        },\n        {\n            \"elapsed_time\": 796.8943119049072,\n            \"token_count\": 335\n        },\n        {\n            \"elapsed_time\": 806.6802024841309,\n            \"token_count\": 336\n        },\n        {\n            \"elapsed_time\": 816.1449432373047,\n            \"token_count\": 337\n        },\n        {\n            \"elapsed_time\": 814.2890930175781,\n            \"token_count\": 338\n        },\n        {\n            \"elapsed_time\": 838.0098342895508,\n            \"token_count\": 339\n        },\n        {\n            \"elapsed_time\": 857.1949005126953,\n            \"token_count\": 340\n        },\n        {\n            \"elapsed_time\": 833.9781761169434,\n            \"token_count\": 341\n        },\n        {\n            \"elapsed_time\": 835.1960182189941,\n            \"token_count\": 342\n        },\n        {\n            \"elapsed_time\": 838.07373046875,\n            \"token_count\": 343\n        },\n        {\n            \"elapsed_time\": 837.3382091522217,\n            \"token_count\": 344\n        },\n        {\n            \"elapsed_time\": 851.7599105834961,\n            \"token_count\": 345\n        },\n        {\n            \"elapsed_time\": 862.6139163970947,\n            \"token_count\": 346\n        },\n        {\n            \"elapsed_time\": 854.9811840057373,\n            \"token_count\": 347\n        },\n        {\n            \"elapsed_time\": 836.2128734588623,\n            \"token_count\": 348\n        },\n        {\n            \"elapsed_time\": 878.1459331512451,\n            \"token_count\": 349\n        },\n        {\n            \"elapsed_time\": 848.4652042388916,\n            \"token_count\": 350\n        },\n        {\n            \"elapsed_time\": 861.5922927856445,\n            \"token_count\": 351\n        },\n        {\n            \"elapsed_time\": 895.1332569122314,\n            \"token_count\": 352\n        },\n        {\n            \"elapsed_time\": 868.5016632080078,\n            \"token_count\": 353\n        },\n        {\n            \"elapsed_time\": 876.3399124145508,\n            \"token_count\": 354\n        },\n        {\n            \"elapsed_time\": 881.5140724182129,\n            \"token_count\": 355\n        },\n        {\n            \"elapsed_time\": 885.3049278259277,\n            \"token_count\": 356\n        },\n        {\n            \"elapsed_time\": 888.6220455169678,\n            \"token_count\": 357\n        },\n        {\n            \"elapsed_time\": 880.9411525726318,\n            \"token_count\": 358\n        },\n        {\n            \"elapsed_time\": 895.7779407501221,\n            \"token_count\": 359\n        },\n        {\n            \"elapsed_time\": 904.1779041290283,\n            \"token_count\": 360\n        },\n        {\n            \"elapsed_time\": 905.9996604919434,\n            \"token_count\": 361\n        },\n        {\n            \"elapsed_time\": 901.9708633422852,\n            \"token_count\": 362\n        },\n        {\n            \"elapsed_time\": 931.8850040435791,\n            \"token_count\": 363\n        },\n        {\n            \"elapsed_time\": 957.9288959503174,\n            \"token_count\": 364\n        },\n        {\n            \"elapsed_time\": 926.5198707580566,\n            \"token_count\": 365\n        },\n        {\n            \"elapsed_time\": 934.1239929199219,\n            \"token_count\": 366\n        },\n        {\n            \"elapsed_time\": 907.2451591491699,\n            \"token_count\": 367\n        },\n        {\n            \"elapsed_time\": 929.6219348907471,\n            \"token_count\": 368\n        },\n        {\n            \"elapsed_time\": 931.9150447845459,\n            \"token_count\": 369\n        },\n        {\n            \"elapsed_time\": 930.1309585571289,\n            \"token_count\": 370\n        },\n        {\n            \"elapsed_time\": 940.8419132232666,\n            \"token_count\": 371\n        },\n        {\n            \"elapsed_time\": 962.4912738800049,\n            \"token_count\": 372\n        },\n        {\n            \"elapsed_time\": 951.9827365875244,\n            \"token_count\": 373\n        },\n        {\n            \"elapsed_time\": 975.9402275085449,\n            \"token_count\": 374\n        },\n        {\n            \"elapsed_time\": 947.0551013946533,\n            \"token_count\": 375\n        },\n        {\n            \"elapsed_time\": 968.8420295715332,\n            \"token_count\": 376\n        },\n        {\n            \"elapsed_time\": 987.1189594268799,\n            \"token_count\": 377\n        },\n        {\n            \"elapsed_time\": 987.825870513916,\n            \"token_count\": 378\n        },\n        {\n            \"elapsed_time\": 975.7990837097168,\n            \"token_count\": 379\n        },\n        {\n            \"elapsed_time\": 970.8831310272217,\n            \"token_count\": 380\n        },\n        {\n            \"elapsed_time\": 983.3378791809082,\n            \"token_count\": 381\n        },\n        {\n            \"elapsed_time\": 993.5328960418701,\n            \"token_count\": 382\n        },\n        {\n            \"elapsed_time\": 1007.2898864746094,\n            \"token_count\": 383\n        },\n        {\n            \"elapsed_time\": 984.3730926513672,\n            \"token_count\": 384\n        },\n        {\n            \"elapsed_time\": 1024.087905883789,\n            \"token_count\": 385\n        },\n        {\n            \"elapsed_time\": 1021.9128131866455,\n            \"token_count\": 386\n        },\n        {\n            \"elapsed_time\": 1013.6210918426514,\n            \"token_count\": 387\n        },\n        {\n            \"elapsed_time\": 1008.0199241638184,\n            \"token_count\": 388\n        },\n        {\n            \"elapsed_time\": 1030.1949977874756,\n            \"token_count\": 389\n        },\n        {\n            \"elapsed_time\": 1033.4501266479492,\n            \"token_count\": 390\n        },\n        {\n            \"elapsed_time\": 1033.463954925537,\n            \"token_count\": 391\n        },\n        {\n            \"elapsed_time\": 1014.603853225708,\n            \"token_count\": 392\n        },\n        {\n            \"elapsed_time\": 1022.3391056060791,\n            \"token_count\": 393\n        },\n        {\n            \"elapsed_time\": 1028.2039642333984,\n            \"token_count\": 394\n        },\n        {\n            \"elapsed_time\": 1091.2058353424072,\n            \"token_count\": 395\n        },\n        {\n            \"elapsed_time\": 1070.9569454193115,\n            \"token_count\": 396\n        },\n        {\n            \"elapsed_time\": 1037.696123123169,\n            \"token_count\": 397\n        },\n        {\n            \"elapsed_time\": 1035.9861850738525,\n            \"token_count\": 398\n        },\n        {\n            \"elapsed_time\": 1047.9118824005127,\n            \"token_count\": 399\n        },\n        {\n            \"elapsed_time\": 1086.932897567749,\n            \"token_count\": 400\n        },\n        {\n            \"elapsed_time\": 1134.5102787017822,\n            \"token_count\": 401\n        },\n        {\n            \"elapsed_time\": 1174.5598316192627,\n            \"token_count\": 402\n        },\n        {\n            \"elapsed_time\": 1095.1387882232666,\n            \"token_count\": 403\n        },\n        {\n            \"elapsed_time\": 1107.680082321167,\n            \"token_count\": 404\n        },\n        {\n            \"elapsed_time\": 1080.6970596313477,\n            \"token_count\": 405\n        },\n        {\n            \"elapsed_time\": 1071.8271732330322,\n            \"token_count\": 406\n        },\n        {\n            \"elapsed_time\": 1092.6196575164795,\n            \"token_count\": 407\n        },\n        {\n            \"elapsed_time\": 1081.3350677490234,\n            \"token_count\": 408\n        },\n        {\n            \"elapsed_time\": 1098.7889766693115,\n            \"token_count\": 409\n        },\n        {\n            \"elapsed_time\": 1092.0178890228271,\n            \"token_count\": 410\n        },\n        {\n            \"elapsed_time\": 1103.9669513702393,\n            \"token_count\": 411\n        },\n        {\n            \"elapsed_time\": 1115.328073501587,\n            \"token_count\": 412\n        },\n        {\n            \"elapsed_time\": 1148.010015487671,\n            \"token_count\": 413\n        },\n        {\n            \"elapsed_time\": 1106.6868305206299,\n            \"token_count\": 414\n        },\n        {\n            \"elapsed_time\": 1179.4452667236328,\n            \"token_count\": 415\n        },\n        {\n            \"elapsed_time\": 1122.5628852844238,\n            \"token_count\": 416\n        },\n        {\n            \"elapsed_time\": 1126.3039112091064,\n            \"token_count\": 417\n        },\n        {\n            \"elapsed_time\": 1147.0317840576172,\n            \"token_count\": 418\n        },\n        {\n            \"elapsed_time\": 1134.335994720459,\n            \"token_count\": 419\n        },\n        {\n            \"elapsed_time\": 1165.2190685272217,\n            \"token_count\": 420\n        },\n        {\n            \"elapsed_time\": 1155.7650566101074,\n            \"token_count\": 421\n        },\n        {\n            \"elapsed_time\": 1191.2481784820557,\n            \"token_count\": 422\n        },\n        {\n            \"elapsed_time\": 1172.7440357208252,\n            \"token_count\": 423\n        },\n        {\n            \"elapsed_time\": 1125.0512599945068,\n            \"token_count\": 424\n        },\n        {\n            \"elapsed_time\": 1149.794101715088,\n            \"token_count\": 425\n        },\n        {\n            \"elapsed_time\": 1126.8959045410156,\n            \"token_count\": 426\n        },\n        {\n            \"elapsed_time\": 1127.2268295288086,\n            \"token_count\": 427\n        },\n        {\n            \"elapsed_time\": 1130.3367614746094,\n            \"token_count\": 428\n        },\n        {\n            \"elapsed_time\": 1160.2697372436523,\n            \"token_count\": 429\n        },\n        {\n            \"elapsed_time\": 1156.4621925354004,\n            \"token_count\": 430\n        },\n        {\n            \"elapsed_time\": 1167.252779006958,\n            \"token_count\": 431\n        },\n        {\n            \"elapsed_time\": 1140.7279968261719,\n            \"token_count\": 432\n        },\n        {\n            \"elapsed_time\": 1174.4790077209473,\n            \"token_count\": 433\n        },\n        {\n            \"elapsed_time\": 1152.867078781128,\n            \"token_count\": 434\n        },\n        {\n            \"elapsed_time\": 1159.2891216278076,\n            \"token_count\": 435\n        },\n        {\n            \"elapsed_time\": 1162.2331142425537,\n            \"token_count\": 436\n        },\n        {\n            \"elapsed_time\": 1187.4489784240723,\n            \"token_count\": 437\n        },\n        {\n            \"elapsed_time\": 1186.1419677734375,\n            \"token_count\": 438\n        },\n        {\n            \"elapsed_time\": 1209.9151611328125,\n            \"token_count\": 439\n        },\n        {\n            \"elapsed_time\": 1229.6240329742432,\n            \"token_count\": 440\n        },\n        {\n            \"elapsed_time\": 1230.764627456665,\n            \"token_count\": 441\n        },\n        {\n            \"elapsed_time\": 1254.1100978851318,\n            \"token_count\": 442\n        },\n        {\n            \"elapsed_time\": 1204.930067062378,\n            \"token_count\": 443\n        },\n        {\n            \"elapsed_time\": 1219.7070121765137,\n            \"token_count\": 444\n        },\n        {\n            \"elapsed_time\": 1234.1461181640625,\n            \"token_count\": 445\n        },\n        {\n            \"elapsed_time\": 1204.906940460205,\n            \"token_count\": 446\n        },\n        {\n            \"elapsed_time\": 1228.996992111206,\n            \"token_count\": 447\n        },\n        {\n            \"elapsed_time\": 1295.4521179199219,\n            \"token_count\": 448\n        },\n        {\n            \"elapsed_time\": 1348.1459617614746,\n            \"token_count\": 449\n        },\n        {\n            \"elapsed_time\": 1275.0210762023926,\n            \"token_count\": 450\n        },\n        {\n            \"elapsed_time\": 1267.6169872283936,\n            \"token_count\": 451\n        },\n        {\n            \"elapsed_time\": 1260.3521347045898,\n            \"token_count\": 452\n        },\n        {\n            \"elapsed_time\": 1309.9231719970703,\n            \"token_count\": 453\n        },\n        {\n            \"elapsed_time\": 1295.098066329956,\n            \"token_count\": 454\n        },\n        {\n            \"elapsed_time\": 1289.7379398345947,\n            \"token_count\": 455\n        },\n        {\n            \"elapsed_time\": 1331.507921218872,\n            \"token_count\": 456\n        },\n        {\n            \"elapsed_time\": 1290.6358242034912,\n            \"token_count\": 457\n        },\n        {\n            \"elapsed_time\": 1252.7201175689697,\n            \"token_count\": 458\n        },\n        {\n            \"elapsed_time\": 1316.3022994995117,\n            \"token_count\": 459\n        },\n        {\n            \"elapsed_time\": 1258.8050365447998,\n            \"token_count\": 460\n        },\n        {\n            \"elapsed_time\": 1263.2899284362793,\n            \"token_count\": 461\n        },\n        {\n            \"elapsed_time\": 1264.9197578430176,\n            \"token_count\": 462\n        },\n        {\n            \"elapsed_time\": 1275.2928733825684,\n            \"token_count\": 463\n        },\n        {\n            \"elapsed_time\": 1301.7358779907227,\n            \"token_count\": 464\n        },\n        {\n            \"elapsed_time\": 1285.0627899169922,\n            \"token_count\": 465\n        },\n        {\n            \"elapsed_time\": 1287.6639366149902,\n            \"token_count\": 466\n        },\n        {\n            \"elapsed_time\": 1305.1869869232178,\n            \"token_count\": 467\n        },\n        {\n            \"elapsed_time\": 1323.3981132507324,\n            \"token_count\": 468\n        },\n        {\n            \"elapsed_time\": 1342.5891399383545,\n            \"token_count\": 469\n        },\n        {\n            \"elapsed_time\": 1300.9309768676758,\n            \"token_count\": 470\n        },\n        {\n            \"elapsed_time\": 1333.5871696472168,\n            \"token_count\": 471\n        },\n        {\n            \"elapsed_time\": 1321.0220336914062,\n            \"token_count\": 472\n        },\n        {\n            \"elapsed_time\": 1334.9671363830566,\n            \"token_count\": 473\n        },\n        {\n            \"elapsed_time\": 1349.3397235870361,\n            \"token_count\": 474\n        },\n        {\n            \"elapsed_time\": 1335.6122970581055,\n            \"token_count\": 475\n        },\n        {\n            \"elapsed_time\": 1325.2122402191162,\n            \"token_count\": 476\n        },\n        {\n            \"elapsed_time\": 1360.4190349578857,\n            \"token_count\": 477\n        },\n        {\n            \"elapsed_time\": 1384.0408325195312,\n            \"token_count\": 478\n        },\n        {\n            \"elapsed_time\": 1373.9428520202637,\n            \"token_count\": 479\n        },\n        {\n            \"elapsed_time\": 1354.4118404388428,\n            \"token_count\": 480\n        },\n        {\n            \"elapsed_time\": 1366.821050643921,\n            \"token_count\": 481\n        },\n        {\n            \"elapsed_time\": 1363.2912635803223,\n            \"token_count\": 482\n        },\n        {\n            \"elapsed_time\": 1422.6531982421875,\n            \"token_count\": 483\n        },\n        {\n            \"elapsed_time\": 1366.6198253631592,\n            \"token_count\": 484\n        },\n        {\n            \"elapsed_time\": 1364.2160892486572,\n            \"token_count\": 485\n        },\n        {\n            \"elapsed_time\": 1403.7902355194092,\n            \"token_count\": 486\n        },\n        {\n            \"elapsed_time\": 1395.6530094146729,\n            \"token_count\": 487\n        },\n        {\n            \"elapsed_time\": 1380.1908493041992,\n            \"token_count\": 488\n        },\n        {\n            \"elapsed_time\": 1450.5088329315186,\n            \"token_count\": 489\n        },\n        {\n            \"elapsed_time\": 1393.4822082519531,\n            \"token_count\": 490\n        },\n        {\n            \"elapsed_time\": 1393.7640190124512,\n            \"token_count\": 491\n        },\n        {\n            \"elapsed_time\": 1426.9161224365234,\n            \"token_count\": 492\n        },\n        {\n            \"elapsed_time\": 1525.0968933105469,\n            \"token_count\": 493\n        }\n    ],\n    \"max_token_count_per_time\": {\n        \"100\": 71,\n        \"200\": 140,\n        \"300\": 186,\n        \"400\": 220,\n        \"500\": 252,\n        \"600\": 276,\n        \"700\": 309,\n        \"800\": 335,\n        \"900\": 359,\n        \"1000\": 384,\n        \"1100\": 410,\n        \"1200\": 438,\n        \"1300\": 466,\n        \"1400\": 491,\n        \"1500\": 492\n    }\n}"
  },
  {
    "path": "reports/summary/bert_for_qa.json",
    "content": "{\n\t\"config\": {\n\t\t\"data_reader\": {\n\t\t\t\"dataset\": \"squad_bert\",\n\t\t\t\"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n\t\t\t\"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n\t\t\t\"squad_bert\": {\n\t\t\t\t\"lang_code\": \"en\",\n\t\t\t\t\"max_seq_length\": 384,\n\t\t\t\t\"context_stride\": 128,\n\t\t\t\t\"max_question_length\": 64\n\t\t\t}\n\t\t},\n\t\t\"iterator\": {\n\t\t\t\"batch_size\": 48\n\t\t},\n\t\t\"token\": {\n\t\t\t\"names\": [\"feature\"],\n\t\t\t\"types\": [\"feature\"],\n\t\t\t\"tokenizer\": {\n\t\t\t\t\"subword\": {\n\t\t\t\t\t\"name\": \"wordpiece\",\n\t\t\t\t\t\"wordpiece\": {\n\t\t\t\t\t\t\"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"word\": {\n\t\t\t\t\t\"name\": \"bert_basic\",\n\t\t\t\t\t\"bert_basic\": {\n\t\t\t\t\t\t\"do_lower_case\": true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"feature\": {\n\t\t\t\t\"vocab\": {\n\t\t\t\t\t\"pretrained_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\",\n\t\t\t\t\t\"pretrained_token\": \"all\"\n\t\t\t\t},\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"do_tokenize\": false\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"model\": {\n\t\t\t\"name\": \"bert_for_qa\",\n\t\t\t\"bert_for_qa\": {\n\t\t\t\t\"pretrained_model_name\": \"bert-base-uncased\",\n\t\t\t\t\"answer_maxlen\": 30\n\t\t\t}\n\t\t},\n\t\t\"trainer\": {\n\t\t\t\"log_dir\": \"logs/squad_bert\",\n\t\t\t\"num_epochs\": 5,\n\t\t\t\"early_stopping_threshold\": 10,\n\t\t\t\"metric_key\": \"f1\",\n\t\t\t\"verbose_step_count\": 100,\n\t\t\t\"eval_and_save_step_count\": 1000\n\t\t},\n\t\t\"optimizer\": {\n\t\t\t\"op_type\": \"bert_adam\",\n\t\t\t\"learning_rate\": 5e-05,\n\t\t\t\"bert_adam\": {\n\t\t\t\t\"warmup\": 0.1\n\t\t\t}\n\t\t},\n\t\t\"seed_num\": 42,\n\t\t\"use_gpu\": true,\n\t\t\"gpu_num\": 4\n\t},\n\t\"training_logs\": {\n\t\t\"early_stopping_count\": 6,\n\t\t\"elapsed_time\": [\"02:18:10\"],\n\t\t\"train_dataset\": {\n\t\t\t\"name\": \"squad_bert\",\n\t\t\t\"total_count\": 87779,\n\t\t\t\"HasAns_count\": 87779,\n\t\t\t\"NoAns_count\": 0\n\t\t},\n\t\t\"valid_dataset\": {\n\t\t\t\"name\": \"squad_bert\",\n\t\t\t\"total_count\": 10646,\n\t\t\t\"HasAns_count\": 10646,\n\t\t\t\"NoAns_count\": 0\n\t\t}\n\t},\n\t\"metrics\": {\n\t\t\"best_epoch\": 2,\n\t\t\"best_global_step\": 0,\n\t\t\"best\": {\n\t\t\t\"valid/loss\": 0.8889339666914295,\n\t\t\t\"valid/epoch_time\": 53.34748435020447,\n\t\t\t\"valid/em\": 78.67549668874172,\n\t\t\t\"valid/f1\": 86.58346875203304\n\t\t},\n\t\t\"best_score\": 86.58346875203304,\n\t\t\"valid/loss\": [0.9415906336124953, 0.9108352352370013, 0.8889339666914295, 1.0355482176617459, 1.0540606967500739, 1.1880523226819597, 1.1383471519828916, 1.351632583114478, 1.3381704858562968],\n\t\t\"valid/epoch_time\": [56.80781602859497, 53.31908941268921, 53.34748435020447, 56.13729381561279, 53.40209174156189, 56.136420249938965, 53.31478691101074, 56.12194752693176, 53.169355630874634],\n\t\t\"valid/em\": [76.9914853358562, 78.15515610217597, 78.67549668874172, 77.44560075685904, 77.17123935666982, 76.75496688741723, 76.3197729422895, 77.02932828760643, 76.49952696310312],\n\t\t\"valid/f1\": [84.95112042771974, 86.23856546381289, 86.58346875203304, 85.55421931957414, 85.89519153631547, 85.44916850325487, 85.25391484030878, 85.72639448425241, 85.4407206832876],\n\t\t\"best_step\": 3000\n\t},\n\t\"inferency_latency\": {\n\t\t\"cpu\": {\n\t\t\t\"max_token_count_per_time\": {\n\t\t\t\t\"200\": 27,\n\t\t\t\t\"300\": 56,\n\t\t\t\t\"400\": 77,\n\t\t\t\t\"500\": 94,\n\t\t\t\t\"600\": 124,\n\t\t\t\t\"700\": 145,\n\t\t\t\t\"800\": 160,\n\t\t\t\t\"900\": 173,\n\t\t\t\t\"1000\": 173,\n\t\t\t\t\"1100\": 173,\n\t\t\t\t\"1200\": 173,\n\t\t\t\t\"1300\": 173,\n\t\t\t\t\"1400\": 173,\n\t\t\t\t\"1500\": 173\n\t\t\t}\n\t\t},\n\t\t\"gpu\": {\n\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "reports/summary/bidaf+elmo.json",
    "content": "{\n\t\"config\": {\n\t\t\"data_reader\": {\n\t\t\t\"dataset\": \"squad\",\n\t\t\t\"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n\t\t\t\"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\"\n\t\t},\n\t\t\"iterator\": {\n\t\t\t\"batch_size\": 32\n\t\t},\n\t\t\"token\": {\n\t\t\t\"names\": [\"char\", \"glove\", \"elmo\"],\n\t\t\t\"types\": [\"char\", \"word\", \"elmo\"],\n\t\t\t\"tokenizer\": {\n\t\t\t\t\"char\": {\n\t\t\t\t\t\"name\": \"character\"\n\t\t\t\t},\n\t\t\t\t\"word\": {\n\t\t\t\t\t\"name\": \"treebank_en\",\n\t\t\t\t\t\"split_with_regex\": true\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"char\": {\n\t\t\t\t\"vocab\": {\n\t\t\t\t\t\"start_token\": \"<s>\",\n\t\t\t\t\t\"end_token\": \"</s>\",\n\t\t\t\t\t\"max_vocab_size\": 260\n\t\t\t\t},\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"insert_char_start\": true,\n\t\t\t\t\t\"insert_char_end\": true\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"embed_dim\": 16,\n\t\t\t\t\t\"kernel_sizes\": [5],\n\t\t\t\t\t\"num_filter\": 100,\n\t\t\t\t\t\"activation\": \"relu\",\n\t\t\t\t\t\"dropout\": 0.2\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"glove\": {\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"lowercase\": true\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"embed_dim\": 100,\n\t\t\t\t\t\"pretrained_path\": \"data/glove.6B.100d.txt\",\n\t\t\t\t\t\"trainable\": false,\n\t\t\t\t\t\"dropout\": 0.2\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"elmo\": {\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"options_file\": \"data/elmo_2x4096_512_2048cnn_2xhighway_options.json\",\n\t\t\t\t\t\"weight_file\": \"data/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5\",\n\t\t\t\t\t\"trainable\": false,\n\t\t\t\t\t\"dropout\": 0.5\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"model\": {\n\t\t\t\"name\": \"bidaf\",\n\t\t\t\"bidaf\": {\n\t\t\t\t\"model_dim\": 200,\n\t\t\t\t\"dropout\": 0.3\n\t\t\t}\n\t\t},\n\t\t\"trainer\": {\n\t\t\t\"log_dir\": \"logs/squad_bidaf+elmo\",\n\t\t\t\"num_epochs\": 50,\n\t\t\t\"early_stopping_threshold\": 10,\n\t\t\t\"metric_key\": \"f1\",\n\t\t\t\"verbose_step_count\": 100,\n\t\t\t\"eval_and_save_step_count\": \"epoch\"\n\t\t},\n\t\t\"optimizer\": {\n\t\t\t\"op_type\": \"adamax\",\n\t\t\t\"learning_rate\": 0.001,\n\t\t\t\"adam\": {\n\t\t\t\t\"betas\": [0.9, 0.9]\n\t\t\t},\n\t\t\t\"lr_scheduler_type\": \"reduce_on_plateau\",\n\t\t\t\"reduce_on_plateau\": {\n\t\t\t\t\"factor\": 0.5,\n\t\t\t\t\"mode\": \"max\",\n\t\t\t\t\"patience\": 2\n\t\t\t}\n\t\t},\n\t\t\"seed_num\": 31,\n\t\t\"use_gpu\": true,\n\t\t\"gpu_num\": 1\n\t},\n\t\"training_logs\": {\n\t\t\"early_stopping_count\": 10,\n\t\t\"early_stopping\": true,\n\t\t\"elapsed_time\": [\"20:07:04\"],\n\t\t\"train_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 87599,\n\t\t\t\"HasAns_count\": 87599,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 846,\n\t\t\t\"question_maxlen\": 60\n\t\t},\n\t\t\"valid_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 10570,\n\t\t\t\"HasAns_count\": 10570,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 708,\n\t\t\t\"question_maxlen\": 36\n\t\t}\n\t},\n\t\"metrics\": {\n\t\t\"best_epoch\": 19,\n\t\t\"best_global_step\": 0,\n\t\t\"best\": {\n\t\t\t\"train/loss\": 0.8802273391131679,\n\t\t\t\"train/epoch_time\": 5151.87109541893,\n\t\t\t\"train/start_acc\": 82.51920684026074,\n\t\t\t\"train/end_acc\": 87.06149613580064,\n\t\t\t\"train/span_acc\": 75.27597347001678,\n\t\t\t\"train/em\": 80.97809335723011,\n\t\t\t\"train/f1\": 90.74583008084164,\n\t\t\t\"valid/loss\": 2.626493739667616,\n\t\t\t\"valid/epoch_time\": 371.3416645526886,\n\t\t\t\"valid/start_acc\": 67.62535477767265,\n\t\t\t\"valid/end_acc\": 71.26773888363293,\n\t\t\t\"valid/span_acc\": 59.11069063386944,\n\t\t\t\"valid/em\": 74.29517502365185,\n\t\t\t\"valid/f1\": 82.72662782854266\n\t\t},\n\t\t\"best_score\": 82.72662782854266,\n\t\t\"train/loss\": [5.199321151128035, 3.2426543711222724, 2.7508464762988623, 2.4840693453352674, 2.278940136868907, 2.1065649907244133, 1.9677384493340533, 1.8301174992884572, 1.7133333797303318, 1.6135036105261482, 1.5180674711660018, 1.3173119416521621, 1.2235544464442745, 1.1530149076174785, 1.097825859316167, 1.0446735754053988, 0.957186687871041, 0.913848308738868, 0.8802273391131679, 0.8539335568230721, 0.8255233902938615, 0.8052649012527995, 0.7617339534022409, 0.7471291374842384, 0.7284036813000417, 0.7035484345857029, 0.7000005541871376, 0.6894140941185443, 0.6820922573447402],\n\t\t\"train/epoch_time\": [5474.6565499305725, 4979.730434417725, 4964.404814720154, 4977.647702217102, 4963.868552207947, 4973.586528301239, 4975.978181362152, 4979.218969106674, 4990.829063177109, 4970.988567113876, 4978.851436853409, 4977.866499662399, 4982.926045179367, 5002.937310934067, 5285.927149772644, 5205.089644193649, 5130.486099720001, 5166.29741024971, 5151.87109541893, 5158.328686237335, 5132.487548828125, 5152.464540481567, 5132.208809375763, 5145.624874353409, 5144.96672129631, 5127.451770544052, 5141.1182289123535, 5140.675534486771, 5139.1023206710815],\n\t\t\"train/start_acc\": [30.09623397527369, 52.3944337264124, 58.49952625029966, 61.60915078939257, 64.2084955307709, 66.01102752314524, 67.7484902795694, 69.6172330734369, 70.8992111782098, 72.02479480359365, 73.52024566490485, 76.06022899804792, 77.35590588933664, 78.33536912521832, 79.19154328245756, 80.01803673557917, 81.26805100514846, 82.03518305003482, 82.51920684026074, 83.01350472037352, 83.39250448064476, 83.88680236075754, 84.26922681765774, 84.5192296715716, 84.83544332697862, 85.362846607838, 85.42106645053026, 85.57974406100526, 85.52609048048494],\n\t\t\"train/end_acc\": [32.472973435769816, 56.563431089396, 62.700487448486854, 65.88773844450279, 68.36493567278166, 70.64920832429594, 72.14237605452116, 73.92892612929371, 75.45862395689448, 76.64356899051359, 77.94267057843126, 80.52831653329376, 81.87308074293085, 83.13907693010194, 83.67104647313326, 84.58201577643581, 85.72814758159339, 86.43249352161554, 87.06149613580064, 87.37200196349274, 87.92566125184078, 88.04780876494024, 88.8548956038311, 89.16768456260917, 89.42453680978093, 89.81723535656799, 89.76700647267663, 89.84805762622861, 90.214500165527],\n\t\t\"train/span_acc\": [21.84157353394445, 42.51075925524264, 48.564481329695546, 51.80995216840375, 54.36363428806265, 56.5314672541924, 58.154773456318, 60.1034258381945, 61.592027306247786, 62.8717222799347, 64.51671822737703, 67.25419239945661, 68.8854895603831, 70.19258210710169, 71.05446409205585, 72.11383691594654, 73.72001963492734, 74.6538202490896, 75.27597347001678, 75.97347001678101, 76.5705087957625, 76.9928880466672, 77.7725773125264, 78.16870055594242, 78.56482379935844, 79.20980833114534, 79.2280733798331, 79.38560942476512, 79.6104978367333],\n\t\t\"train/em\": [24.685213301521706, 48.01995456569139, 54.574823913515, 58.05545725407824, 60.72900375575064, 63.02697519378075, 64.66512174796516, 66.65258735830318, 68.05557141063254, 69.31357663900273, 70.90035274375278, 73.71431180721241, 75.09674767976803, 76.34333725270837, 77.167547574744, 78.13331202410987, 79.59679905021747, 80.36050639847487, 80.97809335723011, 81.54773456317994, 82.03518305003482, 82.38792680281739, 83.10939622598431, 83.39592917727371, 83.86282948435485, 84.31488943937717, 84.22128106485233, 84.41648877270289, 84.64822657792897],\n\t\t\"train/f1\": [36.081805902200124, 62.256687310922864, 68.79747652976971, 72.01592592596222, 74.54823397427586, 76.54656945307397, 78.0749588626154, 79.84475624140384, 81.04883125005381, 82.18241326097673, 83.234597479496, 85.66653647222941, 86.75640467761987, 87.59982726857889, 88.25205327127513, 88.80302223991147, 89.77693590987325, 90.32219441701788, 90.74583008084164, 90.99030982547735, 91.24850897403488, 91.46237203842257, 91.95796286683243, 92.075923964645, 92.37982660291567, 92.57360772115761, 92.62741445698998, 92.71939533714819, 92.8358291897603],\n\t\t\"valid/loss\": [3.1358324537824647, 2.462308123032492, 2.26361395026982, 2.1426335310287707, 2.130673690324824, 2.112841031522549, 2.073477884433781, 2.125299881232109, 2.115961379335006, 2.1840251048526014, 2.1877216370804433, 2.2746186195183378, 2.303641164590945, 2.3522322186890685, 2.411913618850564, 2.4464716475535737, 2.562021914025448, 2.6151650555184243, 2.626493739667616, 2.7094725381211573, 2.751489603087261, 2.7427400102968305, 2.808030868224867, 2.8389116403199393, 2.898545431226402, 2.9101907281357, 2.931594036857167, 2.9568752257485404, 2.9598750104716895],\n\t\t\"valid/epoch_time\": [397.5357277393341, 354.3016209602356, 354.2125337123871, 354.8656098842621, 354.83954215049744, 354.5988097190857, 355.3075087070465, 355.19523334503174, 355.18815422058105, 355.1181824207306, 355.3709852695465, 354.5889689922333, 355.16985297203064, 374.96937012672424, 381.7922697067261, 369.42103838920593, 370.18241143226624, 370.13810300827026, 371.3416645526886, 370.67670726776123, 369.77847123146057, 366.278751373291, 367.56112146377563, 359.98594427108765, 368.54997873306274, 367.8412208557129, 368.14005970954895, 369.04835271835327, 362.66716599464417],\n\t\t\"valid/start_acc\": [53.87890255439925, 62.61116367076632, 65.01419110690634, 67.11447492904446, 66.84011352885526, 67.74834437086092, 67.85241248817408, 67.88079470198676, 67.80510879848629, 67.81456953642385, 67.43614001892148, 67.99432355723746, 68.09839167455061, 68.02270577105014, 67.44560075685904, 67.69157994323557, 67.65373699148533, 68.0321665089877, 67.62535477767265, 67.64427625354777, 67.5685903500473, 67.14285714285714, 67.55912961210974, 67.7294228949858, 67.36991485335857, 67.33207190160833, 67.360454115421, 67.52128666035951, 67.31315042573321],\n\t\t\"valid/end_acc\": [57.530747398297066, 66.10217596972564, 68.78902554399244, 70.12298959318827, 70.39735099337749, 71.36234626300852, 71.11636707663197, 71.36234626300852, 71.30558183538317, 71.35288552507096, 71.38126773888364, 71.2961210974456, 71.40018921475875, 71.47587511825922, 71.33396404919584, 71.48533585619678, 71.2488174077578, 71.31504257332072, 71.26773888363293, 71.02175969725639, 70.78524124881741, 70.84200567644277, 71.30558183538317, 71.22989593188268, 70.88930936613056, 70.88930936613056, 70.51087984862819, 70.70009460737937, 70.7663197729423],\n\t\t\"valid/span_acc\": [44.49385052034059, 53.065279091769156, 56.62251655629139, 57.80510879848628, 58.09839167455061, 59.77294228949858, 59.3755912961211, 59.40397350993378, 59.54588457899716, 59.17691579943236, 58.73226111636708, 59.44181646168401, 59.593188268684955, 59.57426679280984, 59.195837275307476, 59.120151371807, 59.0728476821192, 59.55534531693472, 59.11069063386944, 59.17691579943236, 58.978240302743615, 58.57142857142857, 59.17691579943236, 59.24314096499527, 58.741721854304636, 58.760643330179754, 58.38221381267739, 58.7038789025544, 58.62819299905393],\n\t\t\"valid/em\": [56.385998107852416, 66.62251655629139, 69.89593188268685, 72.21381267738883, 72.28003784295176, 73.78429517502366, 73.81267738883633, 73.80321665089878, 74.03973509933775, 73.71807000946073, 73.66130558183538, 74.18164616840113, 74.48438978240303, 74.25733207190162, 74.0964995269631, 73.96404919583728, 73.87890255439925, 74.37086092715232, 74.29517502365185, 74.18164616840113, 74.0964995269631, 73.89782403027436, 74.19110690633869, 74.2100283822138, 73.85052034058657, 73.89782403027436, 73.64238410596026, 73.7748344370861, 73.92620624408704],\n\t\t\"valid/f1\": [67.3041368772203, 76.62706615904294, 78.83509809179301, 81.00528880703403, 80.90156879146838, 81.77321188017719, 82.11160303527237, 82.24011294202107, 82.03716696557396, 82.11519150244165, 82.23375635679048, 82.58431637358657, 82.67790929614387, 82.61403458750335, 82.40268727546746, 82.50648656754376, 82.50090325321402, 82.68915589879413, 82.72662782854266, 82.50404724093217, 82.46038638435557, 82.42655348570055, 82.59671887078092, 82.67566678598348, 82.49401156249223, 82.4828737404366, 82.35408272883042, 82.37103880032886, 82.47274214105332],\n\t\t\"best_step\": 52022\n\t},\n\t\"inferency_latency\": {\n\t\t\"cpu\": {\n\t\t\t\"max_token_count_per_time\": {\n\t\t\t\t\"500\": 13,\n\t\t\t\t\"600\": 16,\n\t\t\t\t\"700\": 19,\n\t\t\t\t\"800\": 24,\n\t\t\t\t\"900\": 27,\n\t\t\t\t\"1000\": 30,\n\t\t\t\t\"1100\": 34,\n\t\t\t\t\"1200\": 38,\n\t\t\t\t\"1300\": 40,\n\t\t\t\t\"1400\": 44,\n\t\t\t\t\"1500\": 46\n\t\t\t}\n\t\t},\n\t\t\"gpu\": {\n\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "reports/summary/bidaf.json",
    "content": "{\n\t\"config\": {\n\t\t\"data_reader\": {\n\t\t\t\"dataset\": \"squad\",\n\t\t\t\"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n\t\t\t\"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\"\n\t\t},\n\t\t\"iterator\": {\n\t\t\t\"batch_size\": 32\n\t\t},\n\t\t\"token\": {\n\t\t\t\"names\": [\"char\", \"glove\"],\n\t\t\t\"types\": [\"char\", \"word\"],\n\t\t\t\"tokenizer\": {\n\t\t\t\t\"char\": {\n\t\t\t\t\t\"name\": \"character\"\n\t\t\t\t},\n\t\t\t\t\"word\": {\n\t\t\t\t\t\"name\": \"treebank_en\",\n\t\t\t\t\t\"split_with_regex\": true\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"char\": {\n\t\t\t\t\"vocab\": {\n\t\t\t\t\t\"start_token\": \"<s>\",\n\t\t\t\t\t\"end_token\": \"</s>\",\n\t\t\t\t\t\"max_vocab_size\": 260\n\t\t\t\t},\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"insert_char_start\": true,\n\t\t\t\t\t\"insert_char_end\": true\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"embed_dim\": 16,\n\t\t\t\t\t\"kernel_sizes\": [5],\n\t\t\t\t\t\"num_filter\": 100,\n\t\t\t\t\t\"activation\": \"relu\",\n\t\t\t\t\t\"dropout\": 0.2\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"glove\": {\n\t\t\t\t\"vocab\": {\n\t\t\t\t\t\"pretrained_path\": \"http://dev-reasoning-qa-data-ncl.nfra.io:7778/data/glove.6B.vocab.txt\",\n\t\t\t\t\t\"pretrained_token\": \"intersect\"\n\t\t\t\t},\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"lowercase\": true\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"embed_dim\": 100,\n\t\t\t\t\t\"pretrained_path\": \"http://dev-reasoning-qa-data-ncl.nfra.io:7778/data/glove.6B.100d.txt\",\n\t\t\t\t\t\"trainable\": false,\n\t\t\t\t\t\"dropout\": 0.2\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"model\": {\n\t\t\t\"name\": \"bidaf\",\n\t\t\t\"bidaf\": {\n\t\t\t\t\"model_dim\": 100,\n\t\t\t\t\"contextual_rnn_num_layer\": 1,\n\t\t\t\t\"modeling_rnn_num_layer\": 2,\n\t\t\t\t\"predict_rnn_num_layer\": 1,\n\t\t\t\t\"dropout\": 0.2\n\t\t\t}\n\t\t},\n\t\t\"trainer\": {\n\t\t\t\"log_dir\": \"logs/squad_bidaf\",\n\t\t\t\"num_epochs\": 50,\n\t\t\t\"early_stopping_threshold\": 10,\n\t\t\t\"metric_key\": \"f1\",\n\t\t\t\"verbose_step_count\": 100,\n\t\t\t\"eval_and_save_step_count\": \"epoch\"\n\t\t},\n\t\t\"optimizer\": {\n\t\t\t\"op_type\": \"adadelta\",\n\t\t\t\"learning_rate\": 0.5,\n\t\t\t\"exponential_moving_average\": 0.999\n\t\t},\n\t\t\"seed_num\": 2,\n\t\t\"slack\": false,\n\t\t\"use_gpu\": true,\n\t\t\"gpu_num\": 1\n\t},\n\t\"training_logs\": {\n\t\t\"early_stopping_count\": 10,\n\t\t\"early_stopping\": true,\n\t\t\"elapsed_time\": [\"13:35:37\"],\n\t\t\"train_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 87599,\n\t\t\t\"HasAns_count\": 87599,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 846,\n\t\t\t\"question_maxlen\": 60\n\t\t},\n\t\t\"valid_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 10570,\n\t\t\t\"HasAns_count\": 10570,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 708,\n\t\t\t\"question_maxlen\": 36\n\t\t}\n\t},\n\t\"metrics\": {\n\t\t\"best_epoch\": 21,\n\t\t\"best_global_step\": 0,\n\t\t\"best\": {\n\t\t\t\"train/loss\": 1.8804193112191012,\n\t\t\t\"train/epoch_time\": 1488.8830120563507,\n\t\t\t\"train/start_acc\": 68.78845648922933,\n\t\t\t\"train/end_acc\": 73.70061302069658,\n\t\t\t\"train/span_acc\": 59.47670635509538,\n\t\t\t\"train/em\": 65.63659402504595,\n\t\t\t\"train/f1\": 78.98644094318335,\n\t\t\t\"valid/loss\": 2.59111491665019,\n\t\t\t\"valid/epoch_time\": 60.7434446811676,\n\t\t\t\"valid/start_acc\": 63.17880794701987,\n\t\t\t\"valid/end_acc\": 67.19016083254493,\n\t\t\t\"valid/span_acc\": 54.45600756859035,\n\t\t\t\"valid/em\": 68.10785241248817,\n\t\t\t\"valid/f1\": 77.77963381714842\n\t\t},\n\t\t\"best_score\": 77.77963381714842,\n\t\t\"train/loss\": [6.802488770077401, 4.205627956209259, 3.505901032594802, 3.195407586083785, 2.994199373758649, 2.8403854832934847, 2.713508145621086, 2.616165210854145, 2.5216083436921357, 2.4369467883714364, 2.364499175740124, 2.292416350152738, 2.232062298551452, 2.1831376637482487, 2.131602263803287, 2.072337622077383, 2.029501295551233, 1.998490737553841, 1.9576764812079375, 1.9282494203029017, 1.8804193112191012, 1.85559536587417, 1.8236318133755092, 1.800804827424886, 1.776197946206595, 1.7496464839375219, 1.7319859258008752, 1.7110994695267423, 1.6878932957844286, 1.6624671622425036, 1.637791820148032],\n\t\t\"train/epoch_time\": [2006.0850911140442, 1485.6879358291626, 1475.598529100418, 1478.4869632720947, 1482.2096199989319, 1486.2473270893097, 1472.47771525383, 1482.7782707214355, 1479.5967094898224, 1485.5918855667114, 1474.6913664340973, 1480.9212946891785, 1481.4111742973328, 1485.9645612239838, 1473.1698570251465, 1483.397302865982, 1488.9916093349457, 1483.4742772579193, 1480.3435850143433, 1486.24049782753, 1488.8830120563507, 1486.1977095603943, 1476.0061762332916, 1481.454964876175, 1488.7305047512054, 1485.6676778793335, 1473.8961174488068, 1479.606299161911, 1479.1073908805847, 1479.5758039951324, 1477.463410615921],\n\t\t\"train/start_acc\": [16.583522642952545, 42.4422653226635, 50.25742302994326, 53.80198404091371, 55.96525074487152, 57.68901471477985, 59.18789027272001, 60.26096188312652, 61.43449126131577, 62.52696948595304, 63.33405632484389, 64.15712508133655, 64.78270299889269, 65.5053139876026, 65.85234991267023, 66.52701514857476, 67.02930398748845, 67.33866824963755, 67.8923275379856, 68.2416465941392, 68.78845648922933, 68.99622141805271, 69.44942293861801, 69.60467585246407, 69.81015765020149, 70.13664539549538, 70.3181543168301, 70.67888902841356, 70.92889188232742, 71.17204534298337, 71.47912647404651],\n\t\t\"train/end_acc\": [17.532163609173622, 46.669482528339366, 54.49148962887704, 58.047466295277346, 60.42078105914451, 62.275825066496196, 63.71305608511513, 65.01444080411876, 66.19481957556593, 66.9539606616514, 68.12520690875466, 68.80900466900307, 69.36152239180812, 70.08984120823297, 70.75651548533659, 71.64921973995136, 71.95173460884257, 72.3307343691138, 72.82731538031256, 73.23485427915844, 73.70061302069658, 74.14239888583204, 74.76911836893115, 74.89354901311658, 75.16980787451912, 75.6800876722337, 75.77141291567256, 76.17895181451843, 76.32735533510656, 76.87758992682565, 77.34905649607872],\n\t\t\"train/span_acc\": [10.059475564789553, 32.62137695635795, 40.09292343519903, 43.784746401214626, 45.98340163700499, 47.85100286532951, 49.271110400803664, 50.517699973743994, 51.73346727702371, 52.773433486683636, 53.75061359147936, 54.48920649779107, 54.992636902247746, 55.82597974862727, 56.348816767314695, 57.10795785340015, 57.61252982339981, 57.887647119259356, 58.413908834575736, 58.91163141131748, 59.47670635509538, 59.758673044212834, 60.40251601045674, 60.48356716400872, 60.74955193552438, 61.201611890546694, 61.32604253473213, 61.751846482265776, 62.018972819324425, 62.46989120880375, 62.78382173312481],\n\t\t\"train/em\": [11.201041107775202, 36.92622061895684, 45.28133882806881, 49.20033333713855, 51.54168426580212, 53.638740168266764, 55.09880249774541, 56.441283576296534, 57.651343051861325, 58.70386648249409, 59.852281418737654, 60.51324786812635, 61.144533613397414, 61.93563853468647, 62.48130686423361, 63.256429867920865, 63.76214340346351, 64.10803776298816, 64.57722120115527, 64.9562209614265, 65.63659402504595, 66.00988595760225, 66.5235904519458, 66.66856927590497, 66.826105320837, 67.30556284889097, 67.36606582266921, 67.85008961289512, 67.8923275379856, 68.5361705042295, 68.84439320083563],\n\t\t\"train/f1\": [19.97468549873792, 51.34196880784591, 60.08754900566428, 63.93039993057552, 66.25848527221643, 68.159784095871, 69.55288259311627, 70.77210151946028, 71.85804457432974, 72.74239831484314, 73.82220251022059, 74.4477480036949, 75.12548563093274, 75.82249693925081, 76.30668814749853, 76.985685281905, 77.42865253978103, 77.62549431865827, 78.15147865774858, 78.39996484486177, 78.98644094318335, 79.28245614472341, 79.70279469474156, 79.90194637491457, 80.06043674987653, 80.29938451692719, 80.41705882967047, 80.83001291157164, 80.86903855211925, 81.27039805834508, 81.60764566928177],\n\t\t\"valid/loss\": [4.7435729885389435, 3.18698846213407, 2.9136927451972157, 2.720595936580727, 2.6256603928130917, 2.5950503596006205, 2.509827042454319, 2.5278977413191894, 2.5180999204471393, 2.486862433100755, 2.5041553129602416, 2.4991234886682285, 2.4887624843963323, 2.511779291662205, 2.4878336310026508, 2.5245973305759835, 2.5873427063316736, 2.5393245362443144, 2.579380591830458, 2.5648889905376375, 2.59111491665019, 2.5946989243124188, 2.6353404403093, 2.645616871892866, 2.6574283924707833, 2.6868798694941933, 2.7441978377157827, 2.713041145635876, 2.688760362182859, 2.742932821148472, 2.755753375972506],\n\t\t\"valid/epoch_time\": [101.57139825820923, 60.02541184425354, 60.92531633377075, 60.83312249183655, 59.99517583847046, 60.126864194869995, 60.92917728424072, 67.57362794876099, 60.27321743965149, 60.59219217300415, 60.95810270309448, 60.571919679641724, 60.45670247077942, 60.42324709892273, 60.31264591217041, 60.76713800430298, 60.29240608215332, 59.75893235206604, 60.75028729438782, 60.91915845870972, 60.7434446811676, 60.262728452682495, 60.26231932640076, 60.294543504714966, 60.88165044784546, 60.55802631378174, 60.503045082092285, 60.411009311676025, 59.75921869277954, 60.26841878890991, 60.91560435295105],\n\t\t\"valid/start_acc\": [37.19016083254494, 54.16272469252602, 57.455061494796595, 59.75402081362346, 61.37180700094607, 61.485335856196784, 62.88552507095554, 62.40302743614002, 63.2639545884579, 63.19772942289499, 63.443708609271525, 63.03689687795648, 63.28287606433302, 63.80321665089877, 63.16934720908231, 63.084200567644274, 63.746452223273415, 62.79091769157994, 63.15042573320719, 63.38694418164617, 63.17880794701987, 63.16934720908231, 62.639545884579, 63.27341532639546, 62.97067171239357, 63.33964049195837, 62.838221381267736, 62.64900662251656, 63.11258278145695, 62.80983916745506, 62.49763481551561],\n\t\t\"valid/end_acc\": [40.23651844843898, 57.80510879848628, 61.01229895931883, 63.36802270577105, 64.61684011352885, 65.45884578997162, 66.04541154210028, 65.98864711447493, 66.88741721854305, 66.20624408703878, 67.00094607379376, 66.91579943235573, 67.09555345316934, 66.69820245979186, 66.92526017029329, 66.76442762535478, 66.84957426679281, 66.26300851466415, 66.82119205298014, 67.08609271523179, 67.19016083254493, 66.80227057710502, 66.08325449385052, 66.14001892147587, 66.56575212866603, 67.2942289498581, 66.20624408703878, 66.81173131504258, 66.34815515610218, 66.55629139072848, 66.07379375591296],\n\t\t\"valid/span_acc\": [28.060548722800377, 44.3046357615894, 48.25922421948912, 50.53926206244087, 51.95837275307474, 52.8949858088931, 53.25449385052034, 53.16934720908231, 54.437086092715234, 53.831598864711445, 54.62630085146642, 54.68306527909177, 54.70198675496689, 54.24787133396405, 54.427625354777675, 54.370860927152314, 54.77767265846736, 53.59508041627247, 54.38978240302744, 54.45600756859035, 54.45600756859035, 54.21948912015137, 53.528855250709555, 54.058656575212865, 54.12488174077578, 55.07095553453169, 53.63292336802271, 53.53831598864711, 54.16272469252602, 53.95458845789972, 53.15988647114475],\n\t\t\"valid/em\": [34.45600756859035, 56.017029328287606, 59.44181646168401, 62.78145695364238, 64.399243140965, 64.93850520340587, 66.1778618732261, 66.26300851466415, 67.21854304635761, 67.12393566698202, 67.46452223273415, 67.55912961210974, 67.53074739829707, 67.62535477767265, 67.39829706717124, 67.57805108798486, 67.90917691579943, 66.86849574266793, 67.68211920529801, 67.80510879848629, 68.10785241248817, 67.66319772942289, 67.06717123935667, 67.36991485335857, 67.65373699148533, 68.01324503311258, 67.02932828760643, 66.61305581835383, 67.2942289498581, 67.4077578051088, 66.5279091769158],\n\t\t\"valid/f1\": [47.11793993142203, 67.62064966725356, 70.43505363398312, 73.3648573373103, 74.65367863205222, 75.01986741588263, 76.22554585944229, 76.229074438378, 76.86040318995676, 76.64349340625128, 76.94548374612968, 76.77342438746693, 76.99280462085946, 77.48774268182495, 77.07897215760607, 77.06606888717221, 77.4321479503029, 76.94813176230305, 77.44460779629544, 77.61593675600862, 77.77963381714842, 77.38312592532897, 76.8725362267208, 77.09486060768172, 77.17977821122052, 77.4367462196794, 76.95349394175246, 76.67467144835067, 76.84060825277712, 77.23149291511744, 76.84772426585663],\n\t\t\"best_step\": 57498\n\t},\n\t\"inferency_latency\": {\n\t\t\"cpu\": {\n\t\t\t\"max_token_count_per_time\": {\n\t\t\t\t\"100\": 80,\n\t\t\t\t\"200\": 140,\n\t\t\t\t\"300\": 187,\n\t\t\t\t\"400\": 236,\n\t\t\t\t\"500\": 279,\n\t\t\t\t\"600\": 316,\n\t\t\t\t\"700\": 351,\n\t\t\t\t\"800\": 380,\n\t\t\t\t\"900\": 422,\n\t\t\t\t\"1000\": 442,\n\t\t\t\t\"1100\": 456,\n\t\t\t\t\"1200\": 505,\n\t\t\t\t\"1300\": 525,\n\t\t\t\t\"1400\": 543,\n\t\t\t\t\"1500\": 559\n\t\t\t}\n\t\t},\n\t\t\"gpu\": {\n\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "reports/summary/docqa+elmo.json",
    "content": "{\n\t\"config\": {\n\t\t\"data_reader\": {\n\t\t\t\"dataset\": \"squad\",\n\t\t\t\"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n\t\t\t\"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\"\n\t\t},\n\t\t\"iterator\": {\n\t\t\t\"batch_size\": 32\n\t\t},\n\t\t\"token\": {\n\t\t\t\"names\": [\"char\", \"glove\", \"elmo\"],\n\t\t\t\"types\": [\"char\", \"word\", \"elmo\"],\n\t\t\t\"tokenizer\": {\n\t\t\t\t\"char\": {\n\t\t\t\t\t\"name\": \"character\"\n\t\t\t\t},\n\t\t\t\t\"word\": {\n\t\t\t\t\t\"name\": \"treebank_en\",\n\t\t\t\t\t\"split_with_regex\": true\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"char\": {\n\t\t\t\t\"vocab\": {\n\t\t\t\t\t\"max_vocab_size\": 260,\n\t\t\t\t\t\"start_token\": \"<s>\",\n\t\t\t\t\t\"end_token\": \"</s>\"\n\t\t\t\t},\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"insert_char_start\": true,\n\t\t\t\t\t\"insert_char_end\": true\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"embed_dim\": 20,\n\t\t\t\t\t\"kernel_sizes\": [5],\n\t\t\t\t\t\"num_filter\": 100,\n\t\t\t\t\t\"activation\": \"relu\",\n\t\t\t\t\t\"dropout\": 0.2\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"glove\": {\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"lowercase\": false\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"embed_dim\": 300,\n\t\t\t\t\t\"pretrained_path\": \"data/glove.840B.300d.txt\",\n\t\t\t\t\t\"trainable\": false\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"elmo\": {\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"options_file\": \"data/elmo_2x4096_512_2048cnn_2xhighway_options.json\",\n\t\t\t\t\t\"weight_file\": \"data/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5\",\n\t\t\t\t\t\"trainable\": false,\n\t\t\t\t\t\"dropout\": 0.5\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"model\": {\n\t\t\t\"name\": \"docqa\",\n\t\t\t\"docqa\": {\n\t\t\t\t\"rnn_dim\": 200,\n\t\t\t\t\"linear_dim\": 400,\n\t\t\t\t\"dropout\": 0.25,\n\t\t\t\t\"weight_init\": true\n\t\t\t}\n\t\t},\n\t\t\"trainer\": {\n\t\t\t\"log_dir\": \"logs/squad_docqa+elmo\",\n\t\t\t\"num_epochs\": 30,\n\t\t\t\"early_stopping_threshold\": 10,\n\t\t\t\"metric_key\": \"f1\",\n\t\t\t\"verbose_step_count\": 100,\n\t\t\t\"eval_and_save_step_count\": \"epoch\"\n\t\t},\n\t\t\"optimizer\": {\n\t\t\t\"op_type\": \"adamax\",\n\t\t\t\"learning_rate\": 0.001,\n\t\t\t\"lr_scheduler_type\": \"reduce_on_plateau\",\n\t\t\t\"reduce_on_plateau\": {\n\t\t\t\t\"factor\": 0.5,\n\t\t\t\t\"mode\": \"max\",\n\t\t\t\t\"patience\": 2\n\t\t\t}\n\t\t},\n\t\t\"seed_num\": 2,\n\t\t\"use_gpu\": true,\n\t\t\"gpu_num\": 1\n\t},\n\t\"training_logs\": {\n\t\t\"early_stopping_count\": 9,\n\t\t\"elapsed_time\": [\"23:55:12\"],\n\t\t\"train_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 87599,\n\t\t\t\"HasAns_count\": 87599,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 846,\n\t\t\t\"question_maxlen\": 60\n\t\t},\n\t\t\"valid_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 10570,\n\t\t\t\"HasAns_count\": 10570,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 708,\n\t\t\t\"question_maxlen\": 36\n\t\t}\n\t},\n\t\"metrics\": {\n\t\t\"best_epoch\": 21,\n\t\t\"best_global_step\": 0,\n\t\t\"best\": {\n\t\t\t\"train/loss\": 1.439864479391744,\n\t\t\t\"train/epoch_time\": 5993.168662786484,\n\t\t\t\"train/start_acc\": 74.20518499069624,\n\t\t\t\"train/end_acc\": 78.46664916266167,\n\t\t\t\"train/span_acc\": 65.07608534344,\n\t\t\t\"train/em\": 71.53848788228176,\n\t\t\t\"train/f1\": 84.62785307755999,\n\t\t\t\"valid/loss\": 2.080861333813912,\n\t\t\t\"valid/epoch_time\": 479.3675630092621,\n\t\t\t\"valid/start_acc\": 69.30936613055819,\n\t\t\t\"valid/end_acc\": 73.01797540208136,\n\t\t\t\"valid/span_acc\": 61.44749290444655,\n\t\t\t\"valid/em\": 76.45222327341533,\n\t\t\t\"valid/f1\": 84.11094186682244\n\t\t},\n\t\t\"best_score\": 84.11094186682244,\n\t\t\"train/loss\": [5.079814058572729, 3.2275339316677405, 2.8251574592402244, 2.6195111416873487, 2.4645420738691133, 2.3375994696113818, 2.2441998273460775, 2.153036293319928, 2.076495324655377, 2.0178244998630945, 1.9499604054791289, 1.894998986151551, 1.766365717652943, 1.6965989512496833, 1.655730398599034, 1.6212873319320387, 1.5427740310516733, 1.5107103774066908, 1.4867077688608317, 1.460878933538391, 1.439864479391744, 1.4177687963140193, 1.4082762137588747, 1.3824653881931932, 1.3560050226328928, 1.3370496482418956, 1.3229278716577764, 1.3051053639460515, 1.291628007789961, 1.2855351840909857],\n\t\t\"train/epoch_time\": [5241.659848213196, 4748.942885637283, 4745.987740516663, 4743.398574113846, 4725.667029619217, 4740.133901357651, 4726.168287754059, 4744.704974651337, 4728.299903869629, 4737.382742881775, 4740.728321313858, 4735.4657237529755, 4742.2038497924805, 4737.14636349678, 5863.12846493721, 5230.826290607452, 5954.650916814804, 5947.938965082169, 5953.572997093201, 5921.744880437851, 5993.168662786484, 5895.05787229538, 6060.5481877326965, 5996.288537025452, 6012.955463647842, 5990.060202360153, 5975.012909889221, 5807.853344678879, 5025.293034076691, 5041.438595294952],\n\t\t\"train/start_acc\": [33.11225013984178, 53.04284295482825, 57.920752520005934, 60.28950102170116, 62.16509320882658, 63.44935444468544, 64.59434468430005, 65.59549766549847, 66.5783855980091, 67.32154476649276, 68.0270322720579, 68.77818239934246, 69.9597027363326, 71.02135869130926, 71.56246075868447, 71.91634607701, 72.95631228666994, 73.2862247285928, 73.51339627164694, 73.96431466112627, 74.20518499069624, 74.52824803936117, 74.61614858617108, 74.78281715544698, 75.24629276589916, 75.44264203929269, 75.6321419194283, 75.94949714037831, 76.10817475085332, 76.12415666845511],\n\t\t\"train/end_acc\": [36.291510177056814, 57.11709037774404, 62.05093665452802, 64.39000445210561, 66.29071108117672, 67.6845626091622, 68.74051073642393, 69.8409799198621, 70.73368417447688, 71.33757234671629, 72.156074841037, 72.69032751515428, 74.28166988207627, 75.14012717040148, 75.63670818160024, 75.98146097558191, 77.11617712530965, 77.5739449080469, 77.79540862338611, 78.08308314021849, 78.46664916266167, 78.6310346008516, 78.74404958960719, 78.9015856345392, 79.45638648843023, 79.84451877304535, 79.87305791162, 80.11621137227594, 80.36050639847487, 80.4050274546513],\n\t\t\"train/span_acc\": [25.563077204077672, 43.68428863343189, 48.50740305254626, 50.87158529206955, 52.84991837806368, 54.05997785362847, 55.17186269249649, 56.265482482676745, 57.219831276612744, 57.99837897692896, 58.671902647290494, 59.24496854986929, 60.706172444890925, 61.68221098414365, 62.28381602529709, 62.62971038482174, 63.740453658146784, 64.09091427984337, 64.38657975547666, 64.8603294558157, 65.07608534344, 65.36033516364343, 65.49275676662975, 65.63659402504595, 66.22564184522655, 66.5703946392082, 66.63432230961541, 66.95738535828035, 67.20168038447927, 67.19711412230733],\n\t\t\"train/em\": [29.25946643226521, 49.58389935958173, 54.55199260265528, 57.07713558373954, 59.18446557609105, 60.52466352355621, 61.69933446728844, 62.77925547095286, 63.729038002716926, 64.61945912624573, 65.19366659436751, 65.82495233963859, 67.3672073882122, 68.36493567278166, 68.84439320083563, 69.18229660155937, 70.40148860146806, 70.71998538796105, 70.96428041415997, 71.30104224934074, 71.53848788228176, 71.79534012945354, 71.94602678112764, 72.10470439160264, 72.52822520805032, 72.98142672861562, 73.01909839153414, 73.29649881847966, 73.50426374730306, 73.48257400198632],\n\t\t\"train/f1\": [41.823210076567165, 64.04439607349838, 68.96454499193852, 71.38109999644747, 73.26550154910214, 74.67687827370719, 75.72286084886255, 76.7442846826793, 77.60396260583099, 78.29910018311244, 78.95895148974826, 79.57258898355508, 80.85222068237327, 81.85572763701992, 82.23764080679737, 82.51173221452157, 83.5567821531103, 83.9109659772286, 84.04452704844486, 84.33425528835996, 84.62785307755999, 84.87435268422722, 84.88500124763733, 85.07580479166042, 85.38736816765336, 85.6982155518823, 85.87633529241451, 86.04517807639093, 86.15535877515501, 86.15685151665427],\n\t\t\"valid/loss\": [2.7543403014675727, 2.3885570840172896, 2.251079231770737, 2.1365918373053168, 2.0704233495130278, 2.052785878635245, 2.0243880656910807, 1.995103694881197, 2.036385576170377, 2.010665632446727, 2.029187322563275, 1.9823158302335941, 2.030617795501951, 2.0456596283394046, 2.026606950334912, 2.0517768854461047, 2.0770177837585035, 2.0823803038035273, 2.0933495162116795, 2.1015306077334817, 2.080861333813912, 2.127328137796811, 2.1290761077512066, 2.1883657828558607, 2.177603616815319, 2.1813284672819235, 2.1603564943251654, 2.193939955392993, 2.2064665964722994, 2.2040130128673194],\n\t\t\"valid/epoch_time\": [398.0897767543793, 364.0841760635376, 364.6475431919098, 364.73658061027527, 365.0627250671387, 364.43452525138855, 364.4353904724121, 365.03809237480164, 364.5749924182892, 364.6512653827667, 364.92579984664917, 365.4912221431732, 364.74781131744385, 365.2856652736664, 430.99648451805115, 503.08322763442993, 389.6020042896271, 444.917387008667, 467.61401438713074, 482.1286108493805, 479.3675630092621, 403.44353556632996, 455.83782386779785, 433.4075622558594, 466.4834966659546, 421.3050284385681, 423.5893306732178, 420.13208866119385, 417.5079028606415, 382.99699330329895],\n\t\t\"valid/start_acc\": [59.120151371807, 63.443708609271525, 65.4399243140965, 66.93472090823084, 67.80510879848629, 67.92809839167455, 68.53358561967833, 68.18353831598864, 68.57142857142857, 68.25922421948913, 69.00662251655629, 69.05392620624409, 69.120151371807, 68.94039735099338, 68.90255439924314, 68.43897824030275, 69.33774834437087, 69.09176915799432, 69.10122989593188, 69.33774834437087, 69.30936613055819, 69.2336802270577, 69.12961210974456, 68.89309366130558, 69.34720908230842, 69.19583727530747, 69.45127719962157, 69.3282876064333, 69.4228949858089, 69.33774834437087],\n\t\t\"valid/end_acc\": [62.60170293282876, 67.36991485335857, 68.67549668874172, 70.22705771050141, 70.95553453169347, 71.2961210974456, 71.759697256386, 71.82592242194892, 72.02459791863765, 72.20435193945127, 71.98675496688742, 72.34626300851467, 72.79091769157995, 72.26111636707664, 72.65846736045411, 72.58278145695364, 72.73415326395458, 72.55439924314096, 72.75307473982971, 72.78145695364239, 73.01797540208136, 72.46925260170293, 72.45979186376537, 72.39356669820246, 72.639545884579, 72.51655629139073, 72.3841059602649, 72.33680227057711, 72.45979186376537, 72.47871333964049],\n\t\t\"valid/span_acc\": [50.09460737937559, 55.06149479659413, 56.9441816461684, 58.978240302743615, 59.08230842005676, 59.91485335856197, 60.45411542100284, 59.83916745506149, 60.32166508987701, 60.586565752128664, 60.633869441816465, 60.9271523178808, 61.31504257332072, 60.59602649006622, 60.936613055818356, 60.6717123935667, 61.324503311258276, 60.86092715231788, 61.22989593188269, 61.2961210974456, 61.44749290444655, 60.85146641438032, 61.0879848628193, 60.567644276253546, 61.173131504257334, 60.88930936613056, 60.97445600756859, 60.98391674550615, 61.19205298013245, 61.00283822138127],\n\t\t\"valid/em\": [63.207190160832546, 68.59981078524125, 71.14474929044465, 73.18826868495742, 73.90728476821192, 74.29517502365185, 74.89120151371807, 74.52223273415326, 75.12771996215704, 75.26963103122044, 75.16556291390728, 75.26963103122044, 75.93188268684958, 75.62913907284768, 75.8561967833491, 75.68590350047303, 75.9508041627247, 75.83727530747399, 76.3197729422895, 76.21570482497634, 76.45222327341533, 76.04541154210028, 76.09271523178808, 75.78051087984863, 76.3670766319773, 75.97918637653737, 76.05487228003784, 76.18732261116367, 76.15894039735099, 76.18732261116367],\n\t\t\"valid/f1\": [73.63899777129646, 78.07477719953904, 79.88712087808636, 81.27290750190173, 82.4028846891031, 82.2366015873866, 82.79291500485648, 83.0706694667876, 83.30933603410722, 83.08599055072762, 83.08029879894835, 83.17156421119037, 83.72038512545765, 83.57372872139884, 83.68574466681565, 83.57760476086574, 83.76355651811551, 83.74346993139304, 83.90126410509757, 84.02309811707664, 84.11094186682244, 83.87333403602042, 83.84284476902984, 83.8307092817778, 84.09020433360895, 83.92002772620177, 84.01457182368458, 83.94613454081411, 83.94902773917838, 84.01561276132168],\n\t\t\"best_step\": 57498\n\t},\n\t\"inferency_latency\": {\n\t\t\"cpu\": {\n\t\t\t\"max_token_count_per_time\": {\n\t\t\t\t\"500\": 11,\n\t\t\t\t\"600\": 15,\n\t\t\t\t\"700\": 19,\n\t\t\t\t\"800\": 23,\n\t\t\t\t\"900\": 25,\n\t\t\t\t\"1000\": 26,\n\t\t\t\t\"1100\": 27,\n\t\t\t\t\"1200\": 34,\n\t\t\t\t\"1300\": 34,\n\t\t\t\t\"1400\": 38,\n\t\t\t\t\"1500\": 39\n\t\t\t}\n\t\t},\n\t\t\"gpu\": {\n\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "reports/summary/docqa.json",
    "content": "{\n\t\"config\": {\n\t\t\"data_reader\": {\n\t\t\t\"dataset\": \"squad\",\n\t\t\t\"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n\t\t\t\"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\"\n\t\t},\n\t\t\"iterator\": {\n\t\t\t\"batch_size\": 32\n\t\t},\n\t\t\"token\": {\n\t\t\t\"names\": [\"char\", \"glove\"],\n\t\t\t\"types\": [\"char\", \"word\"],\n\t\t\t\"tokenizer\": {\n\t\t\t\t\"char\": {\n\t\t\t\t\t\"name\": \"character\"\n\t\t\t\t},\n\t\t\t\t\"word\": {\n\t\t\t\t\t\"name\": \"treebank_en\",\n\t\t\t\t\t\"split_with_regex\": true\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"char\": {\n\t\t\t\t\"vocab\": {\n\t\t\t\t\t\"max_vocab_size\": 260,\n\t\t\t\t\t\"start_token\": \"<s>\",\n\t\t\t\t\t\"end_token\": \"</s>\"\n\t\t\t\t},\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"insert_char_start\": true,\n\t\t\t\t\t\"insert_char_end\": true\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"embed_dim\": 20,\n\t\t\t\t\t\"kernel_sizes\": [5],\n\t\t\t\t\t\"num_filter\": 100,\n\t\t\t\t\t\"activation\": \"relu\",\n\t\t\t\t\t\"dropout\": 0.2\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"glove\": {\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"lowercase\": false\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"embed_dim\": 300,\n\t\t\t\t\t\"pretrained_path\": \"http://dev-reasoning-qa-data-ncl.nfra.io:7778/data/glove.840B.300d.txt\",\n\t\t\t\t\t\"trainable\": false,\n\t\t\t\t\t\"dropout\": 0.2\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"model\": {\n\t\t\t\"name\": \"docqa\",\n\t\t\t\"docqa\": {\n\t\t\t\t\"answer_maxlen\": 17,\n\t\t\t\t\"rnn_dim\": 100,\n\t\t\t\t\"linear_dim\": 200,\n\t\t\t\t\"preprocess_rnn_num_layer\": 1,\n\t\t\t\t\"modeling_rnn_num_layer\": 1,\n\t\t\t\t\"predict_rnn_num_layer\": 1,\n\t\t\t\t\"dropout\": 0.2,\n\t\t\t\t\"weight_init\": true\n\t\t\t}\n\t\t},\n\t\t\"trainer\": {\n\t\t\t\"log_dir\": \"logs/squad_docqa\",\n\t\t\t\"num_epochs\": 50,\n\t\t\t\"early_stopping_threshold\": 10,\n\t\t\t\"metric_key\": \"f1\",\n\t\t\t\"verbose_step_count\": 100,\n\t\t\t\"eval_and_save_step_count\": \"epoch\"\n\t\t},\n\t\t\"optimizer\": {\n\t\t\t\"op_type\": \"adamax\",\n\t\t\t\"learning_rate\": 0.001,\n\t\t\t\"lr_scheduler_type\": \"reduce_on_plateau\",\n\t\t\t\"reduce_on_plateau\": {\n\t\t\t\t\"factor\": 0.5,\n\t\t\t\t\"mode\": \"max\",\n\t\t\t\t\"patience\": 2\n\t\t\t}\n\t\t},\n\t\t\"seed_num\": 2,\n\t\t\"slack\": true,\n\t\t\"use_gpu\": true,\n\t\t\"nsml\": {\n\t\t\t\"dataset_path\": \"/data/rqa_squad\"\n\t\t},\n\t\t\"gpu_num\": 1\n\t},\n\t\"training_logs\": {\n\t\t\"early_stopping_count\": 10,\n\t\t\"early_stopping\": true,\n\t\t\"elapsed_time\": [\"17:45:49\"],\n\t\t\"train_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 87599,\n\t\t\t\"HasAns_count\": 87599,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 846,\n\t\t\t\"question_maxlen\": 60\n\t\t},\n\t\t\"valid_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 10570,\n\t\t\t\"HasAns_count\": 10570,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 708,\n\t\t\t\"question_maxlen\": 36\n\t\t}\n\t},\n\t\"metrics\": {\n\t\t\"best_epoch\": 36,\n\t\t\"best_global_step\": 0,\n\t\t\"best\": {\n\t\t\t\"train/loss\": 2.0024796845792765,\n\t\t\t\"train/epoch_time\": 1305.2128376960754,\n\t\t\t\"train/start_acc\": 67.36149956049726,\n\t\t\t\"train/end_acc\": 71.60013242160299,\n\t\t\t\"train/span_acc\": 58.0588819507072,\n\t\t\t\"train/em\": 64.28612198769392,\n\t\t\t\"train/f1\": 78.08381782352954,\n\t\t\t\"valid/loss\": 2.315428913359916,\n\t\t\t\"valid/epoch_time\": 54.355202436447144,\n\t\t\t\"valid/start_acc\": 65.80889309366131,\n\t\t\t\"valid/end_acc\": 69.45127719962157,\n\t\t\t\"valid/span_acc\": 57.8240302743614,\n\t\t\t\"valid/em\": 71.70293282876064,\n\t\t\t\"valid/f1\": 80.30594840422914\n\t\t},\n\t\t\"best_score\": 80.30594840422914,\n\t\t\"train/loss\": [5.818612085022658, 3.937010064187757, 3.512418350178974, 3.2931603383983115, 3.146366418235227, 3.020703520846245, 2.9343829691801915, 2.855480711811907, 2.7907345838752255, 2.721842828155696, 2.674787028938249, 2.625751250847314, 2.5884839667727078, 2.542313673685205, 2.5029476590187905, 2.478994732294055, 2.4431232058105024, 2.4099183318125585, 2.379493480272063, 2.368589064515882, 2.336758820265205, 2.2467474233416245, 2.2265513101749126, 2.1981466996182135, 2.175110972019074, 2.1597982208340425, 2.143637337764743, 2.099299894230831, 2.0832237069888913, 2.0711371807219603, 2.0655367378556355, 2.0611205305863334, 2.035011407317168, 2.0221054804986895, 2.0124819927445463, 2.0024796845792765, 2.004889547694243, 1.9917108297696333, 1.9854124109617892, 1.9879058681542723, 1.9850256016560939, 1.9814429832819693, 1.98769978735898, 1.9869677119441411, 1.9802090744845096, 1.972371397726374],\n\t\t\"train/epoch_time\": [1756.2093238830566, 1316.4014723300934, 1317.7358529567719, 1317.4981582164764, 1319.6687710285187, 1311.2953672409058, 1313.9999244213104, 1323.0991418361664, 1313.743307352066, 1312.1007041931152, 1306.5723552703857, 1305.0280554294586, 1304.2646160125732, 1305.101998090744, 1305.0865998268127, 1307.065759897232, 1312.506501674652, 1305.7742664813995, 1301.0485985279083, 1302.7703099250793, 1304.4089150428772, 1302.5827214717865, 1305.076423406601, 1305.9158294200897, 1308.109647512436, 1304.6278502941132, 1303.51096701622, 1306.9799551963806, 1305.2228252887726, 1304.5719447135925, 1303.1180980205536, 1303.124599456787, 1306.586990594864, 1312.1639318466187, 1307.5126221179962, 1305.2128376960754, 1300.9613127708435, 1304.874558210373, 1302.824146747589, 1305.8176651000977, 1306.3275363445282, 1309.6138033866882, 1305.2054679393768, 1304.3916850090027, 1307.717455625534, 1309.7977273464203],\n\t\t\"train/start_acc\": [26.958070297606138, 45.77791983926757, 50.218609801481755, 52.824803936117995, 54.4469685727006, 55.73807920181737, 56.936723021952304, 57.781481523761684, 58.38194499937214, 59.23926072215436, 59.58058881950707, 60.088585486135685, 60.5965821527643, 61.21759380814849, 61.64225619013916, 61.993858377378736, 62.256418452265436, 62.80665304398452, 63.090902864187946, 63.10916791287572, 63.5326887293234, 64.48132969554447, 64.72334159065743, 65.0601034258382, 65.2667267891186, 65.41969657187867, 65.57951574789666, 66.20851836208176, 66.45167182273771, 66.45852121599562, 66.59779221223987, 66.67199397253394, 66.90487334330301, 66.84322880398179, 66.94711126839347, 67.36149956049726, 67.25990022717154, 67.49277959794061, 67.55214100617587, 67.33638511855158, 67.50305368782749, 67.59437893126633, 67.31697850432083, 67.28158997248828, 67.50647838445644, 67.69483669904908],\n\t\t\"train/end_acc\": [30.020890649436637, 49.88755579401592, 54.39559812326625, 57.039463920821014, 58.50066781584265, 59.942465096633526, 60.8751241452528, 61.97787645977694, 62.668523613283256, 63.488167673146954, 63.84205299147251, 64.56923024235437, 64.97791070674323, 65.50417242205961, 65.90828662427653, 66.2850032534618, 66.66628614481901, 67.02587929085948, 67.40830374775967, 67.55099944063288, 67.83410769529333, 68.94485096861837, 69.10695327572232, 69.62636559778079, 69.64577221201155, 69.91289854907019, 70.13664539549538, 70.74053356773479, 71.03049121565314, 70.86039794974829, 70.9471569310152, 71.11610863137707, 71.39693375495155, 71.56360232422745, 71.54533727553968, 71.60013242160299, 71.89123163506433, 72.00424662381991, 72.00196349273394, 72.06474959759815, 72.16064110320895, 72.00424662381991, 71.88209911072045, 71.9894062717611, 72.0533339421683, 72.17662302081074],\n\t\t\"train/span_acc\": [19.95456569138917, 36.527814244454845, 41.04384753250608, 43.58268930010617, 45.11695338987888, 46.48226577928972, 47.62953914999029, 48.514252445804175, 49.126131576844486, 49.93435998127833, 50.357880797726004, 50.84532928458088, 51.36131691001039, 51.85447322458019, 52.35447893240791, 52.69466546421763, 53.07594835557484, 53.55997214580075, 53.83737257274626, 53.76773707462414, 54.144453703809404, 55.246064452790556, 55.446979988356034, 55.816847224283386, 55.99607301453213, 56.16388314935102, 56.39105469240516, 57.0246235687622, 57.369376362743864, 57.15818673729152, 57.28832520919189, 57.39449080468955, 57.66504183837715, 57.84084293199694, 57.69129784586582, 58.0588819507072, 58.12737588328634, 58.31459263233599, 58.37052934394228, 58.296327583648214, 58.44244797315038, 58.30203541136314, 58.280345666046415, 58.17874633272069, 58.310026370164046, 58.433315448806496],\n\t\t\"train/em\": [22.662359159351134, 41.364627450085045, 46.216281007774064, 49.05421294763639, 50.614733044897775, 52.13301521706869, 53.304261464171965, 54.31112227308531, 54.892179134465, 55.86821767371774, 56.165024714894, 56.76777132159043, 57.40019863240448, 57.7963218758205, 58.383086564915125, 58.71642370346694, 59.04861927647576, 59.57488099179214, 59.829450107877946, 59.87853742622632, 60.242696834438746, 61.34773228004886, 61.514400849324765, 61.91851505154168, 62.065777006586835, 62.3466021301613, 62.585189328645306, 63.14912270688021, 63.55095377801116, 63.25528830237788, 63.52127307389354, 63.585200744300735, 63.83292046712862, 64.0258450438932, 63.9699083322869, 64.28612198769392, 64.1765316955673, 64.52470918617793, 64.54525736595167, 64.43566707382504, 64.53612484160779, 64.46991404011462, 64.35004965810111, 64.36260687907397, 64.47333873674357, 64.75530542586102],\n\t\t\"train/f1\": [34.51665745792339, 55.96283280809833, 60.82320165645106, 63.63061596631879, 65.17485231431245, 66.64568001646025, 67.64169795101888, 68.73308628110989, 69.28069431706629, 70.21271447481666, 70.54703360121063, 71.19162133184672, 71.6819499810439, 72.13588895733164, 72.66614584868276, 72.900612658929, 73.22490967894906, 73.63541695638129, 74.01887599030012, 74.18845060303182, 74.43589645954991, 75.39396181643032, 75.61005385994422, 76.11364356166689, 76.19438467871556, 76.40991137212013, 76.60393875909631, 77.0916370135873, 77.37343348429118, 77.31739948326253, 77.46668390851623, 77.55081584829301, 77.740727156274, 77.84463712652615, 77.95601209237195, 78.08381782352954, 78.1411374778047, 78.3281561841061, 78.32106385611733, 78.30993029624211, 78.4085983439505, 78.3298353702733, 78.16075301294741, 78.26459775068054, 78.37941623824787, 78.57573145533343],\n\t\t\"valid/loss\": [3.4869210010568903, 2.9881206001760017, 2.786508514621827, 2.667641931250016, 2.603000451971037, 2.536243675878761, 2.4856419484060694, 2.4491564145261067, 2.450293586513427, 2.3857613187902285, 2.4012758238438034, 2.390632554663632, 2.3743403143392947, 2.3420211186581867, 2.362375890200232, 2.3368675526895553, 2.3347333815522786, 2.3056936638592953, 2.339246654078319, 2.3097513512542243, 2.299276483563138, 2.304530702688903, 2.289493453286566, 2.2624936852930535, 2.2946915707559383, 2.319118372803368, 2.3110386475335436, 2.2981555944483087, 2.3032014364562365, 2.3110423495042, 2.305257016798521, 2.310691530790934, 2.3049456558198727, 2.3115620616699633, 2.305059173856257, 2.315428913359916, 2.309111459377669, 2.304927429583858, 2.307107508002451, 2.313411759465843, 2.314569900763359, 2.317394887932838, 2.3121195779466195, 2.3131560251071734, 2.313246792176699, 2.3126730434483993],\n\t\t\"valid/epoch_time\": [91.11087465286255, 55.417484283447266, 55.66261267662048, 55.26226997375488, 55.44231724739075, 55.15640068054199, 55.226255655288696, 55.333287954330444, 55.09399700164795, 54.859079122543335, 54.51596140861511, 54.523744344711304, 54.57809925079346, 54.51284646987915, 54.53284311294556, 54.46537971496582, 54.57931470870972, 54.63344359397888, 54.45877027511597, 54.27037239074707, 54.39240479469299, 54.63644528388977, 54.53509068489075, 54.34073352813721, 54.60284972190857, 54.62445068359375, 54.627192735672, 54.77781081199646, 54.56430721282959, 54.37482237815857, 54.62762641906738, 54.46081566810608, 54.664390563964844, 54.65615272521973, 54.440516233444214, 54.355202436447144, 54.60070729255676, 54.28603959083557, 54.679141998291016, 54.64013314247131, 54.4134566783905, 54.36632299423218, 54.66620182991028, 54.603073835372925, 54.53094506263733, 54.339805603027344],\n\t\t\"valid/start_acc\": [50.350047303689685, 56.868495742667925, 58.84578997161778, 60.21759697256386, 60.91769157994324, 61.91106906338695, 62.1759697256386, 62.639545884579, 62.980132450331126, 63.53831598864711, 63.78429517502365, 63.7275307473983, 64.1438032166509, 64.22894985808892, 64.66414380321665, 64.94796594134343, 64.94796594134343, 65.29801324503312, 64.9763481551561, 65.1371807000946, 65.29801324503312, 65.50614947965941, 65.46830652790918, 65.8561967833491, 65.72374645222327, 65.69536423841059, 65.6480605487228, 65.65752128666036, 65.71428571428571, 65.45884578997162, 65.65752128666036, 65.94134342478714, 65.68590350047303, 65.71428571428571, 65.84673604541155, 65.80889309366131, 65.73320719016083, 65.81835383159887, 65.83727530747399, 65.78051087984863, 65.80889309366131, 65.80889309366131, 65.7899716177862, 65.77105014191108, 65.73320719016083, 65.83727530747399],\n\t\t\"valid/end_acc\": [54.427625354777675, 60.08514664143803, 62.47871333964049, 63.897824030274364, 64.83443708609272, 65.77105014191108, 66.16840113528855, 66.66982024597918, 67.17123935666982, 67.54020813623463, 67.76726584673605, 67.60643330179754, 68.36329233680227, 68.05108798486282, 68.29706717123936, 68.240302743614, 68.87417218543047, 68.6565752128666, 68.46736045411542, 68.87417218543047, 68.6565752128666, 68.84578997161779, 69.35666982024598, 69.47019867549669, 69.31882686849575, 69.120151371807, 69.06338694418164, 69.3282876064333, 69.19583727530747, 69.10122989593188, 69.10122989593188, 69.0728476821192, 69.35666982024598, 69.17691579943235, 69.47019867549669, 69.45127719962157, 69.15799432355723, 69.22421948912014, 69.31882686849575, 69.34720908230842, 69.3282876064333, 69.2620624408704, 69.29990539262063, 69.30936613055819, 69.21475875118259, 69.29044465468307],\n\t\t\"valid/span_acc\": [41.14474929044466, 47.757805108798486, 50.23651844843898, 52.015137180700094, 52.384105960264904, 53.03689687795648, 53.70860927152318, 54.645222327341536, 55.08041627246925, 55.53453169347209, 55.96972563859981, 55.30747398297067, 56.45222327341533, 56.14947965941344, 56.65089877010407, 56.688741721854306, 57.07663197729423, 57.19016083254494, 56.688741721854306, 57.05771050141911, 56.9441816461684, 57.05771050141911, 57.39829706717124, 57.89025543992432, 57.60643330179754, 57.63481551561022, 57.379375591296125, 57.672658467360456, 57.530747398297066, 57.360454115421, 57.58751182592242, 57.549668874172184, 57.70104068117313, 57.72942289498581, 57.88079470198676, 57.8240302743614, 57.58751182592242, 57.71996215704825, 57.74834437086093, 57.842951750236516, 57.81456953642384, 57.776726584673604, 57.757805108798486, 57.73888363292337, 57.682119205298015, 57.83349101229896],\n\t\t\"valid/em\": [51.333964049195835, 59.25260170293283, 62.21381267738884, 64.58845789971618, 65.17502365184484, 65.99810785241249, 67.20908230842005, 67.52128666035951, 68.34437086092716, 69.02554399243141, 69.46073793755913, 69.09176915799432, 69.70671712393566, 69.62157048249763, 70.02838221381268, 70.08514664143803, 70.7663197729423, 70.82308420056765, 70.52980132450331, 70.65279091769158, 70.64333017975402, 70.86092715231788, 71.14474929044465, 71.58940397350993, 71.46641438032167, 71.45695364238411, 71.14474929044465, 71.44749290444655, 71.62724692526017, 71.47587511825922, 71.40018921475875, 71.53263954588458, 71.60832544938505, 71.42857142857143, 71.65562913907284, 71.70293282876064, 71.52317880794702, 71.5042573320719, 71.53263954588458, 71.7123935666982, 71.6650898770104, 71.56102175969725, 71.61778618732261, 71.62724692526017, 71.57048249763481, 71.64616840113528],\n\t\t\"valid/f1\": [63.716542159677566, 70.2960210003769, 72.81607190395042, 74.53190422631644, 75.421681157565, 76.4135897143571, 76.7579247718018, 77.03410374591463, 77.60157205795711, 78.21744573295402, 78.26873914903332, 78.43110519558583, 78.60525536373322, 78.65916247196188, 78.89507681858818, 79.07286072680064, 79.51470974793064, 79.54524082213555, 79.5191310520532, 79.51313633887004, 79.46815034744174, 79.82266775185798, 80.02195952906334, 80.20059574109268, 80.1112083954039, 79.94827592836825, 79.95972844746196, 80.14069016501246, 80.28698213417988, 80.13359507471047, 80.0382166591011, 80.25549700005551, 80.20409907785661, 80.07606205259867, 80.27331973669013, 80.30594840422914, 80.11729620028403, 80.08637267538136, 80.16562101733193, 80.187354927146, 80.18693311368027, 80.15784949751684, 80.14505358124059, 80.15866527496513, 80.10717593451717, 80.15877032876196],\n\t\t\"best_step\": 98568\n\t},\n\t\"inferency_latency\": {\n\t\t\"cpu\": {\n\t\t\t\"max_token_count_per_time\": {\n\t\t\t\t\"100\": 100,\n\t\t\t\t\"200\": 199,\n\t\t\t\t\"300\": 299,\n\t\t\t\t\"400\": 396,\n\t\t\t\t\"500\": 514,\n\t\t\t\t\"600\": 613,\n\t\t\t\t\"700\": 691,\n\t\t\t\t\"800\": 783,\n\t\t\t\t\"900\": 896,\n\t\t\t\t\"1000\": 980,\n\t\t\t\t\"1100\": 999,\n\t\t\t\t\"1200\": 999,\n\t\t\t\t\"1300\": 999,\n\t\t\t\t\"1400\": 999,\n\t\t\t\t\"1500\": 999\n\t\t\t}\n\t\t},\n\t\t\"gpu\": {\n\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "reports/summary/drqa.json",
    "content": "{\n\t\"config\": {\n\t\t\"data_reader\": {\n\t\t\t\"dataset\": \"squad\",\n\t\t\t\"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n\t\t\t\"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\"\n\t\t},\n\t\t\"iterator\": {\n\t\t\t\"batch_size\": 32\n\t\t},\n\t\t\"token\": {\n\t\t\t\"names\": [\"frequent_glove\", \"exact_match\", \"linguistic\"],\n\t\t\t\"types\": [\"frequent_word\", \"exact_match\", \"linguistic\"],\n\t\t\t\"tokenizer\": {\n\t\t\t\t\"word\": {\n\t\t\t\t\t\"name\": \"spacy_en\",\n\t\t\t\t\t\"split_with_regex\": true\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"frequent_glove\": {\n\t\t\t\t\"vocab\": {\n\t\t\t\t\t\"frequent_count\": 1000\n\t\t\t\t},\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"lowercase\": false\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"embed_dim\": 300,\n\t\t\t\t\t\"pretrained_path\": \"data/glove.840B.300d.txt\",\n\t\t\t\t\t\"dropout\": 0.3\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"exact_match\": {\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"lower\": true,\n\t\t\t\t\t\"lemma\": true\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"type\": \"sparse\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"linguistic\": {\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"pos_tag\": true,\n\t\t\t\t\t\"ner\": true\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"type\": \"sparse\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"model\": {\n\t\t\t\"name\": \"drqa\",\n\t\t\t\"drqa\": {\n\t\t\t\t\"aligned_query_embedding\": true,\n\t\t\t\t\"answer_maxlen\": 15,\n\t\t\t\t\"model_dim\": 128,\n\t\t\t\t\"dropout\": 0.3\n\t\t\t}\n\t\t},\n\t\t\"trainer\": {\n\t\t\t\"log_dir\": \"logs/squad_drqa_paper\",\n\t\t\t\"num_epochs\": 50,\n\t\t\t\"early_stopping_threshold\": 10,\n\t\t\t\"metric_key\": \"f1\",\n\t\t\t\"verbose_step_count\": 100,\n\t\t\t\"eval_and_save_step_count\": \"epoch\"\n\t\t},\n\t\t\"optimizer\": {\n\t\t\t\"op_type\": \"adamax\",\n\t\t\t\"learning_rate\": 0.003,\n\t\t\t\"adamax\": {\n\t\t\t\t\"betas\": [0.9, 0.999],\n\t\t\t\t\"eps\": 1e-08,\n\t\t\t\t\"weight_decay\": 0\n\t\t\t},\n\t\t\t\"lr_scheduler_type\": \"reduce_on_plateau\",\n\t\t\t\"reduce_on_plateau\": {\n\t\t\t\t\"factor\": 0.5,\n\t\t\t\t\"mode\": \"max\",\n\t\t\t\t\"patience\": 2\n\t\t\t}\n\t\t},\n\t\t\"seed_num\": 21,\n\t\t\"use_gpu\": true,\n\t\t\"gpu_num\": 1\n\t},\n\t\"training_logs\": {\n\t\t\"early_stopping_count\": 10,\n\t\t\"early_stopping\": true,\n\t\t\"elapsed_time\": [\"13:23:56\"],\n\t\t\"train_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 87599,\n\t\t\t\"HasAns_count\": 87599,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 841,\n\t\t\t\"question_maxlen\": 60\n\t\t},\n\t\t\"valid_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 10570,\n\t\t\t\"HasAns_count\": 10570,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 706,\n\t\t\t\"question_maxlen\": 34\n\t\t}\n\t},\n\t\"metrics\": {\n\t\t\"best_epoch\": 17,\n\t\t\"best_global_step\": 0,\n\t\t\"best\": {\n\t\t\t\"train/loss\": 1.61940172236274,\n\t\t\t\"train/epoch_time\": 5187.572727203369,\n\t\t\t\"train/start_acc\": 72.40836082603683,\n\t\t\t\"train/end_acc\": 76.46662633135081,\n\t\t\t\"train/span_acc\": 63.38656833982123,\n\t\t\t\"train/em\": 69.1971369536182,\n\t\t\t\"train/f1\": 82.23221248606394,\n\t\t\t\"valid/loss\": 8.654243107648774,\n\t\t\t\"valid/epoch_time\": 198.70182490348816,\n\t\t\t\"valid/start_acc\": 63.40586565752129,\n\t\t\t\"valid/end_acc\": 66.59413434247871,\n\t\t\t\"valid/span_acc\": 55.16556291390729,\n\t\t\t\"valid/em\": 68.31598864711448,\n\t\t\t\"valid/f1\": 77.4926689298344\n\t\t},\n\t\t\"best_score\": 77.4926689298344,\n\t\t\"train/loss\": [4.60658250959186, 3.504659719498511, 3.123943943190174, 2.8921950323639165, 2.711123498753965, 2.5738340889214597, 2.4436522412247865, 2.33488081083235, 2.2465767058645225, 2.1464829364556133, 2.0868621060367567, 2.0080187161139453, 1.9401038473674728, 1.8752335216156142, 1.8369758235572289, 1.6853253674646465, 1.61940172236274, 1.5688945004067516, 1.5298081311955776, 1.4967625302346281, 1.4212235773541442, 1.3916269571699305, 1.3672968858650254, 1.3256880727299292, 1.3106557530173426, 1.298210813985679, 1.2784150778115275],\n\t\t\"train/epoch_time\": [8640.480652332306, 3039.2762203216553, 2967.1172726154327, 3045.9760546684265, 2952.516592979431, 2966.4932758808136, 3048.574713230133, 2953.297121286392, 3017.3895716667175, 3028.043808698654, 4921.801164865494, 5170.423162698746, 5179.85888671875, 5174.736956357956, 5181.168378829956, 5196.217725515366, 5187.572727203369, 5615.094452857971, 5767.616916179657, 5789.34668636322, 5759.392116069794, 5751.3127381801605, 5734.911474227905, 5749.742757558823, 5754.053142309189, 5592.814163446426, 5202.744418144226],\n\t\t\"train/start_acc\": [39.44223107569721, 50.45719699996575, 54.70496238541536, 57.29859929907876, 59.44131782326282, 61.07033185310335, 62.621719426020846, 63.77812532106531, 64.57607963561227, 65.93910889393715, 66.69140058676469, 67.4471169762212, 68.48137535816619, 69.22681765773582, 69.52590782999806, 71.59214146280209, 72.40836082603683, 73.06476101325357, 73.58988116302697, 74.10244409182754, 75.01113026404411, 75.26569938012992, 75.62072626399845, 76.293108368817, 76.37415952236897, 76.5876322789073, 76.7622918069841],\n\t\t\"train/end_acc\": [43.09638237879428, 54.65473350152399, 58.97213438509572, 61.49956049726595, 63.66625189785272, 65.1308804895033, 66.66057831710408, 67.90945102113038, 69.06357378508888, 70.21313028687543, 70.99852738044954, 71.73027089350335, 72.55105651891003, 73.44261920798182, 73.85586593454263, 75.7280334250391, 76.46662633135081, 77.11731869085264, 77.69380929006039, 77.98262537243576, 78.9814952225482, 79.63903697530793, 79.72122969440291, 80.35251543967397, 80.52717496775077, 80.53402436100869, 80.8913343759632],\n\t\t\"train/span_acc\": [30.878206372218862, 41.4959074875284, 45.624950056507494, 48.13411111998995, 50.280254340802976, 51.83849130697839, 53.28143015331225, 54.56340825808514, 55.40017580109362, 56.684437036952474, 57.6136713889428, 58.300893845820156, 59.22670350118152, 60.088585486135685, 60.54178700670099, 62.57948150093038, 63.38656833982123, 64.19936300642702, 64.65256452699232, 65.17768467676572, 66.23363280402744, 66.71651502871038, 67.00761424217171, 67.85693900615304, 67.89118597244261, 67.9471226840489, 68.18913457916186],\n\t\t\"train/em\": [34.93989657416181, 46.63637712759278, 51.12843753924132, 53.81454126188655, 56.06913320928321, 57.74380986084316, 59.21300471466569, 60.60114841493624, 61.53723216018448, 62.76783981552301, 63.64912841470793, 64.38657975547666, 65.26558522357561, 66.06011484149363, 66.52587358303177, 68.46881813719335, 69.1971369536182, 70.08527494606103, 70.56929873628694, 71.01336773250836, 71.99739723056199, 72.47000536535805, 72.61840888594618, 73.30106508065161, 73.46202582221258, 73.49513122295916, 73.92321830157879],\n\t\t\"train/f1\": [48.50907262116509, 60.765045197662275, 65.33317809003307, 67.99144869099675, 70.14312976671866, 71.8124061884322, 73.2439380277194, 74.42822285361672, 75.44229199600885, 76.48428687371036, 77.21201568350556, 77.93745800998794, 78.80769543744253, 79.51781682786827, 79.83912968505147, 81.55126317962365, 82.23221248606394, 82.87567185774346, 83.29790277374553, 83.62127823426802, 84.45655843981444, 84.8716303752159, 84.94624146974907, 85.3940965811925, 85.57905551986542, 85.70510085888766, 85.93909958584186],\n\t\t\"valid/loss\": [9.00497546440885, 8.884206907266577, 8.810493067312096, 8.787639697152683, 8.777150423505155, 8.735577976595598, 8.725793743421663, 8.71934508557046, 8.711208483243636, 8.709731617722987, 8.695330253900718, 8.690546114999362, 8.671222137900637, 8.675527650424002, 8.692196104101544, 8.640968986868499, 8.654243107648774, 8.646484069593724, 8.658190711387334, 8.64464476749616, 8.63754986276079, 8.635264432682371, 8.639671476946136, 8.629355259172145, 8.6297872995682, 8.63080207674885, 8.630225940773494],\n\t\t\"valid/epoch_time\": [849.218492269516, 127.3110020160675, 126.12082743644714, 126.01026105880737, 125.38758969306946, 127.1003749370575, 124.92033886909485, 127.7095730304718, 83.75935649871826, 127.01851630210876, 200.48730492591858, 189.13106560707092, 200.52873182296753, 199.95279550552368, 199.04243564605713, 192.7031126022339, 198.70182490348816, 216.21145462989807, 171.93388772010803, 215.22909307479858, 218.55399131774902, 216.11700892448425, 212.8858299255371, 217.22716164588928, 215.74384808540344, 199.73770761489868, 188.1731538772583],\n\t\t\"valid/start_acc\": [53.69914853358562, 57.70104068117313, 59.744560075685904, 61.22043519394513, 62.05298013245033, 62.157048249763484, 62.5922421948912, 62.28003784295175, 62.8949858088931, 62.47871333964049, 63.18826868495743, 63.19772942289499, 62.771996215704824, 62.686849574266795, 61.88268684957427, 63.12204351939451, 63.40586565752129, 62.847682119205295, 62.35572374645222, 62.71523178807947, 62.82876064333018, 62.686849574266795, 62.79091769157994, 62.79091769157994, 62.75307473982971, 62.81929990539262, 62.52601702932829],\n\t\t\"valid/end_acc\": [57.161778618732264, 61.68401135288553, 63.973509933774835, 64.38978240302744, 65.28855250709556, 65.77105014191108, 66.02649006622516, 66.02649006622516, 66.19678334910122, 65.26963103122044, 66.12109744560075, 66.66982024597918, 66.30085146641439, 66.13055818353831, 65.55345316934721, 66.46168401135289, 66.59413434247871, 66.30085146641439, 65.77105014191108, 66.24408703878902, 66.26300851466415, 66.05487228003784, 65.92242194891202, 65.94134342478714, 66.05487228003784, 66.0170293282876, 65.89403973509934],\n\t\t\"valid/span_acc\": [45.2317880794702, 50.00946073793756, 51.73131504257332, 53.11258278145695, 53.964049195837276, 53.85052034058656, 54.276253547776726, 54.418164616840116, 54.55061494796594, 53.64238410596027, 54.63576158940398, 54.91958372753075, 54.7682119205298, 54.31409649952696, 53.59508041627247, 54.966887417218544, 55.16556291390729, 54.25733207190161, 53.57615894039735, 54.38032166508988, 54.33301797540208, 54.11542100283822, 54.02081362346263, 54.03027436140019, 54.15326395458846, 54.13434247871334, 53.77483443708609],\n\t\t\"valid/em\": [56.14001892147588, 61.66508987701041, 63.80321665089877, 64.99526963103122, 66.21570482497634, 66.25354777672659, 67.20908230842005, 67.02932828760643, 67.4550614947966, 67.16177861873226, 67.70104068117313, 68.10785241248817, 67.74834437086092, 67.81456953642385, 67.16177861873226, 68.18353831598864, 68.31598864711448, 67.67265846736045, 67.30368968779565, 67.92809839167455, 67.97540208136235, 67.78618732261117, 67.9848628192999, 67.97540208136235, 67.81456953642385, 67.78618732261117, 67.66319772942289],\n\t\t\"valid/f1\": [66.89296464147222, 71.42020468405755, 73.78136022851302, 74.3754233617323, 75.25886347567096, 75.95991010879098, 76.31073571334775, 76.22517118040842, 76.72587837225083, 76.59299099682524, 76.85032903593398, 77.15654402217363, 76.78704335228713, 76.91471910369974, 76.5554205523628, 77.12696613053616, 77.4926689298344, 77.24874236993564, 77.00283628952356, 77.21012521283004, 77.24411498477711, 77.25184051667006, 77.35801026562912, 77.33955319833585, 77.12135440028722, 77.1612906473848, 77.13617405192754],\n\t\t\"best_step\": 46546\n\t},\n\t\"inferency_latency\": {\n\t\t\"cpu\": {\n\t\t\t\"max_token_count_per_time\": {\n\t\t\t\t\"100\": 78,\n\t\t\t\t\"200\": 155,\n\t\t\t\t\"300\": 235,\n\t\t\t\t\"400\": 335,\n\t\t\t\t\"500\": 420,\n\t\t\t\t\"600\": 491,\n\t\t\t\t\"700\": 555,\n\t\t\t\t\"800\": 630,\n\t\t\t\t\"900\": 744,\n\t\t\t\t\"1000\": 829,\n\t\t\t\t\"1100\": 861,\n\t\t\t\t\"1200\": 982,\n\t\t\t\t\"1300\": 999,\n\t\t\t\t\"1400\": 999,\n\t\t\t\t\"1500\": 999\n\t\t\t}\n\t\t},\n\t\t\"gpu\": {\n\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "reports/summary/qanet.json",
    "content": "{\n\t\"config\": {\n\t\t\"data_reader\": {\n\t\t\t\"dataset\": \"squad\",\n\t\t\t\"train_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json\",\n\t\t\t\"valid_file_path\": \"https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json\",\n\t\t\t\"squad\": {\n\t\t\t\t\"context_max_length\": 400\n\t\t\t}\n\t\t},\n\t\t\"iterator\": {\n\t\t\t\"batch_size\": 24\n\t\t},\n\t\t\"token\": {\n\t\t\t\"names\": [\"char\", \"glove\"],\n\t\t\t\"types\": [\"char\", \"word\"],\n\t\t\t\"tokenizer\": {\n\t\t\t\t\"char\": {\n\t\t\t\t\t\"name\": \"character\"\n\t\t\t\t},\n\t\t\t\t\"word\": {\n\t\t\t\t\t\"name\": \"treebank_en\",\n\t\t\t\t\t\"split_with_regex\": true\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"char\": {\n\t\t\t\t\"vocab\": {\n\t\t\t\t\t\"max_vocab_size\": 260,\n\t\t\t\t\t\"start_token\": \"<s>\",\n\t\t\t\t\t\"end_token\": \"</s>\"\n\t\t\t\t},\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"insert_char_start\": true,\n\t\t\t\t\t\"insert_char_end\": true\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"embed_dim\": 64,\n\t\t\t\t\t\"kernel_sizes\": [5],\n\t\t\t\t\t\"num_filter\": 200,\n\t\t\t\t\t\"activation\": \"relu\",\n\t\t\t\t\t\"dropout\": 0.05\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"glove\": {\n\t\t\t\t\"vocab\": {\n\t\t\t\t\t\"pretrained_path\": \"data/glove.840B.vocab.txt\",\n\t\t\t\t\t\"pretrained_token\": \"intersect\"\n\t\t\t\t},\n\t\t\t\t\"indexer\": {\n\t\t\t\t\t\"lowercase\": false\n\t\t\t\t},\n\t\t\t\t\"embedding\": {\n\t\t\t\t\t\"embed_dim\": 300,\n\t\t\t\t\t\"pretrained_path\": \"data/glove.840B.300d.txt\",\n\t\t\t\t\t\"trainable\": false,\n\t\t\t\t\t\"dropout\": 0.1\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"model\": {\n\t\t\t\"name\": \"qanet\",\n\t\t\t\"qanet\": {\n\t\t\t\t\"answer_maxlen\": 30,\n\t\t\t\t\"model_dim\": 128,\n\t\t\t\t\"kernel_size_in_embedding\": 7,\n\t\t\t\t\"num_head_in_embedding\": 8,\n\t\t\t\t\"num_conv_block_in_embedding\": 4,\n\t\t\t\t\"num_embedding_encoder_block\": 1,\n\t\t\t\t\"kernel_size_in_modeling\": 5,\n\t\t\t\t\"num_head_in_modeling\": 8,\n\t\t\t\t\"num_conv_block_in_modeling\": 2,\n\t\t\t\t\"num_modeling_encoder_block\": 7,\n\t\t\t\t\"layer_dropout\": 0.9,\n\t\t\t\t\"dropout\": 0.1\n\t\t\t}\n\t\t},\n\t\t\"trainer\": {\n\t\t\t\"log_dir\": \"logs/squad_qanet\",\n\t\t\t\"num_epochs\": 100,\n\t\t\t\"early_stopping_threshold\": 10,\n\t\t\t\"metric_key\": \"f1\",\n\t\t\t\"verbose_step_count\": 100,\n\t\t\t\"eval_and_save_step_count\": \"epoch\"\n\t\t},\n\t\t\"optimizer\": {\n\t\t\t\"op_type\": \"adamax\",\n\t\t\t\"learning_rate\": 0.002,\n\t\t\t\"lr_scheduler_type\": \"reduce_on_plateau\",\n\t\t\t\"reduce_on_plateau\": {\n\t\t\t\t\"factor\": 0.5,\n\t\t\t\t\"mode\": \"max\",\n\t\t\t\t\"patience\": 2\n\t\t\t}\n\t\t},\n\t\t\"seed_num\": 2,\n\t\t\"use_gpu\": true,\n\t\t\"gpu_num\": 4\n\t},\n\t\"training_logs\": {\n\t\t\"early_stopping_count\": 10,\n\t\t\"early_stopping\": true,\n\t\t\"elapsed_time\": [\"18:50:02\"],\n\t\t\"train_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 87338,\n\t\t\t\"HasAns_count\": 87338,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 400,\n\t\t\t\"question_maxlen\": 60\n\t\t},\n\t\t\"valid_dataset\": {\n\t\t\t\"name\": \"squad\",\n\t\t\t\"total_count\": 10570,\n\t\t\t\"HasAns_count\": 10570,\n\t\t\t\"NoAns_count\": 0,\n\t\t\t\"context_maxlen\": 708,\n\t\t\t\"question_maxlen\": 36\n\t\t}\n\t},\n\t\"metrics\": {\n\t\t\"best_epoch\": 55,\n\t\t\"best_global_step\": 0,\n\t\t\"best\": {\n\t\t\t\"train/loss\": 1.8296265312521667,\n\t\t\t\"train/epoch_time\": 2923.537817955017,\n\t\t\t\"train/start_acc\": 70.34967597151297,\n\t\t\t\"train/end_acc\": 74.25175753967345,\n\t\t\t\"train/span_acc\": 60.74904394421672,\n\t\t\t\"train/em\": 66.74391260174203,\n\t\t\t\"train/f1\": 80.28687106237878,\n\t\t\t\"valid/loss\": 3.077031190027726,\n\t\t\t\"valid/epoch_time\": 174.152925491333,\n\t\t\t\"valid/start_acc\": 62.63008514664144,\n\t\t\t\"valid/end_acc\": 66.26300851466415,\n\t\t\t\"valid/span_acc\": 54.0964995269631,\n\t\t\t\"valid/em\": 67.83349101229896,\n\t\t\t\"valid/f1\": 77.13077790254637\n\t\t},\n\t\t\"best_score\": 77.13077790254637,\n\t\t\"train/loss\": [15.488234868940417, 7.086183975031088, 6.088968063055814, 5.210119113162324, 4.451079359748861, 4.088897859591704, 3.874833091012724, 3.7179631613768063, 3.5771984939719292, 3.460189548429552, 3.3689059971125572, 3.2848737781846915, 3.203482925433379, 3.150210040414726, 3.078502645335355, 3.0158281381968615, 2.989606374305683, 2.941913167166186, 2.9079444455903967, 2.82684417452131, 2.8017081719669665, 2.7582939096368277, 2.714333850800336, 2.506440755905031, 2.4188369879928917, 2.383003100703706, 2.3444873504422525, 2.3108870263774315, 2.287744827568531, 2.167220318366538, 2.1375067864964294, 2.107174483252751, 2.0835232992584887, 2.066835755732033, 2.003879681606214, 1.9922781422570512, 1.966677693072911, 1.9619674635703093, 1.9436703464323348, 1.9370005422568584, 1.9062095401542527, 1.90440199055842, 1.8926173113122746, 1.8847115559401093, 1.8826755651733378, 1.8712462813153372, 1.8606046057173184, 1.8536939557273309, 1.847323245546975, 1.8556774545993124, 1.8493036387222155, 1.8427186589810876, 1.8316330748108718, 1.8370130183768796, 1.8296265312521667, 1.8304680805612397, 1.831867292195886, 1.8246009549269309, 1.823964442541966, 1.8222635420632887, 1.8235378652483551, 1.820832459735019, 1.8225761726089231, 1.8155118651114976, 1.823007430938574],\n\t\t\"train/epoch_time\": [4296.78471827507, 3628.3298971652985, 3696.4495577812195, 3715.0882000923157, 3701.7543013095856, 3697.767979621887, 3716.3892545700073, 3706.149761199951, 3705.2665474414825, 3721.388156414032, 3708.758844614029, 3716.7224357128143, 3719.79412984848, 3715.805262565613, 3730.085188627243, 3735.406765937805, 3736.960794210434, 3738.1067128181458, 3721.5864198207855, 3727.7481503486633, 3725.5567350387573, 3730.4315271377563, 3736.385180950165, 3728.862630367279, 3731.2970473766327, 3715.3351254463196, 3707.4656279087067, 3702.9816896915436, 3700.1895813941956, 3703.805330991745, 3695.1101365089417, 3697.978477716446, 3701.3173661231995, 3687.6701006889343, 3610.503224134445, 3591.565302848816, 3604.3066127300262, 3602.3776235580444, 3601.5347332954407, 3613.2096066474915, 3450.535410642624, 3397.07058262825, 3396.484432220459, 3384.921397447586, 3308.4173386096954, 3345.625899553299, 3166.124237060547, 3147.206519126892, 3254.1261310577393, 3174.810401201248, 3073.9619607925415, 3039.8876259326935, 2974.9580183029175, 3024.4925615787506, 2923.537817955017, 3019.033987045288, 3017.864396095276, 3088.1552584171295, 3004.0221095085144, 3011.139225959778, 2949.2352333068848, 2803.4796018600464, 2785.6616218090057, 2788.4025688171387, 2775.26225733757],\n\t\t\"train/start_acc\": [3.327303121207264, 13.663010373491494, 21.929744212141337, 32.393688886853376, 41.41152762829467, 45.47619592846184, 47.70317616615906, 49.283244406787425, 50.90224186493852, 51.838833039455906, 53.069683299365686, 53.82651308708695, 54.61082232247132, 55.242849618722666, 56.00883922233163, 56.64888135748471, 57.102292243925895, 57.48929446518125, 58.03315853351348, 58.660605921820974, 58.943415237353726, 59.399116077766834, 59.72886944972406, 62.491698916851774, 63.3137923927729, 63.8187272435824, 64.28473287686917, 64.80340745151022, 64.76676818795943, 66.21974398314593, 66.63079072110651, 67.00863312647415, 67.22503377682109, 67.47807369071882, 68.09865121711054, 68.29215232773821, 68.72037372048821, 68.79823215553367, 68.83945132702833, 68.90128008427031, 69.46346378437794, 69.32492156907647, 69.53903226545147, 69.70276397444411, 69.76344775470012, 69.9603837962857, 69.95809384231377, 69.94549909546818, 70.10923080446084, 70.03595227735923, 69.8836703382262, 70.04740204721885, 70.25922278962193, 70.26151274359385, 70.34967597151297, 70.5168426114635, 70.33937117863931, 70.23975818086056, 70.41150472875495, 70.59126611555108, 70.38173532711993, 70.54432205912661, 70.34624104055509, 70.53745219721084, 70.52600242735122],\n\t\t\"train/end_acc\": [3.439510865831597, 14.418695184226797, 23.245322769012343, 34.78669078751517, 44.6174631889899, 48.86876273786897, 51.252604822643065, 53.04105887471662, 54.55128351920126, 55.98479470562642, 57.22022487348004, 57.76981382674208, 58.612516888410546, 59.539948247040236, 60.12617646385308, 61.13375621150015, 61.27115344981566, 61.781813185554974, 62.13561107421741, 63.091666857496165, 63.23364400375552, 63.651560603631864, 64.17138015525887, 66.35714122146145, 67.54219240193272, 67.78378254597082, 68.37115573976963, 68.79479722457579, 69.0695917012068, 70.09434610364332, 70.7435480546841, 71.17978428633585, 71.3675605120337, 71.43053424626164, 72.17934919508117, 72.3808651446106, 72.6865739998626, 72.90869953513935, 72.89037990336394, 73.06556138221622, 73.36096544459457, 73.4514186264856, 73.51782729167144, 73.58996084178708, 73.68842886257987, 73.90368453594083, 74.0330669353546, 74.00673246467746, 74.06627126794751, 73.93917882250567, 74.05825642904577, 74.2254230689963, 74.21282832215073, 74.20481348324898, 74.25175753967345, 74.23916279282787, 74.27580205637867, 74.42235911058188, 74.40060454784859, 74.42121413359591, 74.21626325310861, 74.4338088804415, 74.29984657308388, 74.66394925461998, 74.43037394948361],\n\t\t\"train/span_acc\": [0.8896471180929263, 7.191600448830979, 14.019098216125856, 23.41706931690673, 31.412443609883443, 35.280175868465044, 37.36632393688887, 39.001351072843434, 40.58370926744372, 41.56151961345577, 42.76718037967437, 43.44615173235018, 44.12855801598388, 44.86019831001397, 45.47047104353202, 46.36927797751265, 46.70704618837161, 47.13984748906547, 47.71691588999061, 48.31802880762097, 48.573358675490624, 49.00387002221255, 49.402322013327534, 52.10790263115712, 53.18647095193386, 53.45439556664911, 54.13336691932492, 54.76882914653415, 54.82951292679017, 56.165701069408506, 56.80688818154755, 57.106872151869744, 57.469829856419885, 57.54654331447938, 58.23238452907096, 58.55984794705626, 58.97661956994664, 59.101422061416564, 59.112871831276195, 59.21935469097071, 59.772378575190636, 59.67047562343997, 59.88458631981497, 59.96702466280428, 60.024273512102404, 60.26700863312647, 60.37463646980696, 60.41356568732969, 60.501728915248805, 60.38608623966658, 60.284183287915916, 60.471959513613776, 60.72385445052554, 60.66775057821338, 60.74904394421672, 60.82575740227622, 60.71354965765188, 60.77652339187982, 60.82232247131833, 61.06276763837047, 60.741029105314986, 60.988344134282904, 60.83720717213584, 61.04673796056699, 60.98032929538116],\n\t\t\"train/em\": [1.0342583819449993, 7.986392538727611, 15.882601399559356, 26.695510222719438, 35.6248358999532, 39.97762531535748, 42.27331362230162, 44.233381659607986, 45.76193792166577, 47.050765419696575, 48.255117067546436, 49.055354513179374, 49.74942636331465, 50.68322697747691, 51.24716035571182, 52.03940684254386, 52.4823342732223, 52.89900569641206, 53.572529366773594, 54.08623386111714, 54.540576947225425, 54.892179134465, 55.42300711195333, 58.0349090743045, 59.32716126896426, 59.49725453486912, 60.13653123894108, 60.75069350106737, 60.8990970216555, 62.209614265003026, 62.8397584447311, 63.24158951586205, 63.488167673146954, 63.67652598773959, 64.28498042215094, 64.52014292400598, 65.0601034258382, 65.13658831721823, 65.27015148574755, 65.25987739586068, 65.76444936586034, 65.7678740624893, 66.00760282651629, 65.95623237708193, 66.01559378531718, 66.2998436055206, 66.40144293884633, 66.48820192011324, 66.5475633283485, 66.40030137330335, 66.36719597255676, 66.47792783022638, 66.73478007739814, 66.7541866916289, 66.74391260174203, 66.79756618226236, 66.80898183769222, 66.86948481147046, 66.87861733581434, 67.064692519321, 66.77930113357458, 66.99163232456992, 66.86263541821253, 66.98249980022602, 66.9688010137102],\n\t\t\"train/f1\": [7.150047734105509, 16.63170412613727, 26.19659288961383, 39.08138133061436, 49.84063113001966, 54.61454535767007, 57.143186253227746, 59.10524134986093, 60.71428109373346, 62.059277261947244, 63.21982678680412, 64.07990285325717, 64.87698501573175, 65.74865706973803, 66.32128910373044, 67.12752163349023, 67.50868689352882, 67.89652046625697, 68.41920511572731, 69.18789151532724, 69.42894162261885, 69.89257706785226, 70.3228442925677, 72.67823765403614, 73.82454766784191, 74.04671799090839, 74.6219246838363, 74.91264495078597, 75.18874316384371, 76.34421724432246, 76.88907106368313, 77.30056130121899, 77.50318492937623, 77.6535877815243, 78.33743091127086, 78.38863415983027, 78.81242449181157, 78.86354520575438, 78.96835118472518, 78.97697460642281, 79.39019526946112, 79.48265094902965, 79.58841871505763, 79.64187998228611, 79.62459297787933, 79.9101032860282, 80.02879371097904, 80.01883954391293, 80.09166524686128, 79.9815621415061, 80.03474289505635, 80.12950977457226, 80.23290285604988, 80.26405821264099, 80.28687106237878, 80.22713019725572, 80.28221497366124, 80.34851973450617, 80.40295881187913, 80.40065827498132, 80.34280037019676, 80.43921475619794, 80.32658524341801, 80.50858909402363, 80.39468830408457],\n\t\t\"valid/loss\": [8.255948972810152, 5.915341379420828, 5.165603543625397, 4.09425747637846, 3.4162629902227666, 3.2846769813507324, 3.205561557324295, 3.1158123729991263, 3.128326172055571, 3.076131648217199, 2.9896649645299327, 2.7874708310817105, 2.921256586807926, 3.0315158992938174, 2.781769103338929, 2.7369340300019367, 2.659010061466234, 2.908389812964701, 3.0148692762229987, 2.9282795726036537, 2.7956396157509076, 2.9713704398159537, 3.062869045537075, 2.773363924756342, 3.011526436492159, 2.9336592405020787, 2.905980131523409, 2.8350266742598174, 2.868667747158042, 2.945699503497472, 2.918121996515192, 3.015675984542656, 2.9449547623831127, 2.9032093983929173, 2.974846825848361, 2.950968151595317, 2.8892771217828437, 2.895898574063567, 3.102883370825493, 2.9213964879647945, 3.0979490190947137, 3.0246552370843434, 3.019246398456513, 3.037102747936638, 3.09164640598016, 3.042913777217303, 3.0085863671064916, 2.9791532334556927, 3.084758754625342, 3.030128677010266, 3.010667343393745, 3.1367937095311222, 3.029783969968895, 3.0280854511423176, 3.077031190027726, 3.0702189928820345, 3.063274392870819, 3.0583306350945887, 3.043750105125834, 3.0566056808646844, 3.059594034202515, 3.0572560739084707, 3.0632660667371856, 3.06162472620032, 3.0489957079865766],\n\t\t\"valid/epoch_time\": [287.46108889579773, 227.90340781211853, 222.4364550113678, 216.4619071483612, 222.15947246551514, 216.29195261001587, 214.69099068641663, 221.3820288181305, 216.5057213306427, 216.65303802490234, 222.42914581298828, 216.1564326286316, 216.6853802204132, 217.8182852268219, 224.5480830669403, 218.9715609550476, 219.65285968780518, 223.64484643936157, 217.82541251182556, 218.23222827911377, 224.46948266029358, 218.5539779663086, 218.37477159500122, 223.67253923416138, 218.8413109779358, 215.68055748939514, 222.2364730834961, 217.2599310874939, 217.65814018249512, 217.04646611213684, 221.7856466770172, 215.99438333511353, 215.92943477630615, 221.5010108947754, 209.42291712760925, 209.55638647079468, 218.70353651046753, 209.24770426750183, 209.31441521644592, 208.81332969665527, 201.30897331237793, 199.84483170509338, 203.9441864490509, 199.94291138648987, 190.84432768821716, 192.7756884098053, 187.47333455085754, 184.5499279499054, 192.43693470954895, 198.6127965450287, 176.0017011165619, 184.59607195854187, 179.56342768669128, 166.98182225227356, 174.152925491333, 185.67984318733215, 175.0498013496399, 180.09878587722778, 177.73906755447388, 172.00069618225098, 174.74165105819702, 167.67725229263306, 173.81641054153442, 164.90295362472534, 165.88444900512695],\n\t\t\"valid/start_acc\": [8.429517502365185, 23.273415326395458, 31.28666035950804, 48.99716177861873, 53.746452223273415, 55.808893093661304, 55.96026490066225, 53.7275307473983, 58.48628192999054, 58.675496688741724, 60.047303689687794, 60.61494796594134, 61.248817407757805, 61.343424787133394, 62.35572374645222, 61.788079470198674, 62.57332071901608, 62.52601702932829, 61.98675496688742, 62.384105960264904, 61.44749290444655, 61.28666035950804, 62.11920529801324, 62.56385998107852, 62.63008514664144, 62.42194891201514, 62.93282876064333, 62.70577105014191, 62.327341532639544, 62.44087038789026, 62.58278145695364, 62.57332071901608, 61.66508987701041, 62.39356669820246, 62.75307473982971, 62.73415326395459, 62.48817407757805, 62.47871333964049, 62.639545884579, 62.63008514664144, 62.544938505203405, 62.25165562913907, 62.42194891201514, 61.75023651844844, 62.469252601702934, 62.620624408703875, 62.28003784295175, 62.4314096499527, 62.60170293282876, 62.40302743614002, 62.57332071901608, 62.35572374645222, 62.42194891201514, 62.469252601702934, 62.63008514664144, 62.3368022705771, 62.535477767265846, 62.223273415326396, 62.36518448438978, 62.58278145695364, 62.47871333964049, 62.40302743614002, 62.50709555345317, 62.49763481551561, 62.49763481551561],\n\t\t\"valid/end_acc\": [9.044465468306528, 24.88174077578051, 33.140964995269634, 52.58278145695364, 57.29422894985809, 58.968779564806056, 60.22705771050142, 61.485335856196784, 62.37464522232734, 63.074739829706715, 63.80321665089877, 63.38694418164617, 64.5600756859035, 65.33585619678335, 65.19394512771996, 64.22894985808892, 65.97918637653737, 65.29801324503312, 64.69252601702932, 65.9508041627247, 64.66414380321665, 65.3926206244087, 65.67644276253547, 65.89403973509934, 65.55345316934721, 66.08325449385052, 65.9508041627247, 65.21286660359507, 65.3263954588458, 65.47776726584674, 66.12109744560075, 66.10217596972564, 65.57237464522233, 66.0170293282876, 65.96972563859981, 65.91296121097446, 66.0643330179754, 65.97918637653737, 66.09271523178808, 66.2251655629139, 66.27246925260171, 65.65752128666036, 66.41438032166509, 65.57237464522233, 65.99810785241249, 66.04541154210028, 66.20624408703878, 65.98864711447493, 66.26300851466415, 66.1116367076632, 66.23462630085146, 66.04541154210028, 66.14947965941343, 66.31031220435194, 66.26300851466415, 66.2251655629139, 66.15894039735099, 66.02649006622516, 66.02649006622516, 66.2251655629139, 66.19678334910122, 66.14001892147587, 66.23462630085146, 66.1116367076632, 66.16840113528855],\n\t\t\"valid/span_acc\": [3.6896877956480605, 17.95648060548723, 24.720908230842007, 41.248817407757805, 44.32355723746452, 46.859035004730366, 46.84957426679281, 45.47776726584674, 49.14853358561968, 49.422894985808895, 51.333964049195835, 50.87038789025544, 52.51655629139073, 52.989593188268685, 52.93282876064333, 51.97729422894986, 54.26679280983917, 53.50993377483444, 52.4314096499527, 53.226111636707664, 51.854304635761586, 52.48817407757805, 53.32071901608325, 53.528855250709555, 53.17880794701987, 53.36802270577105, 53.69914853358562, 52.94228949858089, 53.226111636707664, 53.2639545884579, 53.897824030274364, 54.40870387890256, 52.980132450331126, 53.62346263008514, 53.85052034058656, 53.86944181646168, 53.841059602649004, 53.614001892147584, 53.888363292336805, 54.03027436140019, 53.99243140964995, 53.53831598864711, 54.049195837275306, 53.140964995269634, 54.03027436140019, 53.973509933774835, 53.81267738883633, 53.661305581835386, 54.049195837275306, 53.85052034058656, 54.07757805108798, 53.92620624408704, 53.964049195837276, 53.95458845789972, 54.0964995269631, 53.888363292336805, 54.02081362346263, 53.64238410596027, 53.77483443708609, 54.07757805108798, 53.92620624408704, 53.897824030274364, 53.973509933774835, 53.94512771996216, 53.982970671712394],\n\t\t\"valid/em\": [4.370860927152318, 21.97729422894986, 30.321665089877012, 51.551561021759696, 56.177861873226114, 58.893093661305585, 60.24597918637654, 60.586565752128664, 61.82592242194891, 62.88552507095554, 63.73699148533586, 64.11542100283822, 65.49668874172185, 65.80889309366131, 66.00756859035005, 65.0236518448439, 66.92526017029329, 66.27246925260171, 65.71428571428571, 66.49006622516556, 64.78713339640493, 65.7899716177862, 66.50898770104068, 66.82119205298014, 66.47114474929045, 67.01040681173131, 67.13339640491958, 66.03595080416272, 66.32923368022706, 66.49006622516556, 67.55912961210974, 67.65373699148533, 66.53736991485336, 67.18070009460737, 67.4077578051088, 67.24692526017029, 67.62535477767265, 67.11447492904446, 67.4077578051088, 67.33207190160833, 67.41721854304636, 66.84011352885526, 67.67265846736045, 66.84957426679281, 67.46452223273415, 67.6158940397351, 67.49290444654683, 67.34153263954589, 67.7294228949858, 67.54966887417218, 67.67265846736045, 67.59697256385998, 67.63481551561021, 67.63481551561021, 67.83349101229896, 67.55912961210974, 67.71996215704824, 67.41721854304636, 67.51182592242195, 67.76726584673605, 67.57805108798486, 67.57805108798486, 67.67265846736045, 67.63481551561021, 67.71996215704824],\n\t\t\"valid/f1\": [11.266146019810424, 30.772402372897893, 40.10075805725353, 62.220128029590626, 67.9484941604292, 69.82032376677888, 71.54927060569607, 72.20567648137283, 73.21076038103618, 73.71064584987039, 73.93403603109759, 74.416882277429, 75.3439026970129, 75.62636078290245, 76.0333251040766, 75.18245755711935, 76.19728182025369, 76.00926386634342, 76.03215827514094, 76.37251267962549, 75.56392096319695, 75.79021151369639, 76.13802079198902, 76.65071732165994, 76.40813974097514, 76.80525713720175, 76.6778873725336, 76.17081276576117, 75.96335697004196, 76.27771175633562, 76.9036583840013, 76.69783533879072, 76.18528440702401, 76.60309722540178, 76.6982441344683, 76.58797384373058, 77.01409520956456, 76.8748504664614, 76.79104822097199, 76.86368945830043, 76.81899070543213, 76.3542346457786, 77.0531810950532, 76.42858371934507, 76.71813045388687, 77.01527290444345, 76.85797666378635, 76.88914052002201, 77.06747114046203, 76.85733929273742, 76.9899426388657, 76.8706795549681, 77.02189951127839, 77.08313535436119, 77.13077790254637, 76.94931769174534, 77.05748374460357, 76.87845291687933, 76.86475449258185, 77.02177711332001, 76.92178675214353, 76.9404529198229, 76.99248635694408, 76.93969188857635, 76.9873356935659],\n\t\t\"best_step\": 200200\n\t},\n\t\"inferency_latency\": {\n\t\t\"cpu\": {\n\t\t\t\"max_token_count_per_time\": {\n\t\t\t\t\"100\": 71,\n\t\t\t\t\"200\": 140,\n\t\t\t\t\"300\": 186,\n\t\t\t\t\"400\": 220,\n\t\t\t\t\"500\": 252,\n\t\t\t\t\"600\": 276,\n\t\t\t\t\"700\": 309,\n\t\t\t\t\"800\": 335,\n\t\t\t\t\"900\": 359,\n\t\t\t\t\"1000\": 384,\n\t\t\t\t\"1100\": 410,\n\t\t\t\t\"1200\": 438,\n\t\t\t\t\"1300\": 466,\n\t\t\t\t\"1400\": 491,\n\t\t\t\t\"1500\": 492\n\t\t\t}\n\t\t},\n\t\t\"gpu\": {\n\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "requirements.txt",
    "content": "# Python Package\npip>=20.0.0\n\n# Backends\nnumpy>=1.15.0\ntorch>=1.3.1\n\n# Tokenizer\nkonlpy\nnltk\nspacy==2.1.8\nhttps://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.1.0/en_core_web_sm-2.1.0.tar.gz\n\n# BERT\ntransformers==2.11.0\n\n# WikiSQL\nbabel\nrecords\n\n# Utils\nh5py\njsbeautifier\nmsgpack\noverrides\nrequests\ngensim\ntqdm\ntensorboardX\nPyYAML==5.3.1\n\n# Test, CI\npytest>=3.6\npytest-cov\n\n# Metrics\npycm\nseqeval\nscikit-learn\n"
  },
  {
    "path": "script/convert_checkpoint_to_bert_model.py",
    "content": "\nimport sys\nimport os\nsys.path.append(os.path.join(os.path.dirname(__file__), \"..\"))\n\nimport argparse\nfrom collections import OrderedDict\n\nimport torch\n\n\ndef convert_checkpoint_to_bert_model(checkpoint_path, output_path):\n    checkpoint = torch.load(checkpoint_path, map_location=\"cpu\")\n    model_weights = checkpoint[\"weights\"]\n\n    bert_model_weights = OrderedDict()\n    for key, tensor in model_weights.items():\n        if \"_model\" in key or \"shared_layers\" in key:\n            new_key = key.replace(\"_model\", \"bert\").replace(\"shared_layers\", \"bert\")\n            bert_model_weights[new_key] = tensor\n\n    torch.save(bert_model_weights, output_path)\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument('checkpoint_path', type=str,\n                        help=\"\"\"CLaF Checkpoint Path\"\"\")\n    parser.add_argument('output_path', type=str,\n                        help=\"\"\"BERT model output_path\"\"\")\n    args = parser.parse_args()\n\n    convert_checkpoint_to_bert_model(args.checkpoint_path, args.output_path)\n"
  },
  {
    "path": "script/convert_embedding_to_vocab_txt.py",
    "content": "\nimport argparse\n\n\ndef read_embedding_vocabs(file_path):\n    print(\"Reading vocabs from file\")\n    vocabs = []\n    with open(file_path, \"rb\") as embeddings_file:\n        for line in embeddings_file:\n            fields = line.decode(\"utf-8\").rstrip().split(\" \")\n            word = fields[0]\n            vocabs.append(word)\n    return vocabs\n\n\ndef write_vocab(embedding_vocabs, output_path):\n    print(\"Write vocabs\")\n    vocab_texts = \"\\n\".join(embedding_vocabs)\n    with open(output_path, \"wb\") as vocab_file:\n        vocab_file.write(vocab_texts.encode(\"utf-8\"))\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument('embed_path', type=str,\n                        help='Pretrained embedding txt path')\n    parser.add_argument('output_path', type=str,\n                        help='vocab_texts output path')\n    args = parser.parse_args()\n\n    embedding_vocabs = read_embedding_vocabs(args.embed_path)\n    write_vocab(embedding_vocabs, args.output_path)\n"
  },
  {
    "path": "script/download_wikisql.sh",
    "content": "mkdir -p data/wikisql\ncd data/wikisql\nwget https://github.com/salesforce/WikiSQL/raw/master/data.tar.bz2\ntar xvjf data.tar.bz2\n\nmv data/* .\n\nrm data.tar.bz2\nrm -r data\n"
  },
  {
    "path": "script/install_mecab.sh",
    "content": "#!/bin/sh\n\nOUT_DIR=\"${1:-./mecab}\"\n\nmkdir -v -p $OUT_DIR\n\napt-get install git cmake make automake wget\n\nwget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz\nwget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.1.1-20180720.tar.gz\n\nmv mecab-0.996-ko-0.9.2.tar.gz \"$OUT_DIR/\"\nmv mecab-ko-dic-2.1.1-20180720.tar.gz \"$OUT_DIR/\"\n\ncd \"$OUT_DIR\"\n\ntar -zxvf mecab-0.996-ko-0.9.2.tar.gz\ncd mecab-0.996-ko-0.9.2\n./configure\nmake\nmake check\nmake install\ncd ../\n\nldconfig\ntar -zxvf mecab-ko-dic-2.1.1-20180720.tar.gz\ncd mecab-ko-dic-2.1.1-20180720\n./autogen.sh\n./configure\nmake\nmake install\n\npip install mecab-python3\n"
  },
  {
    "path": "script/make_squad_synthetic_data.py",
    "content": "\nimport argparse\nimport json\nimport os\nimport random\nimport uuid\n\n\ndef make_squad_synthetic_data(output_path, max_context_length, question_lengths):\n    ANSWER_TOKEN = \"ANSWER\"\n\n    out_squad = {'data': [], 'version': \"0.1\"}\n    article = {\n        \"paragraphs\": [],\n        \"title\": \"Synthetic data for test\"\n    }\n\n    for token_count in range(10, max_context_length):\n        qas = []\n        for question_length in question_lengths:\n            answers = [{\"answer_start\": 0, \"answer_end\": 0, \"text\": ANSWER_TOKEN}]\n            qa = {\n                \"id\": str(uuid.uuid1()),\n                \"answers\": answers,\n                \"question\": make_random_tokens(question_length)\n            }\n            qas.append(qa)\n\n        paragraph = {\n            \"context\": make_random_tokens(token_count, answer_token=ANSWER_TOKEN),\n            \"qas\": qas\n        }\n        article[\"paragraphs\"].append(paragraph)\n    out_squad['data'].append(article)\n\n    with open(output_path, 'w') as fp:\n        json.dump(out_squad, fp)\n\n\ndef make_random_tokens(length, answer_token=\"\"):\n    tokens = ['kox', 'pev', 'hi', 'shemini', 'outvote']\n\n    if answer_token:\n        output = [answer_token]\n    else:\n        output = []\n    for _ in range(length-1):\n        output.append(random.choice(tokens))\n    return \" \".join(output)\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument('output_path', type=str,\n                        help='synthetic data output path')\n    parser.add_argument('--max_context_length', type=int,\n                        help='The number of maximum context length')\n    parser.add_argument('--question_lengths', nargs=\"+\", type=int,\n                        help='The numbers of question length')\n    args = parser.parse_args()\n\n    make_squad_synthetic_data(args.output_path, args.max_context_length, args.question_lengths)\n"
  },
  {
    "path": "script/plot.py",
    "content": "import argparse\nimport json\nimport os\n\nfrom matplotlib import pyplot as plt\nimport numpy as np\nimport seaborn\nfrom sklearn import linear_model\n\nseaborn.set()\nseaborn.set_style(\"whitegrid\")\n\n\ndef make_inference_latency_plot(result_dir, max_elapsed_time=2000):\n\n    token_counts = []  # x\n    inference_latencies = []  # y\n    model_names = []  # Legend\n\n    linear_regr_models = []  # Linear Regression for expect token_counts (SQuAD's context: 50 ~ 700 tokens)\n\n    for file_path in os.listdir(result_dir):\n        result_path = os.path.join(result_dir, file_path)\n        if not result_path.endswith(\".json\"):\n            continue\n\n        with open(result_path, \"r\") as f:\n            model_name = os.path.basename(result_path).replace(\".json\", \"\")\n            model_names.append(model_name)\n\n            result = json.load(f)\n            token_count = [r[\"token_count\"] for r in result[\"tensor_to_predicts\"]]\n            inference_latency = [r[\"elapsed_time\"] for r in result[\"tensor_to_predicts\"]]\n\n            token_counts.append(token_count)\n            inference_latencies.append(inference_latency)\n\n            # Create linear regression for predict token_counts\n            regr = linear_model.LinearRegression()\n            regr.fit(\n                np.array(inference_latency).reshape(-1, 1), np.array(token_count).reshape(-1, 1)\n            )\n            linear_regr_models.append(regr)\n\n    f_name = f\"inference_latency_chart-{max_elapsed_time}.png\"\n    title = \"Inference Latency\"\n\n    zipped_data = list(zip(model_names, token_counts, inference_latencies, linear_regr_models))\n    zipped_data.sort()\n\n    # get maximum token count\n    for zipped in zipped_data:\n        model_name, token_counts, inference_latencies, linear_regr_model = zipped\n\n        max_token_count = 0\n        for token_count, inference_latency in zip(token_counts, inference_latencies):\n            if inference_latency <= max_elapsed_time and max_token_count < token_count:\n                max_token_count = token_count\n\n        token_logs = f\"model_name: {model_name} | \"\n        token_logs += f\"max_token_count: {max_token_count} \"\n        token_logs += f\"(predict: {int(linear_regr_model.predict(np.array(max_elapsed_time).reshape(-1, 1)))})\"\n        token_logs += f\" / {max_elapsed_time} mills\"\n        print(token_logs)\n\n    model_names, token_counts, inference_latencies, linear_regr_models = zip(*zipped_data)\n\n    make_scatter(\n        token_counts,\n        inference_latencies,\n        f_name,\n        linear_regr_models=linear_regr_models,\n        alpha=0.2,\n        size=[18, 10],\n        s=20,\n        legends=model_names,\n        x_min=0,\n        x_max=800,\n        y_min=0,\n        y_max=max_elapsed_time,\n        x_label=\"Tokens\",\n        y_label=\"1-example Latency (milliseconds)\",\n        title=title,\n        markerscale=5,\n    )\n\n\ndef make_summary_plot(result_dir, max_elapsed_time=100):\n\n    max_token_counts = []  # x\n    f1_scores = []  # y\n    model_names = []  # Legend\n\n    for file_path in os.listdir(result_dir):\n        result_path = os.path.join(result_dir, file_path)\n        if not result_path.endswith(\".json\"):\n            continue\n\n        with open(result_path, \"r\") as f:\n            model_name = os.path.basename(result_path).replace(\".json\", \"\")\n\n            result = json.load(f)\n\n            model_names.append(model_name + \"_cpu\")\n            model_names.append(model_name + \"_gpu\")\n\n            f1_scores.append([result[\"metrics\"][\"best\"][\"valid/f1\"]])\n            f1_scores.append([result[\"metrics\"][\"best\"][\"valid/f1\"]])\n\n            max_token_counts.append(\n                [result[\"inferency_latency\"][\"cpu\"][\"max_token_count\"][str(max_elapsed_time)]]\n            )\n            max_token_counts.append(\n                [result[\"inferency_latency\"][\"gpu\"][\"max_token_count\"][str(max_elapsed_time)]]\n            )\n\n    f_name = f\"summary.png\"\n    title = \"Model Summary\"\n\n    zipped_data = list(zip(model_names, f1_scores, max_token_counts))\n    zipped_data.sort()\n\n    model_names, f1_scores, max_token_counts = zip(*zipped_data)\n\n    latency_min, latency_max = 0, 1000\n    f1_min, f1_max = 60, 80\n\n    make_scatter(\n        max_token_counts,\n        f1_scores,\n        f_name,\n        is_env_with_color=True,\n        size=[18, 10],\n        legends=model_names,\n        s=400,\n        alpha=1,\n        y_min=60,\n        y_max=80,\n        x_min=0,\n        x_max=700,\n        x_ticks=list(range(latency_min, latency_max + 1, 100)),\n        y_ticks=list(range(f1_min, f1_max + 1, 5)),\n        x_label=f\"Maximum token count ({max_elapsed_time} milliseconds)\",\n        y_label=\"F1 Score\",\n        title=title,\n    )\n\n\ndef make_scatter(\n    x,\n    y,\n    f_name,\n    is_env_with_color=False,\n    linear_regr_models=None,\n    size=[10, 14],\n    title=None,\n    legends=None,\n    s=10,\n    alpha=0.6,\n    markerscale=1,\n    x_min=None,\n    y_min=None,\n    x_max=None,\n    y_max=None,\n    x_label=None,\n    y_label=None,\n    x_ticks=None,\n    y_ticks=None,\n):\n    fig = plt.figure(figsize=(size[0], size[1]))\n\n    markers = [\"o\", \"*\", \"v\", \"^\", \"<\", \">\", \"8\", \"s\", \"p\", \"h\", \"H\", \"D\", \"d\", \"P\", \"X\"]\n\n    if title is not None:\n        plt.title(title, fontsize=32)\n    if x_label is not None:\n        plt.xlabel(x_label, fontsize=22)\n    if y_label is not None:\n        plt.ylabel(y_label, fontsize=22)\n    if x_min is not None or x_max is not None:\n        plt.xlim(xmin=x_min, xmax=x_max)\n    if y_min is not None or y_max is not None:\n        plt.ylim(ymin=y_min, ymax=y_max)\n    if x_ticks is not None:\n        plt.xticks(x_ticks, x_ticks, fontsize=18)\n    else:\n        plt.xticks(fontsize=18)\n    if y_ticks is not None:\n        plt.yticks(y_ticks, y_ticks, fontsize=18)\n    else:\n        plt.yticks(fontsize=18)\n\n    if isinstance(x[0], list) and isinstance(y[0], list):\n        for index, (x_item, y_item) in enumerate(zip(x, y)):\n            if is_env_with_color:\n                i = int(index / 2)\n                if index % 2 == 0:\n                    plt.scatter(x_item, y_item, s=s, c=\"b\", marker=markers[i], alpha=alpha)\n                else:\n                    plt.scatter(x_item, y_item, s=s, c=\"g\", marker=markers[i], alpha=alpha)\n            else:\n                if index % 2 == 0:\n                    plt.scatter(x_item, y_item, s=s, marker=\"o\", alpha=alpha)\n                else:\n                    plt.scatter(x_item, y_item, s=s, marker=\"^\", alpha=alpha)\n\n    else:\n        plt.scatter(x, y, s=s, alpha=alpha)\n\n    if linear_regr_models is not None:\n        ys = np.arange(y_min, y_max)\n        for model in linear_regr_models:\n            xs = [int(model.predict(np.array(y).reshape(-1, 1))) for y in ys]\n            plt.plot(xs, ys)\n\n    if legends is not None:\n        plt.legend(\n            legends,\n            fontsize=24,\n            fancybox=True,\n            shadow=True,\n            loc=(1.04, 0.3),\n            markerscale=markerscale,\n        )\n\n    plt.savefig(f_name, bbox_inches=\"tight\")\n    plt.close(fig)\n\n\nif __name__ == \"__main__\":\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        \"plot_type\", type=str, default=\"inference\", help=\"Plot type [inference|summary]\"\n    )\n    parser.add_argument(\n        \"--result_dir\", type=str, default=\"inference_result\", help=\"SQuAD official json file path\"\n    )\n    parser.add_argument(\n        \"--max_latency\",\n        type=int,\n        default=2000,\n        help=\"The number of maximum latency time. (milliseconds)\",\n    )\n\n    config = parser.parse_args()\n\n    if config.plot_type == \"inference\":\n        make_inference_latency_plot(config.result_dir, max_elapsed_time=config.max_latency)\n    elif config.plot_type == \"summary\":\n        make_summary_plot(config.result_dir, max_elapsed_time=config.max_latency)\n    else:\n        raise ValueError(f\"not supported plot_type: {config.plot_type}\")\n\n    print(f\"Complete make {config.plot_type} plot\")\n"
  },
  {
    "path": "setup.py",
    "content": "\nimport io\nimport os\nimport sys\nfrom shutil import rmtree\n\nfrom setuptools import find_packages, setup, Command\n\n\n# Package meta-data.\nNAME = 'claf'\nDESCRIPTION = 'CLaF: Clova Language Framework'\nURL = 'https://github.com/naver/claf'\nEMAIL = 'humanbrain.djlee@gmail.com'\nAUTHOR = 'Dongjun Lee'\nREQUIRES_PYTHON = '>=3.6.0'\nVERSION = None\n\nREQUIRED = [\n    \"numpy>=1.15.0\", \"torch>=1.0.1\", # Backends\n    \"pytorch-transformers==1.1.0\",  # BERT\n    \"konlpy\", \"nltk\", \"spacy\",  # Tokenizer\n    \"babel\", \"records\",  # WikiSQL\n    \"h5py\", \"jsbeautifier\", \"msgpack\", \"overrides\", \"requests\", \"gensim\", \"tqdm\", \"tensorboardX\",  # Utils\n    \"pycm\", \"seqeval\", \"scikit-learn\",  # Metrics\n]\n\nEXTRAS = {}\n\n\nhere = os.path.abspath(os.path.dirname(__file__))\n\n# Import the README and use it as the long-description.\ntry:\n    with io.open(os.path.join(here, 'README.md'), encoding='utf-8') as f:\n        long_description = '\\n' + f.read()\nexcept FileNotFoundError:\n    long_description = DESCRIPTION\n\n# Load the package's __version__.py module as a dictionary.\nabout = {}\nif not VERSION:\n    with open(os.path.join(here, NAME, '__version__.py')) as f:\n        exec(f.read(), about)\nelse:\n    about['__version__'] = VERSION\n\n\nclass UploadCommand(Command):\n    \"\"\"Support setup.py upload.\"\"\"\n\n    description = 'Build and publish the package.'\n    user_options = []\n\n    @staticmethod\n    def status(s):\n        \"\"\"Prints things in bold.\"\"\"\n        print('\\033[1m{0}\\033[0m'.format(s))\n\n    def initialize_options(self):\n        pass\n\n    def finalize_options(self):\n        pass\n\n    def run(self):\n        try:\n            self.status('Removing previous builds…')\n            rmtree(os.path.join(here, 'dist'))\n        except OSError:\n            pass\n\n        self.status('Building Source and Wheel (universal) distribution…')\n        os.system('{0} setup.py sdist bdist_wheel --universal'.format(sys.executable))\n\n        self.status('Uploading the package to PyPI via Twine…')\n        os.system('twine upload dist/*')\n\n        self.status('Pushing git tags…')\n        os.system('git tag v{0}'.format(about['__version__']))\n        os.system('git push --tags')\n\n        sys.exit()\n\n\nsetup(\n    name=NAME,\n    version=about['__version__'],\n    description=DESCRIPTION,\n    long_description=long_description,\n    long_description_content_type='text/markdown',\n    author=AUTHOR,\n    author_email=EMAIL,\n    python_requires=REQUIRES_PYTHON,\n    url=URL,\n    packages=find_packages(exclude=('tests',)),\n    install_requires=REQUIRED,\n    extras_require=EXTRAS,\n    include_package_data=True,\n    license='MIT',\n    classifiers=[\n        # Trove classifiers\n        # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers\n        'License :: OSI Approved :: MIT License',\n        'Programming Language :: Python',\n        'Programming Language :: Python :: 3',\n        'Programming Language :: Python :: 3.6',\n        'Programming Language :: Python :: Implementation :: CPython',\n        'Programming Language :: Python :: Implementation :: PyPy'\n    ],\n    # $ setup.py publish support.\n    cmdclass={\n        'upload': UploadCommand,\n    },\n)\n"
  },
  {
    "path": "tests/__init__.py",
    "content": "\n"
  },
  {
    "path": "tests/claf/data/test_batch.py",
    "content": "\nfrom claf.data.utils import make_batch\n\n\ndef test_make_batch():\n    features = {\n        \"f1\": 0,\n        \"f2\": 1,\n        \"f3\": 3,\n    }\n\n    labels = {\n        \"l1\": 0,\n        \"l2\": 1,\n        \"l3\": 2,\n    }\n\n    batch = make_batch(features, labels)\n\n    assert batch.features == features\n    assert batch.labels == labels\n\n\ndef test_batch_sort_by_key():\n\n    features = [\n        {\"f1\": \"long long long\"},\n        {\"f1\": \"short\"},\n        {\"f1\": \"mid mid\"}\n    ]\n\n    labels = [\n        {\"l1\": 3},\n        {\"l1\": 1},\n        {\"l1\": 2},\n    ]\n\n    batch = make_batch(features, labels)\n    batch.sort_by_key(\"f1\")\n\n    assert batch.features == sorted(features, key=lambda x: len(x[\"f1\"]))\n"
  },
  {
    "path": "tests/claf/machine/knowlege_base/test_docs.py",
    "content": "\nimport json\nimport os\n\nfrom claf.machine.knowlege_base.docs import read_wiki_articles\n\n\ndef test_read_wiki_articles():\n    articles = [\n        {\"id\": 0 , \"url\": \"url\", \"title\": \"title\", \"text\": \"text\"},\n        {\"id\": 1 , \"url\": \"url\", \"title\": \"title\", \"text\": \"text\"},\n        {\"id\": 2 , \"url\": \"url\", \"title\": \"title\", \"text\": \"text\"},\n    ]\n\n    file_path = \"./wiki_articles.json\"\n    with open(file_path, \"w\", encoding=\"utf-8\") as out_file:\n        for article in articles:\n            out_file.write(json.dumps(article))\n\n    articles = read_wiki_articles(file_path)\n    os.remove(file_path)\n"
  },
  {
    "path": "tests/claf/modules/test_functional.py",
    "content": "\nimport torch\n\nimport claf.modules.functional as f\n\n\ndef test_add_masked_value():\n    a = torch.rand(3, 5)\n    a_mask = torch.FloatTensor([\n        [1, 1, 1, 0, 0],\n        [1, 1, 0, 0, 0],\n        [1, 1, 1, 1, 1],\n    ])\n\n    tensor = f.add_masked_value(a, a_mask, value=100)\n\n    assert tensor[0][3] == 100\n    assert tensor[0][4] == 100\n    assert tensor[1][2] == 100\n    assert tensor[1][3] == 100\n    assert tensor[1][4] == 100\n\n\ndef test_add_masked_value_with_byte_tensor():\n    a = torch.rand(3, 5)\n    a_mask = torch.ByteTensor([\n        [1, 1, 1, 0, 0],\n        [1, 1, 0, 0, 0],\n        [1, 1, 1, 1, 1],\n    ])\n\n    tensor = f.add_masked_value(a, a_mask, value=100)\n\n    assert tensor[0][3] == 100\n    assert tensor[0][4] == 100\n    assert tensor[1][2] == 100\n    assert tensor[1][3] == 100\n    assert tensor[1][4] == 100\n\n\ndef test_get_mask_from_tokens_with_2_dim():\n    tokens = {\n        \"word\" : torch.LongTensor([\n            [1, 1, 1, 0, 0],\n            [1, 1, 0, 0, 0],\n            [1, 1, 1, 1, 1],\n        ]),\n    }\n\n    mask = f.get_mask_from_tokens(tokens)\n    print(mask)\n    assert mask.equal(tokens[\"word\"])\n\n\ndef test_get_mask_from_tokens_with_3_dim():\n    tokens = {\n        \"char\" : torch.LongTensor([\n            [[4, 2], [3, 6], [0, 0]],\n            [[5, 1], [0, 0], [0, 0]],\n            [[1, 3], [2, 4], [3, 6]],\n        ]),\n    }\n\n    mask = f.get_mask_from_tokens(tokens)\n    expect_tensor = torch.LongTensor([\n        [1, 1, 0],\n        [1, 0, 0],\n        [1, 1, 1],\n    ])\n    assert mask.equal(expect_tensor)\n\n\ndef test_last_dim_masked_softmax_with_2_dim():\n    tensor = torch.FloatTensor([\n            [2, 3, 1, 0, 0],\n            [4, 1, 0, 0, 0],\n            [1, 5, 2, 4, 1],\n        ])\n    mask = f.get_mask_from_tokens({\"word\": tensor}).float()\n\n    result = f.last_dim_masked_softmax(tensor, mask)\n    assert result.argmax(dim=-1).equal(torch.LongTensor([1, 0, 1]))\n\n\ndef test_masked_softmax():\n    tensor = torch.FloatTensor([\n            [2, 3, 1, 4, 5],\n            [4, 1, 6, 9, 10],\n            [1, 5, 2, 4, 1],\n        ])\n    mask = torch.tensor([\n        [1., 1., 1., 0., 0.],\n        [1., 1., 0., 0., 0.],\n        [1., 1., 1., 1., 1.]\n    ])\n\n    result = f.masked_softmax(tensor, mask)\n    assert result.argmax(dim=-1).equal(torch.LongTensor([1, 0, 1]))\n\n\ndef test_masked_zero():\n    tensor = torch.FloatTensor([\n            [2, 3, 1, 4, 5],\n            [4, 1, 6, 9, 10],\n            [1, 5, 2, 4, 1],\n        ])\n    mask = torch.tensor([\n        [1., 1., 1., 0., 0.],\n        [1., 1., 0., 0., 0.],\n        [1., 1., 1., 1., 1.]\n    ])\n\n    result = f.masked_zero(tensor, mask)\n    assert result[0][3] == 0\n    assert result[0][4] == 0\n    assert result[1][2] == 0\n    assert result[1][3] == 0\n    assert result[1][4] == 0\n\n    result = f.masked_zero(tensor.long(), mask)\n    assert result[0][3] == 0\n    assert result[0][4] == 0\n    assert result[1][2] == 0\n    assert result[1][3] == 0\n    assert result[1][4] == 0\n\n    result = f.masked_zero(tensor.byte(), mask)\n    assert result[0][3] == 0\n    assert result[0][4] == 0\n    assert result[1][2] == 0\n    assert result[1][3] == 0\n    assert result[1][4] == 0\n\n\ndef test_get_sorted_seq_config():\n    tensor = torch.LongTensor([\n            [2, 3, 1, 0, 0],\n            [4, 1, 0, 0, 0],\n            [1, 5, 2, 4, 1],\n        ])\n\n    seq_config = f.get_sorted_seq_config({\"word\": tensor})\n    assert seq_config[\"seq_lengths\"].tolist() == [5, 3, 2]\n    assert seq_config[\"perm_idx\"].tolist() == [2, 0, 1]\n    assert seq_config[\"unperm_idx\"].tolist() == [1, 2, 0]\n\n\ndef test_forward_rnn_with_pack():\n    tensor = torch.LongTensor([\n            [2, 3, 1, 0, 0],\n            [4, 1, 0, 0, 0],\n            [1, 5, 2, 4, 1],\n        ])\n    matrix = torch.rand(10, 10)\n    embedded_tensor = torch.nn.functional.embedding(tensor, matrix)\n\n    seq_config = f.get_sorted_seq_config({\"word\": tensor})\n\n    gru = torch.nn.GRU(input_size=10, hidden_size=1, bidirectional=False, batch_first=True)\n    encoded_tensor = f.forward_rnn_with_pack(gru, embedded_tensor, seq_config)\n    assert encoded_tensor[0][3] == 0\n    assert encoded_tensor[0][4] == 0\n    assert encoded_tensor[1][2] == 0\n    assert encoded_tensor[1][3] == 0\n    assert encoded_tensor[1][4] == 0\n"
  },
  {
    "path": "tests/claf/tokens/test_vocabulary.py",
    "content": "\nfrom collections import Counter\nimport os\n\nfrom claf.tokens.vocabulary import Vocab\n\n\ndef test_init_vocab():\n    vocab = Vocab(\"token_name\")\n    vocab.init()\n\n    assert vocab.get_all_tokens() == [\"[PAD]\", \"[UNK]\"]\n\n\ndef test_init_vocab_with_special_token():\n    vocab = Vocab(\"token_name\", start_token=\"<s>\", end_token=\"</s>\", cls_token=\"[CLS]\", sep_token=\"[SEP]\")\n    vocab.init()\n\n    assert vocab.get_all_tokens() == [\"[PAD]\", \"[UNK]\", \"<s>\", \"</s>\", \"[CLS]\", \"[SEP]\"]\n\n\ndef test_from_texts():\n    texts = \"A\\nB\\nC\\nD\"\n\n    vocab = Vocab(\"token_name\")\n    vocab.from_texts(texts)\n\n    assert vocab.get_all_tokens() == [\"A\", \"B\", \"C\", \"D\", \"[PAD]\", \"[UNK]\"]\n\n\ndef test_from_texts_with_pad():\n    texts = \"<pad>\\nA\\nB\\nC\\nD\"\n\n    vocab = Vocab(\"token_name\", pad_token=\"<pad>\")\n    vocab.from_texts(texts)\n\n    assert vocab.get_all_tokens() == [\"<pad>\", \"A\", \"B\", \"C\", \"D\", \"[UNK]\"]\n\n\ndef test_from_texts_with_pad_but_not_define():\n    texts = \"<pad>\\nA\\nB\\nC\\nD\"\n\n    vocab = Vocab(\"token_name\")\n    vocab.from_texts(texts)\n\n    assert vocab.get_all_tokens() == [\"<pad>\", \"A\", \"B\", \"C\", \"D\", \"[PAD]\", \"[UNK]\"]\n\n\ndef test_build():\n    tokens = [\"A\", \"A\", \"A\", \"B\", \"B\"]\n    token_counter = Counter(tokens)\n\n    vocab = Vocab(\"token_name\")\n    vocab.build(token_counter)\n\n    assert vocab.get_all_tokens() == [\"[PAD]\", \"[UNK]\", \"A\", \"B\"]\n\n\ndef test_build_with_max_vocab_size():\n    tokens = [\"A\", \"A\", \"A\", \"B\", \"B\"]\n    token_counter = Counter(tokens)\n\n    vocab = Vocab(\"token_name\", max_vocab_size=1)\n    vocab.build(token_counter)\n\n    assert vocab.get_all_tokens() == [\"[PAD]\", \"[UNK]\", \"A\"]\n\n\ndef test_build_with_min_count():\n    tokens = [\"A\", \"A\", \"A\", \"B\", \"B\"]\n    token_counter = Counter(tokens)\n\n    vocab = Vocab(\"token_name\", min_count=3)\n    vocab.build(token_counter)\n\n    assert vocab.get_all_tokens() == [\"[PAD]\", \"[UNK]\", \"A\"]\n\n\ndef test_get_token():\n    texts = \"A\\nB\\nC\\nD\"\n\n    vocab = Vocab(\"token_name\")\n    vocab.from_texts(texts)\n\n    assert vocab.get_all_tokens() == [\"A\", \"B\", \"C\", \"D\", \"[PAD]\", \"[UNK]\"]\n    assert vocab.get_token(2) == \"C\"\n\n\ndef test_save_and_load():\n    texts = \"A\\nB\\nC\\nD\"\n\n    vocab = Vocab(\"token_name\")\n    vocab.from_texts(texts)\n\n    vocab_path = \"./test_vocab.txt\"\n    vocab.dump(vocab_path)\n\n    vocab2 = Vocab(\"token_name\")\n    vocab2.load(vocab_path)\n\n    os.remove(vocab_path)\n    assert vocab.get_all_tokens() == vocab2.get_all_tokens()\n\n\ndef test_build_with_pretrained_file_all():\n    texts = \"[PAD]\\n[UNK]\\nA\\nB\\nC\\nD\"\n\n    vocab_path = \"./test_vocab.txt\"\n    with open(vocab_path, \"w\", encoding=\"utf-8\") as out_file:\n        out_file.write(texts)\n\n    vocab = Vocab(\"token_name\", pretrained_path=vocab_path, pretrained_token=Vocab.PRETRAINED_ALL)\n\n    token_counter = None\n    vocab.build_with_pretrained_file(token_counter)\n\n    os.remove(vocab_path)\n    assert vocab.get_all_tokens() == [\"[PAD]\", \"[UNK]\", \"A\", \"B\", \"C\", \"D\"]\n\n\ndef test_build_with_pretrained_file_intersect():\n    texts = \"[PAD]\\n[UNK]\\nA\\nB\\nC\\nD\"\n\n    vocab_path = \"./test_vocab.txt\"\n    with open(vocab_path, \"w\", encoding=\"utf-8\") as out_file:\n        out_file.write(texts)\n\n    vocab = Vocab(\"token_name\", pretrained_path=vocab_path, pretrained_token=Vocab.PRETRAINED_INTERSECT)\n\n    input_texts = [\"B\", \"C\", \"D\", \"E\"]\n    token_counter = Counter(input_texts)\n    vocab.build_with_pretrained_file(token_counter)\n\n    os.remove(vocab_path)\n    assert vocab.get_all_tokens() == [\"[PAD]\", \"[UNK]\", \"B\", \"C\", \"D\"]\n"
  },
  {
    "path": "tests/integration/test_config.py",
    "content": "\nimport json\n\nfrom claf.config import args\nfrom claf.config.namespace import NestedNamespace\nfrom claf.learn.mode import Mode\n\n\ndef test_train_argparse():\n    train_config = args.config(argv=[\"--seed_num\", \"4\"], mode=Mode.TRAIN)\n\n    assert train_config.seed_num == 4\n\n\ndef test_train_base_config_argparse():\n    train_config = args.config(argv=[\"--base_config\", \"test/bidaf\"], mode=Mode.TRAIN)\n\n    config = NestedNamespace()\n    with open(\"base_config/test/bidaf.json\", \"r\") as f:\n        defined_config = json.load(f)\n    config.load_from_json(defined_config)\n    args.set_gpu_env(config)\n\n    assert train_config == config\n\n\ndef test_eval_argparse():\n    eval_config = args.config(argv=[\"data_path\", \"checkpoint_path\"], mode=Mode.EVAL)\n    print(eval_config)\n\n\ndef test_predict_argparse():\n    predict_config = args.config(argv=[\"checkpoint_path\"], mode=Mode.PREDICT)\n    print(predict_config)\n\n\ndef test_machine_argparse():\n    machine_config = args.config(argv=[\"--machine_config\", \"ko_wiki\"], mode=Mode.MACHINE)\n    print(machine_config)\n"
  },
  {
    "path": "tests/integration/test_machine.py",
    "content": "\nimport json\nimport os\nimport pytest\nimport shutil\n\nfrom claf.config.args import optimize_config, set_gpu_env\nfrom claf.config.namespace import NestedNamespace\nfrom claf.config.registry import Registry\nfrom claf.learn.experiment import Experiment\nfrom claf.learn.mode import Mode\n\nimport utils\n\n\nTEST_DIR = os.path.join(\"logs\", \"test\")\nSQUAD_SYNTHETIC_DATA_PATH= os.path.join(TEST_DIR, \"squad_synthetic_data.json\")\nWIKI_SYNTHETIC_DATA_PATH= os.path.join(TEST_DIR, \"wiki_articles\")\n\n\n@pytest.mark.order1\ndef test_make_synthetic_data():\n    if os.path.exists(TEST_DIR):\n        shutil.rmtree(TEST_DIR, ignore_errors=True)\n    os.makedirs(TEST_DIR, exist_ok=True)\n\n    utils.make_wiki_article_synthetic_data(WIKI_SYNTHETIC_DATA_PATH)\n    utils.make_squad_synthetic_data(SQUAD_SYNTHETIC_DATA_PATH)\n\n\n@pytest.fixture\ndef train_config(request):\n    config_path = request.param\n\n    config = NestedNamespace()\n    with open(config_path, \"r\") as f:\n        defined_config = json.load(f)\n    config.load_from_json(defined_config)\n    config.nsml = NestedNamespace()\n    config.nsml.pause = 0\n    config = optimize_config(config, is_test=True)\n    set_gpu_env(config)\n\n    config.data_reader.train_file_path = SQUAD_SYNTHETIC_DATA_PATH\n    config.data_reader.valid_file_path = SQUAD_SYNTHETIC_DATA_PATH\n    return config\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"train_config\", [\"./base_config/test/bidaf.json\"], indirect=True)\ndef test_train_squad_bidaf_model(train_config):\n    experiment = Experiment(Mode.TRAIN, train_config)\n    experiment()\n\n\n@pytest.fixture\ndef open_qa_config(request):\n    config_path = request.param\n\n    machine_config = NestedNamespace()\n    with open(config_path, \"r\") as f:\n        defined_config = json.load(f)\n    machine_config.load_from_json(defined_config)\n\n    claf_name = machine_config.name\n    config = getattr(machine_config, claf_name, {})\n\n    config.knowledge_base.wiki = WIKI_SYNTHETIC_DATA_PATH\n    config.reasoning.reading_comprehension.checkpoint_path = \"./logs/test/bidaf/checkpoint/model_1.pkl\"\n    return machine_config\n\n\n@pytest.mark.order3\n@pytest.mark.parametrize(\"open_qa_config\", [\"./base_config/test/open_qa.json\"], indirect=True)\ndef test_open_qa_with_bidaf_model(open_qa_config):\n    claf_name = open_qa_config.name\n    config = getattr(open_qa_config, claf_name, {})\n\n    registry = Registry()\n    claf_machine = registry.get(f\"machine:{claf_name}\")(config)\n\n    question = utils.make_random_tokens(5)\n    answer = claf_machine(question)\n    answer = json.dumps(answer, indent=4, ensure_ascii=False)\n\n\n@pytest.mark.order4\ndef test_remove_tested_directory():\n    test_path = \"logs/test\"\n    shutil.rmtree(test_path)\n"
  },
  {
    "path": "tests/integration/test_multi_task.py",
    "content": "\nimport json\nimport os\nimport pytest\n\nfrom claf.config.args import optimize_config, set_gpu_env\nfrom claf.config.namespace import NestedNamespace\nfrom claf.learn.experiment import Experiment\nfrom claf.learn.mode import Mode\n\nimport utils\n\n\nSYNTHETIC_QA_DATA_PATH = os.path.join(\"logs\", \"test\", \"data\", \"qa_synthetic_data.json\")\nSYNTHETIC_SEQ_CLS_DATA_PATH = os.path.join(\"logs\", \"test\", \"data\", \"seq_cls_synthetic_data.json\")\nSYNTHETIC_REG_DATA_PATH = os.path.join(\"logs\", \"test\", \"data\", \"reg_synthetic_data.json\")\n\n\n@pytest.fixture\ndef test_config(request):\n    return load_and_setting(request.param)\n\n\ndef load_and_setting(config_path):\n    config = NestedNamespace()\n    with open(config_path, \"r\") as f:\n        defined_config = json.load(f)\n    config.load_from_json(defined_config)\n    config = optimize_config(config, is_test=True)\n    set_gpu_env(config)\n\n    config.data_reader.multitask_bert.readers[0][\"train_file_path\"] = SYNTHETIC_SEQ_CLS_DATA_PATH\n    config.data_reader.multitask_bert.readers[0][\"valid_file_path\"] = SYNTHETIC_SEQ_CLS_DATA_PATH\n\n    config.data_reader.multitask_bert.readers[1][\"train_file_path\"] = SYNTHETIC_REG_DATA_PATH\n    config.data_reader.multitask_bert.readers[1][\"valid_file_path\"] = SYNTHETIC_REG_DATA_PATH\n\n    config.data_reader.multitask_bert.readers[2][\"train_file_path\"] = SYNTHETIC_QA_DATA_PATH\n    config.data_reader.multitask_bert.readers[2][\"valid_file_path\"] = SYNTHETIC_QA_DATA_PATH\n\n    return config\n\n\n@pytest.mark.order1\ndef test_make_multi_task_synthetic_data():\n    utils.make_bert_seq_cls_synthetic_data(SYNTHETIC_SEQ_CLS_DATA_PATH, remove_exist=False)\n    utils.make_bert_reg_synthetic_data(SYNTHETIC_REG_DATA_PATH, remove_exist=False)\n    utils.make_squad_synthetic_data(SYNTHETIC_QA_DATA_PATH, remove_exist=False)\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/bert_for_multi_task.json\"], indirect=True)\ndef test_train_multi_task_bert_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n"
  },
  {
    "path": "tests/integration/test_reading_comprehension.py",
    "content": "\nimport os\nimport pytest\nimport shutil\n\nfrom claf.config.args import optimize_config, set_gpu_env\nfrom claf.config.namespace import NestedNamespace\nfrom claf.config.utils import add_config_extension, read_config\nfrom claf.learn.experiment import Experiment\nfrom claf.learn.mode import Mode\n\nimport utils\n\n\nSYNTHETIC_DATA_PATH = os.path.join(\"logs\", \"test\", \"squad_synthetic_data.json\")\nDUMMY_EMBEDDING_300D_PATH = os.path.join(\"logs\", \"test\", \"dummy_300d.txt\")\n\n\n@pytest.fixture\ndef test_config(request):\n    return load_and_setting(request.param)\n\n\ndef load_and_setting(config_path):\n    config = NestedNamespace()\n\n    config_path = add_config_extension(config_path)\n    defined_config = read_config(config_path)\n    config.load_from_json(defined_config)\n    config = optimize_config(config, is_test=True)\n    set_gpu_env(config)\n\n    config.data_reader.train_file_path = SYNTHETIC_DATA_PATH\n    config.data_reader.valid_file_path = SYNTHETIC_DATA_PATH\n    return config\n\n\n@pytest.mark.order1\ndef test_make_squad_synthetic_data():\n    utils.make_squad_synthetic_data(SYNTHETIC_DATA_PATH)\n    utils.write_embedding_txt(DUMMY_EMBEDDING_300D_PATH, 300)\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/bidaf\"], indirect=True)\ndef test_train_squad_bidaf_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/bidaf_no_answer.json\"], indirect=True)\ndef test_train_squad_bidaf_no_answer_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n# need glove.840B.300d.txt (5.65 GB)\n# @pytest.mark.order2\n# @pytest.mark.parametrize(\"test_config\", [\"./base_config/test/bidaf+cove.json\"], indirect=True)\n# def test_train_squad_bidaf_cove_model(test_config):\n    # experiment = Experiment(Mode.TRAIN, test_config)\n    # experiment()\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/bidaf+elmo.json\"], indirect=True)\ndef test_train_squad_bidaf_elmo_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/drqa.json\"], indirect=True)\ndef test_train_squad_drqa_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/drqa_sparse_to_embedding.json\"], indirect=True)\ndef test_train_squad_drqa_model_with_sparse_to_embedding(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/docqa.json\"], indirect=True)\ndef test_train_squad_docqa_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/docqa_no_answer.json\"], indirect=True)\ndef test_train_squad_docqa_no_answer_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/qanet.json\"], indirect=True)\ndef test_train_squad_qanet_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/bert_for_qa\"], indirect=True)\ndef test_train_squad_bert_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n# TODO: subword ---> word\n# @pytest.mark.order2\n# @pytest.mark.parametrize(\"test_config\", [\"./base_config/test/bidaf+bert.json\"], indirect=True)\n# def test_train_squad_bidaf_model_with_bert(test_config):\n    # experiment = Experiment(Mode.TRAIN, test_config)\n    # experiment()\n\n\n@pytest.mark.order2\ndef test_eval_squad_bidaf():\n    config = NestedNamespace()\n    config.data_file_path = SYNTHETIC_DATA_PATH\n    config.checkpoint_path = \"./logs/test/bidaf/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    set_gpu_env(config)\n\n    experiment = Experiment(Mode.EVAL, config)\n    experiment()\n\n\n@pytest.mark.order3\ndef test_eval_infer_squad_bidaf():\n    config = NestedNamespace()\n    config.data_file_path = SYNTHETIC_DATA_PATH\n    config.checkpoint_path = \"./logs/test/bidaf/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    config.inference_latency = 1000\n    set_gpu_env(config)\n\n    experiment = Experiment(Mode.INFER_EVAL, config)\n    experiment()\n\n\n@pytest.mark.order3\ndef test_qa_predict_squad_bidaf_1_example():\n    config = NestedNamespace()\n    config.checkpoint_path = \"./logs/test/bidaf/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    config.interactive = False\n    set_gpu_env(config)\n\n    config.context = \"Westwood One will carry the game throughout North America, with Kevin Harlan as play-by-play announcer, Boomer Esiason and Dan Fouts as color analysts, and James Lofton and Mark Malone as sideline reporters. Jim Gray will anchor the pre-game and halftime coverage.\"\n    config.question = \"What radio network carried the Super Bowl?\"\n\n    experiment = Experiment(Mode.PREDICT, config)\n    experiment()\n\n\n@pytest.mark.order3\ndef test_qa_predict_squad_bert_short_1_example():\n    config = NestedNamespace()\n    config.checkpoint_path = \"./logs/test/bert_for_qa/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    config.interactive = False\n    set_gpu_env(config)\n\n    config.context = \"Westwood One will carry the game throughout North America, with Kevin Harlan as play-by-play announcer, Boomer Esiason and Dan Fouts as color analysts, and James Lofton and Mark Malone as sideline reporters. Jim Gray will anchor the pre-game and halftime coverage.\"\n    config.question = \"What radio network carried the Super Bowl?\"\n\n    experiment = Experiment(Mode.PREDICT, config)\n    experiment()\n\n\n@pytest.mark.order3\ndef test_qa_predict_squad_bert_long_1_example():\n    config = NestedNamespace()\n    config.checkpoint_path = \"./logs/test/bert_for_qa/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    config.interactive = False\n    set_gpu_env(config)\n\n    config.context = \"hi ho hi ho 1 hi ho hi ho 2 hi ho hi ho 3 hi ho hi ho 4 hi ho hi ho 5 hi ho hi ho 6 hi ho hi ho 7 hi ho hi ho 8 hi ho hi ho hi 9 ho hi ho hi ho hi 10 ho hi ho hi ho hi ho 11 hi ho hi ho hi 12 ANSWER ho hi ho hi ho hi 13 ho hi ho hi ho hi 14 ho hi ho hi ho hi 15 ho hi ho hi ho hi 16 ho hi ho hi ho hi 17 ho hi ho hi ho hi 18 ho hi ho hi ho hi 19 ho hi ho hi ho hi 20 ho hi ho hi ho hi 21 ho hi ho hi ho hi 22 ho hi ho hi ho hi 23 ho hi ho hi ho hi 24 ho hi ho hi 25 ho hi ho hi ho 1 hi ho hi ho 2 hi ho hi ho 3 hi ho hi ho 4 hi ho hi ho 5 hi ho hi ho 6 hi ho hi ho 7 hi ho hi ho 8 hi ho hi ho hi 9 ho hi ho hi ho hi 10 ho hi ho hi ho hi ho 11 hi ho hi ho hi 12 ho hi ho hi ho hi 13 ho hi ho hi ho hi 14 ho hi ho hi ho hi 15 ho hi ho hi ho hi 16 ho hi ho hi ho hi 17 ho hi ho hi ho hi 18 ho hi ho hi ho hi 19 ho hi ho hi ho hi 20 ho hi ho hi ho hi 21 ho hi ho hi ho hi 22 ho hi ho hi ho hi 23 ho hi ho hi ho hi 24 ho hi ho hi 25 ho hi ho hi ho 1 hi ho hi ho 2 hi ho hi ho 3 hi ho hi ho 4 hi ho hi ho 5 hi ho hi ho 6 hi ho hi ho 7 hi ho hi ho 8 hi ho hi ho hi 9 ho hi ho hi ho hi 10 ho hi ho hi ho hi ho 11 hi ho hi ho hi 12 ho hi ho hi ho hi 13 ho hi ho hi ho hi 14 ho hi ho hi ho hi 15 ho hi ho hi ho hi 16 ho hi ho hi ho hi 17 ho hi ho hi ho hi 18 ho hi ho hi ho hi 19 ho hi ho hi ho hi 20 ho hi ho hi ho hi 21 ho hi ho hi ho hi 22 ho hi ho hi ho hi 23 ho hi ho hi ho hi 24 ho hi ho hi 25 ho hi ho hi ho 1 hi ho hi ho 2 hi ho hi ho 3 hi ho hi ho 4 hi ho hi ho 5 hi ho hi ho 6 hi ho hi ho 7 hi ho hi ho 8 hi ho hi ho hi 9 ho hi ho hi ho hi 10 ho hi ho hi ho hi ho 11 hi ho hi ho hi 12 ho hi ho hi ho hi 13 ho hi ho hi ho hi 14 ho hi ho hi ho hi 15 ho hi ho hi ho hi 16 ho hi ho hi ho hi 17 ho hi ho hi ho hi 18 ho hi ho hi ho hi 19 ho hi ho hi ho hi 20 ho hi ho hi ho hi 21 ho hi ho hi ho hi 22 ho hi ho hi ho hi 23 ho hi ho hi ho hi 24 ho hi ho hi 25 ho\"\n    config.question = \"good hi ho hi ho hi good hi ho hi ho hi good hi ho hi ho hi good hi ho hi ho hi good hi ho hi ho hi\"\n\n    experiment = Experiment(Mode.PREDICT, config)\n    experiment()\n\n\n@pytest.mark.order4\ndef test_remove_tested_directory():\n    test_path = \"logs/test\"\n    shutil.rmtree(test_path)\n"
  },
  {
    "path": "tests/integration/test_semantic_parsing.py",
    "content": "\nimport json\nimport os\nimport pytest\nimport shutil\n\nfrom claf.config.args import optimize_config, set_gpu_env\nfrom claf.config.namespace import NestedNamespace\nfrom claf.learn.experiment import Experiment\nfrom claf.learn.mode import Mode\n\n\n\n@pytest.fixture\ndef test_config(request):\n    return load_and_setting(request.param)\n\n\ndef load_and_setting(config_path):\n    config = NestedNamespace()\n    with open(config_path, \"r\") as f:\n        defined_config = json.load(f)\n    config.load_from_json(defined_config)\n    config.data_reader.wikisql = NestedNamespace()\n    config.data_reader.wikisql.is_test = True\n    config = optimize_config(config, is_test=True)\n    set_gpu_env(config)\n    return config\n\n\n@pytest.mark.order1\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/sqlnet.json\"], indirect=True)\ndef test_train_wikisql_sqlnet_model(test_config):\n    os.system(\"sh script/download_wikisql.sh\")\n\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n@pytest.mark.order2\ndef test_qa_predict_wikisql_sqlnet_1_example():\n    config = NestedNamespace()\n    config.checkpoint_path = \"./logs/test/sqlnet/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    config.interactive = False\n    set_gpu_env(config)\n\n    config.column = [\"Player\", \"No.\", \"Nationality\", \"Position\", \"Years in Toronto\", \"School/Club Team\"]\n    config.db_path = \"data/wikisql/dev.db\"\n    config.table_id = \"1-10015132-11\"\n    config.question = \"What position does the player who played for butler cc (ks) play?\"\n\n    experiment = Experiment(Mode.PREDICT, config)\n    experiment()\n\n\n@pytest.mark.order3\ndef test_remove_tested_directory():\n    test_path = \"logs/test\"\n    shutil.rmtree(test_path)\n"
  },
  {
    "path": "tests/integration/test_sequence_classification.py",
    "content": "\nimport json\nimport os\nimport pytest\nimport shutil\n\nfrom claf.config.args import optimize_config, set_gpu_env\nfrom claf.config.namespace import NestedNamespace\nfrom claf.learn.experiment import Experiment\nfrom claf.learn.mode import Mode\n\nimport utils\n\n\nSYNTHETIC_DATA_PATH= os.path.join(\"logs\", \"test\", \"seq_cls\", \"synthetic_data.json\")\n\n\n@pytest.fixture\ndef test_config(request):\n    return load_and_setting(request.param)\n\n\ndef load_and_setting(config_path):\n    config = NestedNamespace()\n    with open(config_path, \"r\") as f:\n        defined_config = json.load(f)\n    config.load_from_json(defined_config)\n    config = optimize_config(config, is_test=True)\n    set_gpu_env(config)\n\n    config.data_reader.train_file_path = SYNTHETIC_DATA_PATH\n    config.data_reader.valid_file_path = SYNTHETIC_DATA_PATH\n    return config\n\n\n@pytest.mark.order1\ndef test_make_synthetic_data():\n    utils.make_seq_cls_synthetic_data(SYNTHETIC_DATA_PATH)\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/ssa.json\"], indirect=True)\ndef test_train_nlu_ssa_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/bert_for_seq_cls.json\"], indirect=True)\ndef test_train_nlu_bert_for_seq_cls_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n@pytest.mark.order3\ndef test_eval_nlu_ssa():\n    config = NestedNamespace()\n    config.data_file_path = SYNTHETIC_DATA_PATH\n    config.checkpoint_path = \"./logs/test/seq_cls/ssa/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    set_gpu_env(config)\n\n    experiment = Experiment(Mode.EVAL, config)\n    experiment()\n\n\n@pytest.mark.order3\ndef test_eval_nlu_bert_for_seq_cls():\n    config = NestedNamespace()\n    config.data_file_path = SYNTHETIC_DATA_PATH\n    config.checkpoint_path = \"./logs/test/seq_cls/bert/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    set_gpu_env(config)\n\n    experiment = Experiment(Mode.EVAL, config)\n    experiment()\n\n\n@pytest.mark.order3\ndef test_predict_nlu_ssa_1_example():\n    config = NestedNamespace()\n    config.checkpoint_path = \"./logs/test/seq_cls/ssa/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    config.interactive = False\n    set_gpu_env(config)\n\n    config.sequence = \"hi, how are you?\"\n\n    experiment = Experiment(Mode.PREDICT, config)\n    experiment()\n\n\n@pytest.mark.order3\ndef test_predict_nlu_bert_for_seq_cls_1_example():\n    config = NestedNamespace()\n    config.checkpoint_path = \"./logs/test/seq_cls/bert/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    config.interactive = False\n    set_gpu_env(config)\n\n    config.sequence = \"hi, how are you?\"\n\n    experiment = Experiment(Mode.PREDICT, config)\n    experiment()\n\n\n@pytest.mark.order4\ndef test_remove_tested_directory():\n    test_path = \"logs/test\"\n    shutil.rmtree(test_path)\n"
  },
  {
    "path": "tests/integration/test_token_classification.py",
    "content": "\nimport json\nimport os\nimport pytest\nimport shutil\nimport random\n\nfrom claf.config.args import optimize_config, set_gpu_env\nfrom claf.config.namespace import NestedNamespace\nfrom claf.learn.experiment import Experiment\nfrom claf.learn.mode import Mode\n\nimport utils\n\n\nSYNTHETIC_DATA_PATH= os.path.join(\"logs\", \"test\", \"tok_cls\", \"synthetic_data.json\")\n\n\n@pytest.fixture\ndef test_config(request):\n    return load_and_setting(request.param)\n\n\ndef load_and_setting(config_path):\n    config = NestedNamespace()\n    with open(config_path, \"r\") as f:\n        defined_config = json.load(f)\n    config.load_from_json(defined_config)\n    config = optimize_config(config, is_test=True)\n    set_gpu_env(config)\n\n    config.data_reader.train_file_path = SYNTHETIC_DATA_PATH\n    config.data_reader.valid_file_path = SYNTHETIC_DATA_PATH\n    return config\n\n\n@pytest.mark.order1\ndef test_make_synthetic_data():\n    utils.make_tok_cls_synthetic_data(SYNTHETIC_DATA_PATH)\n\n\n@pytest.mark.order2\n@pytest.mark.parametrize(\"test_config\", [\"./base_config/test/bert_for_tok_cls.json\"], indirect=True)\ndef test_train_bert_tok_cls_model(test_config):\n    experiment = Experiment(Mode.TRAIN, test_config)\n    experiment()\n\n\n@pytest.mark.order3\ndef test_eval_nlu_bert_for_tok_cls():\n    config = NestedNamespace()\n    config.data_file_path = SYNTHETIC_DATA_PATH\n    config.checkpoint_path = \"./logs/test/tok_cls/bert/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    set_gpu_env(config)\n\n    experiment = Experiment(Mode.EVAL, config)\n    experiment()\n\n\n@pytest.mark.order3\ndef test_predict_nlu_bert_for_tok_cls_1_example():\n    config = NestedNamespace()\n    config.checkpoint_path = \"./logs/test/tok_cls/bert/checkpoint/model_1.pkl\"\n    config.cude_devices = None\n    config.interactive = False\n    set_gpu_env(config)\n\n    config.sequence = \"hi, how are you?\"\n\n    experiment = Experiment(Mode.PREDICT, config)\n    experiment()\n\n\n@pytest.mark.order4\ndef test_remove_tested_directory():\n    test_path = \"logs/test\"\n    shutil.rmtree(test_path)\n"
  },
  {
    "path": "tests/integration/test_tokenizers.py",
    "content": "\nimport pytest\n\nimport spacy\n\nfrom claf.tokens.tokenizer import BPETokenizer, CharTokenizer, SubwordTokenizer, WordTokenizer, SentTokenizer\nfrom claf.tokens.tokenizer.utils import load_spacy_model_for_tokenizer\n\n\n@pytest.fixture\ndef tokenizers(request):\n    sent_name, sent_config, word_name, word_config, \\\n        subword_name, subword_config, char_name, char_config, \\\n        bpe_name, bpe_config = request.param\n\n    sent_tokenizer = SentTokenizer(sent_name, config=sent_config)\n    word_tokenizer = WordTokenizer(word_name, sent_tokenizer, config=word_config)\n    subword_tokenizer = SubwordTokenizer(subword_name, word_tokenizer, config=subword_config)\n    char_tokenizer = CharTokenizer(char_name, word_tokenizer, config=char_config)\n    bpe_tokenizer = BPETokenizer(bpe_name, config=bpe_config)\n\n    return {\n        \"sent\": sent_tokenizer,\n        \"word\": word_tokenizer,\n        \"subword\": subword_tokenizer,\n        \"char\": char_tokenizer,\n        \"bpe\": bpe_tokenizer,\n    }\n\n\n@pytest.mark.parametrize(\"tokenizers\", [(\n    \"punkt\", {},\n    \"space_all\", {},\n    \"wordpiece\", {\n        \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n    },\n    \"character\", {},\n    \"bpe\", {})],\n    indirect=True)\ndef test_en_character_tokenize(tokenizers):\n    text = \"Hello World\"\n\n    tokenizer = tokenizers[\"char\"]\n    results = tokenizer.tokenize(text)\n\n    assert results == [[\"H\", \"e\", \"l\", \"l\", \"o\"], [\"W\", \"o\", \"r\", \"l\", \"d\"]]\n\n\n@pytest.mark.parametrize(\"tokenizers\", [(\n    \"punkt\", {},\n    \"space_all\", {},\n    \"wordpiece\", {\n        \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n    },\n    \"jamo_ko\", {},\n    \"bpe\", {})],\n    indirect=True)\ndef test_jamo_ko_tokenize(tokenizers):\n    text = \"안녕 세상\"\n\n    tokenizer = tokenizers[\"char\"]\n    results = tokenizer.tokenize(text)\n    assert results == [[\"ㅇ\", \"ㅏ\", \"ㄴ\", \"ㄴ\", \"ㅕ\", \"ㅇ\"], [\"ㅅ\", \"ㅔ\", \"ㅅ\", \"ㅏ\", \"ㅇ\"]]\n\n\n@pytest.mark.parametrize(\"tokenizers\", [(\n    \"punkt\", {},\n    \"bert_basic\", {\n        \"do_lower_case\": True\n    },\n    \"wordpiece\", {\n        \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n    },\n    \"jamo_ko\", {},\n    \"bpe\", {})],\n    indirect=True)\ndef test_bert_uncased_en_tokenize(tokenizers):\n    text = \"expectancy of anyone\"\n\n    tokenizer = tokenizers[\"subword\"]\n    results = tokenizer.tokenize(text)\n    assert results == ['expect', '##ancy', 'of', 'anyone']\n\n\n@pytest.mark.parametrize(\"tokenizers\", [(\n    \"punkt\", {},\n    \"space_all\", {},\n    \"wordpiece\", {\n        \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n    },\n    \"character\", {},\n    \"bpe\", {})],\n    indirect=True)\ndef test_space_all_tokenize(tokenizers):\n    text = \"Hi Hello\\tHi\\rHello\\nHi\"\n\n    tokenizer = tokenizers[\"word\"]\n    results = tokenizer.tokenize(text)\n    assert results == ['Hi', 'Hello', 'Hi', 'Hello', 'Hi']\n\n\n@pytest.mark.parametrize(\"tokenizers\", [(\n    \"punkt\", {},\n    \"space_all\", {},\n    \"wordpiece\", {\n        \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n    },\n    \"character\", {},\n    \"bpe\", {})],\n    indirect=True)\ndef test_punkt_tokenize(tokenizers):\n    text = \"Hello World. This is punkt tokenizer.\"\n\n    tokenizer = tokenizers[\"sent\"]\n    results = tokenizer.tokenize(text)\n    assert results == ['Hello World.', 'This is punkt tokenizer.']\n\n\n@pytest.mark.parametrize(\"tokenizers\", [(\n    \"punkt\", {},\n    \"space_all\", {},\n    \"wordpiece\", {\n        \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n    },\n    \"character\", {},\n    \"bpe\", {})],\n    indirect=True)\ndef test_word_with_regex_example_tokenize(tokenizers):\n    text = \"New York City:57–60 And Ted Ginn Jr.[citation needed]\"\n\n    sent_tokenizer = tokenizers[\"sent\"]\n    word_tokenizer = WordTokenizer(\"treebank_en\", sent_tokenizer, split_with_regex=True)\n    results = word_tokenizer.tokenize(text)\n    print(results)\n    assert results == ['New', 'York', 'City', ':', '57', '–', '60', 'And', 'Ted', 'Ginn', 'Jr', '.', '[', 'citation', 'needed', ']']\n\n\n@pytest.mark.parametrize(\"tokenizers\", [(\n    \"punkt\", {},\n    \"space_all\", {},\n    \"wordpiece\", {\n        \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n    },\n    \"character\", {},\n    \"bpe\", {})],\n    indirect=True)\ndef test_spacy_model_with_regex_example_tokenize(tokenizers):\n    text = \"In 1096, Crusaders passing by the siege of Amalfi were joined by Bohemond of Taranto and his nephew Tancred with an army of Italo-Normans. Bohemond was the de facto leader of the Crusade during its passage through Asia Minor. After the successful Siege of Antioch in 1097, Bohemond began carving out an independent principality around that city. Tancred was instrumental in the conquest of Jerusalem and he worked for the expansion of the Crusader kingdom in Transjordan and the region of Galilee.[citation needed]\"\n\n    sent_tokenizer = SentTokenizer(\"punkt\")\n    word_tokenizer = WordTokenizer(\"spacy_en\", sent_tokenizer, split_with_regex=True)\n\n    disables = [\"vectors\", \"textcat\", \"parser\"]\n    spacy_model = spacy.load(\"en_core_web_sm\", disable=disables)\n    spacy_model.tokenizer = load_spacy_model_for_tokenizer(\n        word_tokenizer.extra_split_chars_re\n    )\n\n    sentences = sent_tokenizer.tokenize(text)\n\n    spacy_model_results = []\n    for sentence in sentences:\n        spacy_model_results += [token.text for token in spacy_model(sentence)]\n\n    assert word_tokenizer.tokenize(text) == spacy_model_results\n\n    text = \"20th Century Fox, Lionsgate, Paramount Pictures, Universal Studios and Walt Disney Studios paid for movie trailers to be aired during the Super Bowl. Fox paid for Deadpool, X-Men: Apocalypse, Independence Day: Resurgence and Eddie the Eagle, Lionsgate paid for Gods of Egypt, Paramount paid for Teenage Mutant Ninja Turtles: Out of the Shadows and 10 Cloverfield Lane, Universal paid for The Secret Life of Pets and the debut trailer for Jason Bourne and Disney paid for Captain America: Civil War, The Jungle Book and Alice Through the Looking Glass.[citation needed]\"\n    sentences = sent_tokenizer.tokenize(text)\n\n    spacy_model_results = []\n    for sentence in sentences:\n        spacy_model_results += [token.text for token in spacy_model(sentence)]\n\n    assert word_tokenizer.tokenize(text) == spacy_model_results\n\n\n@pytest.mark.parametrize(\"tokenizers\", [(\n    \"punkt\", {},\n    \"space_all\", {},\n    \"wordpiece\", {\n        \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt\"\n    },\n    \"character\", {},\n    \"roberta\", {\n        \"vocab_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-vocab.json\",\n        \"merges_path\": \"https://s3.amazonaws.com/models.huggingface.co/bert/roberta-base-merges.txt\"\n    })],\n    indirect=True)\ndef test_bpe_tokenize(tokenizers):\n    text = \"As you eat the most, you want the least.\"\n\n    tokenizer = tokenizers[\"bpe\"]\n    results = tokenizer.tokenize(text)\n    assert results == ['As', 'Ġyou', 'Ġeat', 'Ġthe', 'Ġmost', ',', 'Ġyou', 'Ġwant', 'Ġthe', 'Ġleast', '.']\n"
  },
  {
    "path": "tests/integration/utils.py",
    "content": "\nimport json\nimport os\nimport random\nimport shutil\n\nimport numpy as np\n\n\nRANDOM_TOKENS = ['kox', 'pev', 'hi', 'shemini', 'outvote', \"foo\", \"bar\", \"baz\", \"qux\"]\n\n\ndef make_bert_seq_cls_synthetic_data(output_path, remove_exist=True):\n\n    data = {\"data\": []}\n\n    for i in range(10):\n        data[\"data\"].append({\n            \"sequence_a\": make_random_tokens(8),\n            \"sequence_b\": make_random_tokens(8),\n            \"class\": str(i % 2)\n        })\n\n    make_directory(output_path, remove_exist=remove_exist)\n    with open(output_path, 'w') as fp:\n        json.dump(data, fp)\n\n\ndef make_bert_reg_synthetic_data(output_path, remove_exist=True):\n\n    data = {\"data\": []}\n\n    for i in range(10):\n        data[\"data\"].append({\n            \"sequence_a\": make_random_tokens(8),\n            \"sequence_b\": make_random_tokens(8),\n            \"score\": i * 0.1\n        })\n\n    make_directory(output_path, remove_exist=remove_exist)\n    with open(output_path, 'w') as fp:\n        json.dump(data, fp)\n\n\ndef make_squad_synthetic_data(output_path, remove_exist=True):\n    ANSWER_TOKEN = \"ANSWER\"\n    DATA_SIZE = 10\n\n    out_squad = {'data': [], 'version': \"0.1\"}\n    article = {\n        \"paragraphs\": [],\n        \"title\": \"Synthetic data for test\"\n    }\n\n    for _ in range(DATA_SIZE):\n        token_count = random.randint(10, 20)\n        qas = []\n        query_count = 10\n        answers = [{\"answer_start\": 0, \"answer_end\": 0, \"text\": ANSWER_TOKEN}]\n        qa = {\n            \"id\": f\"{token_count}_{query_count}\",\n            \"answers\": answers,\n            \"question\": make_random_tokens(query_count)\n        }\n        qas.append(qa)\n        paragraph = {\n            \"context\": make_random_tokens(token_count, answer_token=ANSWER_TOKEN),\n            \"qas\": qas\n        }\n        article[\"paragraphs\"].append(paragraph)\n    out_squad['data'].append(article)\n\n    make_directory(output_path, remove_exist=False)\n    with open(output_path, 'w') as fp:\n        json.dump(out_squad, fp)\n\n\ndef make_directory(output_path, remove_exist=True):\n    dir_path = os.path.dirname(output_path)\n    if remove_exist and os.path.exists(dir_path):\n        shutil.rmtree(dir_path, ignore_errors=True)\n\n    os.makedirs(os.path.dirname(output_path), exist_ok=True)\n\n\ndef make_wiki_article_synthetic_data(output_dir):\n    AA_articles = [\n        {\"id\": 0, \"url\": \"url\", \"title\": \"title1\", \"text\": make_random_tokens(10)},\n        {\"id\": 1, \"url\": \"url\", \"title\": \"title2\", \"text\": make_random_tokens(10)},\n        {\"id\": 2, \"url\": \"url\", \"title\": \"title3\", \"text\": make_random_tokens(10)},\n    ]\n    AA_articles = [json.dumps(item) for item in AA_articles]\n\n    AA_path = os.path.join(output_dir, \"AA\", \"wiki_00\")\n    print(AA_path)\n    os.makedirs(os.path.dirname(AA_path), exist_ok=True)\n    with open(AA_path, \"w\", encoding=\"utf-8\") as out_file:\n        out_file.write(\"\\n\".join(AA_articles))\n\n    assert os.path.exists(AA_path) == True\n\n    AB_articles = [\n        {\"id\": 3, \"url\": \"url\", \"title\": \"title4\", \"text\": make_random_tokens(10)},\n        {\"id\": 4, \"url\": \"url\", \"title\": \"title5\", \"text\": make_random_tokens(10)},\n        {\"id\": 5, \"url\": \"url\", \"title\": \"title6\", \"text\": make_random_tokens(10)},\n    ]\n    AB_articles = [json.dumps(item) for item in AB_articles]\n\n    AB_path = os.path.join(output_dir, \"AB\", \"wiki_00\")\n    os.makedirs(os.path.dirname(AB_path), exist_ok=True)\n    with open(AB_path, \"w\", encoding=\"utf-8\") as out_file:\n        out_file.write(\"\\n\".join(AB_articles))\n\n    assert os.path.exists(AB_path) == True\n\n\ndef make_random_tokens(length, answer_token=\"\"):\n    tokens = RANDOM_TOKENS\n\n    if answer_token:\n        output = [answer_token]\n    else:\n        output = []\n    for _ in range(length-1):\n        output.append(random.choice(tokens))\n    return \" \".join(output)\n\n\ndef make_seq_cls_synthetic_data(output_path):\n    class_key = \"label\"\n    classes = [\"foo\", \"bar\", \"baz\", \"qux\", \"quux\", \"corge\", \"grault\", \"graply\", \"waldo\"]\n    data_size = 10\n\n    out_seq_cls = {\n        \"data\": [],\n        class_key: classes,\n    }\n\n    for _ in range(data_size):\n        token_count = random.randint(10, 20)\n        sequence = make_random_tokens(token_count)\n        class_ = random.choice(classes)\n\n        out_seq_cls[\"data\"].append({\n            \"sequence\": sequence,\n            class_key: class_,\n        })\n\n    os.makedirs(os.path.dirname(output_path), exist_ok=True)\n\n    with open(output_path, 'w') as fp:\n        json.dump(out_seq_cls, fp)\n\n\ndef make_tok_cls_synthetic_data(output_path):\n    tag_key = \"label\"\n    tags = [\"O\"] + RANDOM_TOKENS\n    data_size = 10\n\n    out_tok_cls = {\n        \"data\": [],\n        tag_key: [\"O\"] + [f\"{prefix}-{tag}\" for prefix in [\"B\", \"I\"] for tag in tags]\n    }\n\n    for _ in range(data_size):\n        token_count = random.randint(10, 20)\n        sequence = make_random_tokens(token_count)\n        tag_sequence = make_dummy_tags(sequence, tags)\n\n        out_tok_cls[\"data\"].append({\n            \"sequence\": sequence,\n            tag_key: tag_sequence,\n        })\n\n    os.makedirs(os.path.dirname(output_path), exist_ok=True)\n\n    with open(output_path, 'w') as fp:\n        json.dump(out_tok_cls, fp)\n\n\ndef make_dummy_tags(sequence, dummy_tag_cands):\n    words = sequence.split()\n\n    tags = []\n    prev_tag = None\n    for word in words:\n        if random.random() < 0.3:\n            tag = \"O\"\n        else:\n            tag = random.choice(dummy_tag_cands)\n            if prev_tag is None or prev_tag[2:] != tag:\n                tag = \"B-\" + tag\n            else:\n                tag = \"I-\" + tag\n        tags.append(tag)\n        if tag == \"O\":\n            prev_tag = None\n        else:\n            prev_tag = tag\n\n    return tags\n\n\ndef write_embedding_txt(output_path, dim):\n    random_nums = np.random.rand(len(RANDOM_TOKENS), 300)\n\n    with open(output_path, \"w\") as out_file:\n        for token, num in zip(RANDOM_TOKENS, random_nums):\n            out_file.write(f\"{token} {num}\\n\")\n"
  },
  {
    "path": "train.py",
    "content": "# -*- coding: utf-8 -*-\n\nfrom claf.config import args\nfrom claf.learn.experiment import Experiment\nfrom claf.learn.mode import Mode\n\n\nif __name__ == \"__main__\":\n    experiment = Experiment(Mode.TRAIN, args.config(mode=Mode.TRAIN))\n    experiment()\n"
  }
]