Metadata-Version: 2.1
Name: nemo_toolkit
Version: 1.23.0
Summary: NeMo - a toolkit for Conversational AI
Home-page: https://github.com/nvidia/nemo
Download-URL: https://github.com/NVIDIA/NeMo/releases
Author: NVIDIA
Author-email: nemo-toolkit@nvidia.com
Maintainer: NVIDIA
Maintainer-email: nemo-toolkit@nvidia.com
License: Apache2
Keywords: deep learning,machine learning,gpu,NLP,NeMo,nvidia,pytorch,torch,tts,speech,language
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Information Technology
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Mathematics
Classifier: Topic :: Scientific/Engineering :: Image Recognition
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Utilities
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Environment :: Console
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: huggingface-hub
Requires-Dist: numba
Requires-Dist: numpy >=1.22
Requires-Dist: onnx >=1.7.0
Requires-Dist: python-dateutil
Requires-Dist: ruamel.yaml
Requires-Dist: scikit-learn
Requires-Dist: setuptools >=65.5.1
Requires-Dist: tensorboard
Requires-Dist: text-unidecode
Requires-Dist: torch
Requires-Dist: tqdm >=4.41.0
Requires-Dist: triton
Requires-Dist: wget
Requires-Dist: wrapt
Provides-Extra: all
Requires-Dist: black ==19.10b0 ; extra == 'all'
Requires-Dist: click ==8.0.2 ; extra == 'all'
Requires-Dist: isort <6.0.0,>5.1.0 ; extra == 'all'
Requires-Dist: parameterized ; extra == 'all'
Requires-Dist: pytest ; extra == 'all'
Requires-Dist: pytest-runner ; extra == 'all'
Requires-Dist: ruamel.yaml ; extra == 'all'
Requires-Dist: sphinx ; extra == 'all'
Requires-Dist: sphinxcontrib-bibtex ; extra == 'all'
Requires-Dist: wandb ; extra == 'all'
Requires-Dist: wget ; extra == 'all'
Requires-Dist: wrapt ; extra == 'all'
Requires-Dist: hydra-core <=1.3.2,>1.3 ; extra == 'all'
Requires-Dist: omegaconf <=2.3 ; extra == 'all'
Requires-Dist: pytorch-lightning <=2.0.7,>=2.0 ; extra == 'all'
Requires-Dist: torchmetrics >=0.11.0 ; extra == 'all'
Requires-Dist: transformers >=4.36.0 ; extra == 'all'
Requires-Dist: webdataset <=0.1.62,>=0.1.48 ; extra == 'all'
Requires-Dist: datasets ; extra == 'all'
Requires-Dist: inflect ; extra == 'all'
Requires-Dist: pandas ; extra == 'all'
Requires-Dist: sacremoses >=0.0.43 ; extra == 'all'
Requires-Dist: sentencepiece <1.0.0 ; extra == 'all'
Requires-Dist: youtokentome >=1.0.5 ; extra == 'all'
Requires-Dist: braceexpand ; extra == 'all'
Requires-Dist: editdistance ; extra == 'all'
Requires-Dist: g2p-en ; extra == 'all'
Requires-Dist: ipywidgets ; extra == 'all'
Requires-Dist: jiwer ; extra == 'all'
Requires-Dist: kaldi-python-io ; extra == 'all'
Requires-Dist: kaldiio ; extra == 'all'
Requires-Dist: lhotse >=1.20.0 ; extra == 'all'
Requires-Dist: librosa >=0.10.0 ; extra == 'all'
Requires-Dist: marshmallow ; extra == 'all'
Requires-Dist: matplotlib ; extra == 'all'
Requires-Dist: packaging ; extra == 'all'
Requires-Dist: pyannote.core ; extra == 'all'
Requires-Dist: pyannote.metrics ; extra == 'all'
Requires-Dist: pydub ; extra == 'all'
Requires-Dist: pyloudnorm ; extra == 'all'
Requires-Dist: resampy ; extra == 'all'
Requires-Dist: scipy >=0.14 ; extra == 'all'
Requires-Dist: soundfile ; extra == 'all'
Requires-Dist: sox ; extra == 'all'
Requires-Dist: texterrors ; extra == 'all'
Requires-Dist: boto3 ; extra == 'all'
Requires-Dist: einops ; extra == 'all'
Requires-Dist: faiss-cpu ; extra == 'all'
Requires-Dist: fasttext ; extra == 'all'
Requires-Dist: flask-restful ; extra == 'all'
Requires-Dist: ftfy ; extra == 'all'
Requires-Dist: gdown ; extra == 'all'
Requires-Dist: h5py ; extra == 'all'
Requires-Dist: ijson ; extra == 'all'
Requires-Dist: jieba ; extra == 'all'
Requires-Dist: markdown2 ; extra == 'all'
Requires-Dist: matplotlib >=3.3.2 ; extra == 'all'
Requires-Dist: megatron-core ==0.5.0 ; extra == 'all'
Requires-Dist: nltk >=3.6.5 ; extra == 'all'
Requires-Dist: opencc <1.1.7 ; extra == 'all'
Requires-Dist: pangu ; extra == 'all'
Requires-Dist: rapidfuzz ; extra == 'all'
Requires-Dist: rouge-score ; extra == 'all'
Requires-Dist: sacrebleu ; extra == 'all'
Requires-Dist: sentence-transformers ; extra == 'all'
Requires-Dist: tensorstore <0.1.46 ; extra == 'all'
Requires-Dist: zarr ; extra == 'all'
Requires-Dist: attrdict ; extra == 'all'
Requires-Dist: kornia ; extra == 'all'
Requires-Dist: librosa ; extra == 'all'
Requires-Dist: nltk ; extra == 'all'
Requires-Dist: pypinyin ; extra == 'all'
Requires-Dist: pypinyin-dict ; extra == 'all'
Requires-Dist: jiwer >=2.0.0 ; extra == 'all'
Requires-Dist: progress >=1.5 ; extra == 'all'
Requires-Dist: tabulate >=0.8.7 ; extra == 'all'
Requires-Dist: textdistance >=4.1.5 ; extra == 'all'
Requires-Dist: tqdm ; extra == 'all'
Requires-Dist: addict ; extra == 'all'
Requires-Dist: clip ; extra == 'all'
Requires-Dist: diffusers >=0.19.3 ; extra == 'all'
Requires-Dist: einops-exts ; extra == 'all'
Requires-Dist: imageio ; extra == 'all'
Requires-Dist: nerfacc >=0.5.3 ; extra == 'all'
Requires-Dist: open-clip-torch ; extra == 'all'
Requires-Dist: PyMCubes ; extra == 'all'
Requires-Dist: taming-transformers ; extra == 'all'
Requires-Dist: torchdiffeq ; extra == 'all'
Requires-Dist: torchsde ; extra == 'all'
Requires-Dist: trimesh ; extra == 'all'
Requires-Dist: nemo-text-processing ; ("arm" not in platform_machine and "aarch" not in platform_machine) and extra == 'all'
Provides-Extra: asr
Requires-Dist: braceexpand ; extra == 'asr'
Requires-Dist: editdistance ; extra == 'asr'
Requires-Dist: g2p-en ; extra == 'asr'
Requires-Dist: ipywidgets ; extra == 'asr'
Requires-Dist: jiwer ; extra == 'asr'
Requires-Dist: kaldi-python-io ; extra == 'asr'
Requires-Dist: kaldiio ; extra == 'asr'
Requires-Dist: lhotse >=1.20.0 ; extra == 'asr'
Requires-Dist: librosa >=0.10.0 ; extra == 'asr'
Requires-Dist: marshmallow ; extra == 'asr'
Requires-Dist: matplotlib ; extra == 'asr'
Requires-Dist: packaging ; extra == 'asr'
Requires-Dist: pyannote.core ; extra == 'asr'
Requires-Dist: pyannote.metrics ; extra == 'asr'
Requires-Dist: pydub ; extra == 'asr'
Requires-Dist: pyloudnorm ; extra == 'asr'
Requires-Dist: resampy ; extra == 'asr'
Requires-Dist: ruamel.yaml ; extra == 'asr'
Requires-Dist: scipy >=0.14 ; extra == 'asr'
Requires-Dist: soundfile ; extra == 'asr'
Requires-Dist: sox ; extra == 'asr'
Requires-Dist: texterrors ; extra == 'asr'
Requires-Dist: hydra-core <=1.3.2,>1.3 ; extra == 'asr'
Requires-Dist: omegaconf <=2.3 ; extra == 'asr'
Requires-Dist: pytorch-lightning <=2.0.7,>=2.0 ; extra == 'asr'
Requires-Dist: torchmetrics >=0.11.0 ; extra == 'asr'
Requires-Dist: transformers >=4.36.0 ; extra == 'asr'
Requires-Dist: wandb ; extra == 'asr'
Requires-Dist: webdataset <=0.1.62,>=0.1.48 ; extra == 'asr'
Requires-Dist: datasets ; extra == 'asr'
Requires-Dist: inflect ; extra == 'asr'
Requires-Dist: pandas ; extra == 'asr'
Requires-Dist: sacremoses >=0.0.43 ; extra == 'asr'
Requires-Dist: sentencepiece <1.0.0 ; extra == 'asr'
Requires-Dist: youtokentome >=1.0.5 ; extra == 'asr'
Provides-Extra: common
Requires-Dist: datasets ; extra == 'common'
Requires-Dist: inflect ; extra == 'common'
Requires-Dist: pandas ; extra == 'common'
Requires-Dist: sacremoses >=0.0.43 ; extra == 'common'
Requires-Dist: sentencepiece <1.0.0 ; extra == 'common'
Requires-Dist: youtokentome >=1.0.5 ; extra == 'common'
Requires-Dist: hydra-core <=1.3.2,>1.3 ; extra == 'common'
Requires-Dist: omegaconf <=2.3 ; extra == 'common'
Requires-Dist: pytorch-lightning <=2.0.7,>=2.0 ; extra == 'common'
Requires-Dist: torchmetrics >=0.11.0 ; extra == 'common'
Requires-Dist: transformers >=4.36.0 ; extra == 'common'
Requires-Dist: wandb ; extra == 'common'
Requires-Dist: webdataset <=0.1.62,>=0.1.48 ; extra == 'common'
Provides-Extra: core
Requires-Dist: hydra-core <=1.3.2,>1.3 ; extra == 'core'
Requires-Dist: omegaconf <=2.3 ; extra == 'core'
Requires-Dist: pytorch-lightning <=2.0.7,>=2.0 ; extra == 'core'
Requires-Dist: torchmetrics >=0.11.0 ; extra == 'core'
Requires-Dist: transformers >=4.36.0 ; extra == 'core'
Requires-Dist: wandb ; extra == 'core'
Requires-Dist: webdataset <=0.1.62,>=0.1.48 ; extra == 'core'
Provides-Extra: multimodal
Requires-Dist: addict ; extra == 'multimodal'
Requires-Dist: clip ; extra == 'multimodal'
Requires-Dist: diffusers >=0.19.3 ; extra == 'multimodal'
Requires-Dist: einops-exts ; extra == 'multimodal'
Requires-Dist: imageio ; extra == 'multimodal'
Requires-Dist: kornia ; extra == 'multimodal'
Requires-Dist: nerfacc >=0.5.3 ; extra == 'multimodal'
Requires-Dist: open-clip-torch ; extra == 'multimodal'
Requires-Dist: PyMCubes ; extra == 'multimodal'
Requires-Dist: taming-transformers ; extra == 'multimodal'
Requires-Dist: torchdiffeq ; extra == 'multimodal'
Requires-Dist: torchsde ; extra == 'multimodal'
Requires-Dist: trimesh ; extra == 'multimodal'
Requires-Dist: boto3 ; extra == 'multimodal'
Requires-Dist: einops ; extra == 'multimodal'
Requires-Dist: faiss-cpu ; extra == 'multimodal'
Requires-Dist: fasttext ; extra == 'multimodal'
Requires-Dist: flask-restful ; extra == 'multimodal'
Requires-Dist: ftfy ; extra == 'multimodal'
Requires-Dist: gdown ; extra == 'multimodal'
Requires-Dist: h5py ; extra == 'multimodal'
Requires-Dist: ijson ; extra == 'multimodal'
Requires-Dist: jieba ; extra == 'multimodal'
Requires-Dist: markdown2 ; extra == 'multimodal'
Requires-Dist: matplotlib >=3.3.2 ; extra == 'multimodal'
Requires-Dist: megatron-core ==0.5.0 ; extra == 'multimodal'
Requires-Dist: nltk >=3.6.5 ; extra == 'multimodal'
Requires-Dist: opencc <1.1.7 ; extra == 'multimodal'
Requires-Dist: pangu ; extra == 'multimodal'
Requires-Dist: rapidfuzz ; extra == 'multimodal'
Requires-Dist: rouge-score ; extra == 'multimodal'
Requires-Dist: sacrebleu ; extra == 'multimodal'
Requires-Dist: sentence-transformers ; extra == 'multimodal'
Requires-Dist: tensorstore <0.1.46 ; extra == 'multimodal'
Requires-Dist: zarr ; extra == 'multimodal'
Requires-Dist: hydra-core <=1.3.2,>1.3 ; extra == 'multimodal'
Requires-Dist: omegaconf <=2.3 ; extra == 'multimodal'
Requires-Dist: pytorch-lightning <=2.0.7,>=2.0 ; extra == 'multimodal'
Requires-Dist: torchmetrics >=0.11.0 ; extra == 'multimodal'
Requires-Dist: transformers >=4.36.0 ; extra == 'multimodal'
Requires-Dist: wandb ; extra == 'multimodal'
Requires-Dist: webdataset <=0.1.62,>=0.1.48 ; extra == 'multimodal'
Requires-Dist: datasets ; extra == 'multimodal'
Requires-Dist: inflect ; extra == 'multimodal'
Requires-Dist: pandas ; extra == 'multimodal'
Requires-Dist: sacremoses >=0.0.43 ; extra == 'multimodal'
Requires-Dist: sentencepiece <1.0.0 ; extra == 'multimodal'
Requires-Dist: youtokentome >=1.0.5 ; extra == 'multimodal'
Provides-Extra: nlp
Requires-Dist: boto3 ; extra == 'nlp'
Requires-Dist: einops ; extra == 'nlp'
Requires-Dist: faiss-cpu ; extra == 'nlp'
Requires-Dist: fasttext ; extra == 'nlp'
Requires-Dist: flask-restful ; extra == 'nlp'
Requires-Dist: ftfy ; extra == 'nlp'
Requires-Dist: gdown ; extra == 'nlp'
Requires-Dist: h5py ; extra == 'nlp'
Requires-Dist: ijson ; extra == 'nlp'
Requires-Dist: jieba ; extra == 'nlp'
Requires-Dist: markdown2 ; extra == 'nlp'
Requires-Dist: matplotlib >=3.3.2 ; extra == 'nlp'
Requires-Dist: megatron-core ==0.5.0 ; extra == 'nlp'
Requires-Dist: nltk >=3.6.5 ; extra == 'nlp'
Requires-Dist: opencc <1.1.7 ; extra == 'nlp'
Requires-Dist: pangu ; extra == 'nlp'
Requires-Dist: rapidfuzz ; extra == 'nlp'
Requires-Dist: rouge-score ; extra == 'nlp'
Requires-Dist: sacrebleu ; extra == 'nlp'
Requires-Dist: sentence-transformers ; extra == 'nlp'
Requires-Dist: tensorstore <0.1.46 ; extra == 'nlp'
Requires-Dist: zarr ; extra == 'nlp'
Requires-Dist: hydra-core <=1.3.2,>1.3 ; extra == 'nlp'
Requires-Dist: omegaconf <=2.3 ; extra == 'nlp'
Requires-Dist: pytorch-lightning <=2.0.7,>=2.0 ; extra == 'nlp'
Requires-Dist: torchmetrics >=0.11.0 ; extra == 'nlp'
Requires-Dist: transformers >=4.36.0 ; extra == 'nlp'
Requires-Dist: wandb ; extra == 'nlp'
Requires-Dist: webdataset <=0.1.62,>=0.1.48 ; extra == 'nlp'
Requires-Dist: datasets ; extra == 'nlp'
Requires-Dist: inflect ; extra == 'nlp'
Requires-Dist: pandas ; extra == 'nlp'
Requires-Dist: sacremoses >=0.0.43 ; extra == 'nlp'
Requires-Dist: sentencepiece <1.0.0 ; extra == 'nlp'
Requires-Dist: youtokentome >=1.0.5 ; extra == 'nlp'
Provides-Extra: slu
Requires-Dist: jiwer >=2.0.0 ; extra == 'slu'
Requires-Dist: progress >=1.5 ; extra == 'slu'
Requires-Dist: tabulate >=0.8.7 ; extra == 'slu'
Requires-Dist: textdistance >=4.1.5 ; extra == 'slu'
Requires-Dist: tqdm ; extra == 'slu'
Requires-Dist: braceexpand ; extra == 'slu'
Requires-Dist: editdistance ; extra == 'slu'
Requires-Dist: g2p-en ; extra == 'slu'
Requires-Dist: ipywidgets ; extra == 'slu'
Requires-Dist: jiwer ; extra == 'slu'
Requires-Dist: kaldi-python-io ; extra == 'slu'
Requires-Dist: kaldiio ; extra == 'slu'
Requires-Dist: lhotse >=1.20.0 ; extra == 'slu'
Requires-Dist: librosa >=0.10.0 ; extra == 'slu'
Requires-Dist: marshmallow ; extra == 'slu'
Requires-Dist: matplotlib ; extra == 'slu'
Requires-Dist: packaging ; extra == 'slu'
Requires-Dist: pyannote.core ; extra == 'slu'
Requires-Dist: pyannote.metrics ; extra == 'slu'
Requires-Dist: pydub ; extra == 'slu'
Requires-Dist: pyloudnorm ; extra == 'slu'
Requires-Dist: resampy ; extra == 'slu'
Requires-Dist: ruamel.yaml ; extra == 'slu'
Requires-Dist: scipy >=0.14 ; extra == 'slu'
Requires-Dist: soundfile ; extra == 'slu'
Requires-Dist: sox ; extra == 'slu'
Requires-Dist: texterrors ; extra == 'slu'
Requires-Dist: hydra-core <=1.3.2,>1.3 ; extra == 'slu'
Requires-Dist: omegaconf <=2.3 ; extra == 'slu'
Requires-Dist: pytorch-lightning <=2.0.7,>=2.0 ; extra == 'slu'
Requires-Dist: torchmetrics >=0.11.0 ; extra == 'slu'
Requires-Dist: transformers >=4.36.0 ; extra == 'slu'
Requires-Dist: wandb ; extra == 'slu'
Requires-Dist: webdataset <=0.1.62,>=0.1.48 ; extra == 'slu'
Requires-Dist: datasets ; extra == 'slu'
Requires-Dist: inflect ; extra == 'slu'
Requires-Dist: pandas ; extra == 'slu'
Requires-Dist: sacremoses >=0.0.43 ; extra == 'slu'
Requires-Dist: sentencepiece <1.0.0 ; extra == 'slu'
Requires-Dist: youtokentome >=1.0.5 ; extra == 'slu'
Provides-Extra: test
Requires-Dist: attrdict ; extra == 'test'
Requires-Dist: einops ; extra == 'test'
Requires-Dist: jieba ; extra == 'test'
Requires-Dist: kornia ; extra == 'test'
Requires-Dist: librosa ; extra == 'test'
Requires-Dist: matplotlib ; extra == 'test'
Requires-Dist: nltk ; extra == 'test'
Requires-Dist: pandas ; extra == 'test'
Requires-Dist: pypinyin ; extra == 'test'
Requires-Dist: pypinyin-dict ; extra == 'test'
Requires-Dist: hydra-core <=1.3.2,>1.3 ; extra == 'test'
Requires-Dist: omegaconf <=2.3 ; extra == 'test'
Requires-Dist: pytorch-lightning <=2.0.7,>=2.0 ; extra == 'test'
Requires-Dist: torchmetrics >=0.11.0 ; extra == 'test'
Requires-Dist: transformers >=4.36.0 ; extra == 'test'
Requires-Dist: wandb ; extra == 'test'
Requires-Dist: webdataset <=0.1.62,>=0.1.48 ; extra == 'test'
Requires-Dist: datasets ; extra == 'test'
Requires-Dist: inflect ; extra == 'test'
Requires-Dist: sacremoses >=0.0.43 ; extra == 'test'
Requires-Dist: sentencepiece <1.0.0 ; extra == 'test'
Requires-Dist: youtokentome >=1.0.5 ; extra == 'test'
Requires-Dist: nemo-text-processing ; ("arm" not in platform_machine and "aarch" not in platform_machine) and extra == 'test'
Provides-Extra: tts
Requires-Dist: attrdict ; extra == 'tts'
Requires-Dist: einops ; extra == 'tts'
Requires-Dist: jieba ; extra == 'tts'
Requires-Dist: kornia ; extra == 'tts'
Requires-Dist: librosa ; extra == 'tts'
Requires-Dist: matplotlib ; extra == 'tts'
Requires-Dist: nltk ; extra == 'tts'
Requires-Dist: pandas ; extra == 'tts'
Requires-Dist: pypinyin ; extra == 'tts'
Requires-Dist: pypinyin-dict ; extra == 'tts'
Requires-Dist: hydra-core <=1.3.2,>1.3 ; extra == 'tts'
Requires-Dist: omegaconf <=2.3 ; extra == 'tts'
Requires-Dist: pytorch-lightning <=2.0.7,>=2.0 ; extra == 'tts'
Requires-Dist: torchmetrics >=0.11.0 ; extra == 'tts'
Requires-Dist: transformers >=4.36.0 ; extra == 'tts'
Requires-Dist: wandb ; extra == 'tts'
Requires-Dist: webdataset <=0.1.62,>=0.1.48 ; extra == 'tts'
Requires-Dist: datasets ; extra == 'tts'
Requires-Dist: inflect ; extra == 'tts'
Requires-Dist: sacremoses >=0.0.43 ; extra == 'tts'
Requires-Dist: sentencepiece <1.0.0 ; extra == 'tts'
Requires-Dist: youtokentome >=1.0.5 ; extra == 'tts'
Requires-Dist: braceexpand ; extra == 'tts'
Requires-Dist: editdistance ; extra == 'tts'
Requires-Dist: g2p-en ; extra == 'tts'
Requires-Dist: ipywidgets ; extra == 'tts'
Requires-Dist: jiwer ; extra == 'tts'
Requires-Dist: kaldi-python-io ; extra == 'tts'
Requires-Dist: kaldiio ; extra == 'tts'
Requires-Dist: lhotse >=1.20.0 ; extra == 'tts'
Requires-Dist: librosa >=0.10.0 ; extra == 'tts'
Requires-Dist: marshmallow ; extra == 'tts'
Requires-Dist: packaging ; extra == 'tts'
Requires-Dist: pyannote.core ; extra == 'tts'
Requires-Dist: pyannote.metrics ; extra == 'tts'
Requires-Dist: pydub ; extra == 'tts'
Requires-Dist: pyloudnorm ; extra == 'tts'
Requires-Dist: resampy ; extra == 'tts'
Requires-Dist: ruamel.yaml ; extra == 'tts'
Requires-Dist: scipy >=0.14 ; extra == 'tts'
Requires-Dist: soundfile ; extra == 'tts'
Requires-Dist: sox ; extra == 'tts'
Requires-Dist: texterrors ; extra == 'tts'
Requires-Dist: nemo-text-processing ; ("arm" not in platform_machine and "aarch" not in platform_machine) and extra == 'tts'

NeMo (**Ne**ural **Mo**dules) is a toolkit for creating AI applications built around **neural modules**, conceptual blocks of neural networks that take *typed* inputs and produce *typed* outputs.

**NeMo Core** provides common APIs all modules and models have to implement.

**NeMo Collections**

* ASR - collection of modules and models for building speech recognition networks
* TTS - collection of modules and models for building speech synthesis networks
* NLP - collection of modules and models for building NLP networks
* Vision - collection of modules and models for building computer vision networks
* Multimodal - collection of modules and models for building multimodal networks
